百科问答小站 logo
百科问答小站 font logo



Linux设备驱动开发 新手,创建第一个字符设备驱动时对一些代码的功能不是很了解,能解释一下吗? 第1页

  

user avatar   zorrolang 网友的相关建议: 
      

你应该不是对代码的逻辑不理解,你是对Linux内核的字符设备驱动的运行逻辑不理解,或者往深了说你是对Linux内核的逻辑不理解。

因为上面read_test(), write_test()和open_test()三个函数的实现非常简单,即使光从代码的字面翻译都能看出来它们在干嘛。

read_test就是_put_user('a',buf),顾名思义就是put字符'a'到userspace的buf,这个buf就是你使用read系统调用时指定的buf。(man 2 read)

write_test则更简单,它就直接return count,顾名思义就是你让我写多少(count)个字符,我就直接告诉我我写完了多少(count)个,但是我不真的写,什么操作都没有。也就是直接返回你调用write系统调用时指定的count参数,别的都不管。(man 2 write)

open_test也是只有一个操作,try_module_get(THIS_MODULE)就是字面的意思,尝试获取一下当前的模块。能get到就说明模块被加载了,get不到就说名模块不在。这个函数没有使用open系统调用的任何参数做任何操作。(man 2 open)

你将这三个基本操作注册到你的字符设备的file_operations中,那么会在open, read和write的时候调用这三个函数。所以如果你顺利加载了你的这个模块(我没有检查代码有没有错误),理论上你就是得到一个自己命名的字符设备,然后你读它会得到字符a,写它则直接返回成功没有任何改变。

所以当你说你不懂这个驱动代码的意思的时候,你应该想想自己是真不懂代码的意思,还是不懂代码背后的基本知识,比如上述三个函数分别在字符设备被操作的哪个时刻被执行,过程时怎么样的,谁调用它们,它们又返回给谁?等等……有时候我们看书,看的时候觉得每句话都看懂了,但是合上书却一个完整的概念说不出来。

PS:以后记得把代码的部分至少放在代码块中(我刚给放进去了),代码格式都混乱的问题真的很不招人待见,看见这种代码格式后回不回答真的看各个答主的心情了。




  

相关话题

  当初Linux的作者想写一个操作系统,结果全世界外国人帮他写完;如今我也想写一个,为啥国内没人帮我? 
  FreeBSD 还有前途吗? 
  c语言中的sizeof()是如何分辨数组名和指针的? 
  半个月可以写出一个电脑操作系统吗? 
  为什么多方安全计算(或者隐私计算/联邦学习)在中国这么火? 
  如果未来国内普遍使用鸿蒙操作系统,中国人会不会面临难以接触国外软件(例如游戏)的问题? 
  为什么说「量化穷三代,计算毁一生」? 
  超越人类的人工智能 (AI) 是否能够实现? 
  如果华为推出自主操作系统,作为开发者的你会予以支持吗? 
  物理专业学生应该具备哪些数学素养? 

前一个讨论
BitLocker 是什么,有什么作用?
下一个讨论
电梯有时会发生故障垂直坠落,电梯有什么相应的保障措施吗?比如底部安装安全气囊或其他保护垫装备?





© 2025-06-24 - tinynew.org. All Rights Reserved.
© 2025-06-24 - tinynew.org. 保留所有权利