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




  

相关话题

  Fedora 18如何通过Dr.com联网? 
  网传华为鸿蒙明年正式出海登陆欧洲, 有什么重大意义? 
  目前计算机能精确计算小数了么? 
  你有自制的操作系统吗? 
  中国芯片产业的崛起需要做出那些努力? 
  为什么一些人很瞧不起 Java? 
  Linux 内核的 C 代码风格是怎样的? 
  数学的符号系统有没有缺陷? 
  华为的鸿蒙系统能成功吗? 
  程序计数器(Program Counter)是一个实际存在的寄存器吗? 

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





© 2025-01-30 - tinynew.org. All Rights Reserved.
© 2025-01-30 - tinynew.org. 保留所有权利