我是开发Linux驱动程序的新手。
传统上,如果我想创建 char 设备,我只需要实现read write和ioctl功能,并通过register_chrdev_region相应的Major device ID. 然后mknod用来创建那个的设备文件Major device ID。然后read write open在用户空间调用就会被内核调用相应的函数。
但是现在我正在学习Linux device modeland sys filesystem,它是在内核 2.6 中添加的。如果可能的话,我被告知不要使用/dev filesystem,因为 linux 现在有一个很好的设备模型来处理设备和驱动程序。这让我很困惑,所以我将我的困惑总结为一些问题:
- 如何在 /sys 中创建字符设备?更具体地说,我如何创建一个空设备,就像
/dev/null? - 如何从用户空间调用我的 char 设备驱动程序函数?
- 听说
udev是基于sys filesystem在/dev. 为什么?既然有人告诉我“如果可能,不要使用/dev filesystem”,为什么要udev使用/sys在中创建文件/dev? - 文件中是否
sys有类似char device fileor的概念block device? - 在
/dev,openwrite从用户空间最终将映射到file operation structure我定义的函数,那么当我打开或写入文件时会调用哪些函数/ssy?