/proc/devices/中的设备是通过insmod加载到内核的,它可产生一个major供mknod作为 参数。
每一条记录有两个部分组成:major和驱动名称
$2表示输入给awk的第二个参数,同理$1表示第一个参数,特殊的$0表示整条记录
这样print 就将$1打印到了major中。测试一下
目的实现了,上述命令可以直接写到脚本里,先加一个判断/dev/dev_i2c点文件是否存在,不存在就创建
/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
所以awk可这样提取所要的信息
- #awk '$2=="dev_i2c" { print $1}' /proc/devices
意思是如果驱动名称等于"dev_i2c",就打印他的major
执行上述命令后,输出:
252
那怎样使用输出的信息呢,只哟将它复制给一个变量就好了
- #major=$(awk '$2=="dev_i2c" { print $1}' /proc/devices)
- #echo $(major)
- 252
- 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