/proc/devices/中的设备是通过insmod加载到内核的,它可产生一个major供mknod作为 参数。
/dev/* 是通过mknod加上去的,格式:mknod device1 c/b major minor 如:mknod /dev/ttyS0 c 4 64,用户通过此设备名来访问你的驱动。
那如何在shell中自动创建设备节点呢
使用linux的awk命令
首先我们查看一下/proc/devices的格式
-
# cat /proc/devices
-
Character devices:
-
1 mem
-
4 /dev/vc/0
-
4 tty
-
4 ttyS
-
5 /dev/tty
-
5 /dev/console
-
5 /dev/ptmx
-
7 vcs
-
10 misc
-
13 input
-
14 sound
-
21 sg
-
81 video4linux
-
89 i2c
-
90 mtd
-
116 alsa
-
128 ptm
-
136 pts
-
247 dm365mmap
-
248 irqk
-
249 edma
-
250 cmem
-
251 dev_dma
-
252 dev_i2c
-
253 csl
-
254 rtc
-
-
Block devices:
-
1 ramdisk
-
8 sd
-
31 mtdblock
-
65 sd
-
66 sd
-
67 sd
-
68 sd
-
69 sd
-
70 sd
-
71 sd
-
128 sd
-
129 sd
-
130 sd
-
131 sd
-
132 sd
-
133 sd
-
134 sd
-
135 sd
-
254 mmc
每一条记录有两个部分组成:major和驱动名称
所以awk可这样提取所要的信息
-
#awk '$2=="dev_i2c" { print $1}' /proc/devices
$2表示输入给awk的第二个参数,同理$1表示第一个参数,特殊的$0表示整条记录
意思是如果驱动名称等于"dev_i2c",就打印他的major
执行上述命令后,输出:
252
那怎样使用输出的信息呢,只哟将它复制给一个变量就好了
-
#major=$(awk '$2=="dev_i2c" { print $1}' /proc/devices)
这样print 就将$1打印到了major中。测试一下
目的实现了,上述命令可以直接写到脚本里,先加一个判断/dev/dev_i2c点文件是否存在,不存在就创建
-
insmod ./drv.ko
-
-
if [ ! -f /dev/dev_i2c ]
-
then
-
major=$(awk '$2=="dev_i2c" {print $1}' /proc/devices)
-
mknod /dev/dev_i2c c ${major} 0
-
fi
阅读(1541) | 评论(0) | 转发(0) |