/proc/devices awk

来源:互联网 发布:德龄与慈禧知乎 编辑:程序博客网 时间:2024/05/22 14:44
/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/devicesCharacter 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 mtd116 alsa128 ptm136 pts247 dm365mmap248 irqk249 edma250 cmem251 dev_dma252 dev_i2c253 csl254 rtcBlock devices:  1 ramdisk  8 sd 31 mtdblock 65 sd 66 sd 67 sd 68 sd 69 sd 70 sd 71 sd128 sd129 sd130 sd131 sd132 sd133 sd134 sd135 sd254 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中。测试一下

#echo $(major)252
目的实现了,上述命令可以直接写到脚本里,先加一个判断/dev/dev_i2c点文件是否存在,不存在就创建

insmod ./drv.koif [ ! -f /dev/dev_i2c ]then    major=$(awk '$2=="dev_i2c" {print $1}' /proc/devices)    mknod /dev/dev_i2c c ${major} 0fi