百科问答小站 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:以后记得把代码的部分至少放在代码块中(我刚给放进去了),代码格式都混乱的问题真的很不招人待见,看见这种代码格式后回不回答真的看各个答主的心情了。




  

相关话题

  不同x86体系结构下的汇编语言是可以移植的吗? 
  华为宣布捐赠 openEuler 欧拉开源操作系统,这意味着什么? 
  如果从来不用IE,还有必要打上微软发布的IE安全补丁么? 
  如何看待CentOS 8将于2021年结束支持? 
  学了计算机后感觉各种软件其实都不可靠,信不过电脑怎么办? 
  最近win11发布说兼容安卓,里面会不会有“com.android.xxx”的代码,是不是安卓套壳? 
  Fuchsia OS可以从Cast OS保留数据升级,是否说明Fuchsia只是Linux套壳? 
  为什么Windows会显示这种奇怪字体? 
  为什么现在很多人对网络空间安全专业持劝退态度? 
  汉字在计算机中的表示方式有哪些? 

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





© 2024-11-21 - tinynew.org. All Rights Reserved.
© 2024-11-21 - tinynew.org. 保留所有权利