linux 设备 与 驱动 对应关系

459 阅读2分钟

开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第9天,点击查看活动详情

设备编号

linux 主设备号标识具体的驱动,也就是说系统用主设备号找到唯一的驱动。次设备号标识使用此驱动的具体设备。在用户空间使用设备节点名字打开设备节点,系统按照设备节点的设备编号搜索驱动和设备,就可以打开驱动,调用驱动注册的方法,用来操作硬件设备。
设备号有两种申请方式。
主动申请方式,设备号固定,缺点是如果拿到其他机器上用,可能出现冲突。
动态申请方式,设备号由系统动态分配,也是官方推荐使用的方式,一部分主设备号已经静态的分配给一部分常见的设备,所以尽量不要主动申请设备号,此方式缺点是无法得到固定的主设备号,所以无法使用预先写mknod命令,不过可以代码里自绑定,或者通过/proc/devices中获取设备号。

linux设备节点

Linux的设备节点路径一般位于 /dev下。

ls -la /dev/

可以查看设备节点的使用的主次设备号。 image.png

添加新的设备节点,命令如下:

    mknod path/devname {b|c} Major Minor

mknod命令用于手动向系统添加块或者字符设备节点,b是块设备,c是字符设备,major主设备号,minor次设备号。

测试:命令mknod /dev/zhangsy0 c 255 0 ,添加设备,效果如下图所示。 image.png

咱们添加到系统的设备,不存在相应的驱动,系统找不到驱动,使用这个设备时会报错信息。 image.png

使用rm命令 ,可以删除掉设备 rm zhangsy0

linux驱动列表查询

加载到系统的驱动,可通过 cat /proc/devices 查看驱动主设备号。 如下图: image.png 这样可以找到设备号对应的驱动。
使用lsmod 能够看到已装载驱动模块,以及驱动间依赖关系的信息,如下图所示。 image.png