我最近在 x86 板上获得了一个集成看门狗定时器的设备驱动程序,我在该板上运行了一个最小的 Linux 系统。内核是 3.6.11,它是使用buildroot
.
我的安装无法运行udev
,因此我需要手动执行insmod
和mknod
来获取我需要的任何驱动程序。我已经成功地为 CAN 驱动程序做到了这一点,但对于这个看门狗驱动程序,我能够交叉编译目标的源代码,并且我能够成功地生成insmod
生成的 .ko 文件。此后,不会生成任何错误,并且会调用lsmod
报告模块已加载。
我遇到的问题是我需要/dev
为此驱动程序创建一个设备节点,但我不知道如何继续。我不知道如何像获取字符设备那样获取设备的主要和次要编号。
该驱动程序的来源表明它是一个平台设备驱动程序,但我不确定这意味着什么。我只听说过字符设备和块设备,所以 – 主设备号和次设备号的概念与平台设备相关吗?如果是这样,我怎样才能获得这些信息?该设备驱动程序名称中没有条目/proc
,我不确定如何继续。
答案1
如果它使用普通的内核看门狗接口,则位于/dev/watchdog
,此处为 10, 130。
它还可能导出另一个(/dev/watchdog0
等)。通过查询sysfs可以发现:
$ cat /sys/class/watchdog/watchdog0/dev
253:0
$ cat /sys/class/watchdog/watchdog0/uevent
MAJOR=253
MINOR=0
DEVNAME=watchdog0
确实:
$ ls -l /dev/watchdog0
crw------- 1 root root 253, 0 May 17 18:26 /dev/watchdog0
该数字可能是动态分配的(我不确定),因此在您的计算机上可能会有所不同。
(平台设备可能也有一些东西/sys/devices/platform
,可以让你设置各种参数)
编辑:你可以像这样创建一个字符设备mknod
(作为root):
mknod -m 0600 /dev/watchdog c 10 130
-m
设置模式(文件权限,这里必须使用八进制);/dev/watchdog
是名字;c
意味着它的一个C字符设备(与乙锁); 10 是主号码; 130是未成年人。