最近把iTOP-4412开发板重新刷机,挂在我的驱动后,意外发现/dev/
目录下没生成我的设备节点。通过调试发现,驱动的probe函数已经正常执行了。so,问题出在哪里呢?
我反复重启板子,重新挂载驱动,但我的设备节点始终无法出现。想到内核文件中默认会挂在led的驱动,且会生成/dev/leds
节点,我试着使用rm命令删除了此节点,发现居然也可以删除!!!而且板子重启后,/dev/leds
节点并没有还原!!!
由此我得出结论,/dev/
下的设备节点,是可以被rm命令删除的,且不会自动还原。所以,我们得手动将这些设备节点添加回来。
我先尝试了手动创建一个普通的文件:
touch /dev/leds
测试后发现,这仅仅是一个普通文件,根本不能用来驱动硬件~~~(囧)。从网上查了资料,发现可以使用mknod
命令手动创建设备节点:
# c表示杂项设备,同样的b表示块设备,我们这里操作的都是杂项设备
mknod /dev/leds c 主设备号 从设备号
那我的主设备号和从设备号我如何知道呢?我们可以查看/proc/misc
来获取所有杂项设备的从设备号:
cat /proc/misc
此文件内容有两列,第一列为从设备号,第二列为设备名称(只要驱动注册成功,就可以在此文件中看到设备,而且在此文件中我可以看到我那意外消失的设备就安安稳稳的在这里待着)。我们可以看到我们的leds从设备号为60。
那主设备号如何获取呢,我想到我还有一个设备buzzer,我是不是可以使用它的主设备号。使用如下命令可以查看设备的主设备号:
root@localhost:~# ls -lL /dev/buzzer
crw------- 1 root root 10, 59 Mar 1 19:06 /dev/buzzer
其中10,59分别为主设备号和从设备号,这里我们将使用10作为我的主设备号:
# 别忘了删除之前touch命令创建的文件
mknod /dev/leds c 10 60
然后测试下/dev/leds
节点,发现可以正常使用!!!
结论:/dev/
下的设备节点不能随便删,如果不小心删了,只能使用这种方式手动添加回来。