linux – 主要号码次要号码和驱动程序加载
我是初学者.我对与设备驱动程序相关的主要数字和次要数字有所了解.另外我知道可以插入
Linux系统的大多数设备都有一个主要数字.并且基于该主要编号,加载相应的驱动程序.
我有这个疑问,请告诉我内核在插入时如何从设备中读取主要数字? 请解释从设备插件到驱动程序加载的步骤,尽可能简单. 提前致谢. 解决方法
主要/次要编号用于块和字符设备.
您没有从设备中检测到主号码.也许您认为USB设备可以通信设备号而Linux使用这些设备号,但USB供应商/产品ID与主要数字无关.如果将完全愚蠢的串行设备插入串口怎么办?内核无法知道你插入/拔出了什么东西. 因此,如果你想要一个主要设备的主号码,你可以使用 int alloc_chrdev_region(dev_t *dev,unsigned int firstminor,unsigned int count,char *name); 像NKamrath说,或者你使用绝对的.但请注意,many are reserved. 据我所知,以下是您要求的步骤: >您将一些块/字符设备插入某个总线. 此时,您可以使用其设备号与驱动程序通信,但如何? / dev中没有任何东西……一种方法是在你知道主要/次要对的时候使用mknod进行通信.你会发: # mknod /dev/mydevice c 232 4 …这是:请在/ dev / mydevice创建一个设备节点,该节点链接到具有主要232和次要4的字符(c)设备.但是,您如何知道这些数字呢?它们可能是绝对的(保留列表),也可能是驱动程序打印它,因此您可以手动执行. 但这里有更好的东西. 仍在设备驱动程序的初始化函数中:驱动程序将设备注册为Sysfs设备(请参阅device_create).这会将设备放入/ sys树,其节点(目录)将有一个名为uevent的文件.如果你捕捉它,它会输出类似的东西 MAJOR=232 MINOR=4 DEVNAME=whatever 试试吧: $cat /sys/class/tty/console/uevent 它匹配吗 $ls -l /dev/console ? 现在,udev是负责管理/ dev的用户空间程序.总的来说,它只是扫描/ sys树以自动填充/ dev.您可能还会看到所有主要/次要的字符和块设备,如下所示: $ls /sys/dev/char $ls /sys/dev/block 就是这样.如果你想更好地理解这一切,请开发一个虚拟驱动程序并尝试将其自动显示在/ dev中. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |