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