You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

手动执行mknod时如何获取驱动模块的主次设备号?

获取编译进内核的驱动主次设备号的几种方法

嘿,这个场景我太熟悉了——把驱动编译进内核后,找不到设备号没法创节点对吧?给你几个实用的办法:

  • 查看内核启动日志(dmesg)
    大多数驱动在注册字符/块设备的时候,都会把主次设备号打印到内核日志里。你可以直接过滤关键信息:

    dmesg | grep -E "major|minor|device number"
    

    或者更精准一点,搜你的驱动名称:

    dmesg | grep "你的驱动模块名称"
    

    通常会看到类似 [xxx] my_driver: registered with major 238, minor range 0-7 这样的输出,直接就能拿到你要的数字。

  • 查看/proc/devices文件
    这个文件是内核维护的已注册设备清单,里面会列出所有字符设备(Character devices)和块设备(Block devices)的主设备号,以及对应的设备名称。执行:

    cat /proc/devices
    

    找到你的驱动对应的名称,前面的数字就是主设备号。如果你的驱动是动态分配次设备号的,次设备号的范围一般会在dmesg日志里,或者你可以参考驱动代码里的设置(比如从0开始的连续编号)。

  • 检查驱动源代码
    毕竟是你自己写的驱动,代码里肯定有设备号的定义逻辑:

    • 如果是静态指定的,代码里会有类似 #define MY_DRIVER_MAJOR 240 或者在register_chrdev_region()里直接写死主设备号的代码;
    • 如果是动态申请的(用alloc_chrdev_region()),内核会自动分配可用的主设备号,这时候就只能靠前面两种方法来查实际分配的数值了。

内容的提问来源于stack exchange,提问作者julien

火山引擎 最新活动