/proc/devices awk

/proc/devices/中的设备是通过insmod加载到内核的,它可产生一个major供mknod作为 参数。 

/dev/* 是通过mknod加上去的,格式:mknod device1 c/b major minor 如:mknod /dev/ttyS0 c 4 64,用户通过此设备名来访问你的驱动。

那如何在shell中自动创建设备节点呢

使用linux的awk命令

首先我们查看一下/proc/devices的格式

[cpp]  view plain copy
  1. # cat /proc/devices  
  2. Character devices:  
  3.   1 mem  
  4.   4 /dev/vc/0  
  5.   4 tty  
  6.   4 ttyS  
  7.   5 /dev/tty  
  8.   5 /dev/console  
  9.   5 /dev/ptmx  
  10.   7 vcs  
  11.  10 misc  
  12.  13 input  
  13.  14 sound  
  14.  21 sg  
  15.  81 video4linux  
  16.  89 i2c  
  17.  90 mtd  
  18. 116 alsa  
  19. 128 ptm  
  20. 136 pts  
  21. 247 dm365mmap  
  22. 248 irqk  
  23. 249 edma  
  24. 250 cmem  
  25. 251 dev_dma  
  26. 252 dev_i2c  
  27. 253 csl  
  28. 254 rtc  
  29.   
  30. Block devices:  
  31.   1 ramdisk  
  32.   8 sd  
  33.  31 mtdblock  
  34.  65 sd  
  35.  66 sd  
  36.  67 sd  
  37.  68 sd  
  38.  69 sd  
  39.  70 sd  
  40.  71 sd  
  41. 128 sd  
  42. 129 sd  
  43. 130 sd  
  44. 131 sd  
  45. 132 sd  
  46. 133 sd  
  47. 134 sd  
  48. 135 sd  
  49. 254 mmc  
每一条记录有两个部分组成:major和驱动名称

所以awk可这样提取所要的信息

[cpp]  view plain copy
  1. #awk '$2=="dev_i2c" { print $1}' /proc/devices  
$2表示输入给awk的第二个参数,同理$1表示第一个参数,特殊的$0表示整条记录

意思是如果驱动名称等于"dev_i2c",就打印他的major

执行上述命令后,输出:

252

那怎样使用输出的信息呢,只哟将它复制给一个变量就好了

[cpp]  view plain copy
  1. #major=$(awk '$2=="dev_i2c" { print $1}' /proc/devices)  
这样print 就将$1打印到了major中。测试一下

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

[cpp]  view plain copy
  1. insmod ./drv.ko  
  2.   
  3. if [ ! -f /dev/dev_i2c ]  
  4. then  
  5.     major=$(awk '$2=="dev_i2c" {print $1}' /proc/devices)  
  6.     mknod /dev/dev_i2c c ${major} 0  
  7. fi  

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值