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




  

相关话题

  Windows 和 Linux 有什么区别? 
  计算机领域有哪些「将错就错」被沿用至今? 
  为什么linux没有PE盘? 
  为什么汇编语言不能越过操作系统操控硬件? 
  光刻机,计算机半导体硬件研发和制造,需要那些学科? 
  如何关闭win10的自动更新? 
  vs2013 有必要 使用 visual assist或resharper吗? 
  推荐算法岗是否存在严重人才过剩? 
  在程序运行后,调试打断点时,反汇编看到的是虚拟地址还是物理地址? 
  知乎上是否存在对计算机的严重吹捧? 

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





© 2024-05-17 - tinynew.org. All Rights Reserved.
© 2024-05-17 - tinynew.org. 保留所有权利