我一直在阅读作为内核模块实现的驱动程序,并对系统调用的 CMD 参数感到困惑。系统调用的 CMD 参数似乎在其他信息中编码了设备的主要编号。这是为什么?此信息绝对必要吗?
假设我以“echo 5 >/dev/mytestdevice”的形式对我的设备执行写入操作。我没有指定主要编号,因此我相信内核已经有办法将设备与其内核模块相关联。如果是这样,为什么我需要在对设备的 ioctl 调用中提供该信息(因为我将 fd
作为第一个参数传递给设备)?
总结我的问题是:-
- 当我执行“echo 5 >/dev/mytestdevice”时,内核如何找到与该设备对应的驱动程序?
- 为什么要将主要编号作为参数传递给 ioctl 调用?
最佳答案
设备文件的
- When I do a "echo 5 > /dev/mytestdevice", how does the kernel find the driver corresponding to that device?
Inode /dev/mytestdevice
是一个特殊点:它不是与某些文件的内容相关联,而是包含主要和次要编号。当您尝试对此类文件执行某些操作时,内核首先使用这些标识符搜索已注册的设备,然后为找到的设备重定向操作。
- Why is the major number passed as an argument to an ioctl call?
这不是真的:cmd
ioctl
的参数调用不包含主号码。
关于linux - 内核模块和主要编号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36414040/