我正在阅读Linux 内核模块编程指南我对设备驱动程序的工作原理有点困惑。
我尝试遵循并制作一个基本的设备驱动程序,该驱动程序显示在 /proc/devices 中,这很棒。根据该指南,为了与 Linux 中的驱动程序交互,用户空间程序可以与 /dev/ 中该设备的设备文件进行交互。但现在,我编写的模块不会生成设备文件。什么管理新文件的生成?这是我应该在 module_init 中做的事情吗?
假设我已经制作了一个设备文件,正在与驱动程序进行交互,例如 C++ 程序,只需打开一个 fstream 并读取或写入该文件,或者是否有用于与用户空间中的设备文件交互的特定库?
答案1
中的文件/dev
主要由进程创建,该进程通过侦听套接字udev
从内核接收事件(请参阅参考资料)。当创建新的内核对象 (kobject) 时发送事件。这些对象也可以在 sysfs 文件系统中看到。特别是,子树中命名的文件保存用于给定设备的节点的主要编号和次要编号。例如netlink
NETLINK_KOBJECT_UEVENT
man 7 netlink
/sys
dev
/sys/devices
$ cat /sys/devices/pnp0/00:05/tty/ttyS0/dev
4:64
这个网上有解释第14章.pdf的Linux 设备驱动程序,第三版
从2005年开始,Linux 设备模型。它有点过时了,没有提到netlink
例如。