Chinaunix首页 | 论坛 | 博客
  • 博客访问: 2691830
  • 博文数量: 505
  • 博客积分: 1552
  • 博客等级: 上尉
  • 技术积分: 2514
  • 用 户 组: 普通用户
  • 注册时间: 2007-09-23 18:24
文章分类

全部博文(505)

文章存档

2019年(12)

2018年(15)

2017年(1)

2016年(17)

2015年(14)

2014年(93)

2013年(233)

2012年(108)

2011年(1)

2009年(11)

分类: LINUX

2013-03-03 19:05:04

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

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

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

使用linux的awk命令

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

  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可这样提取所要的信息

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

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

执行上述命令后,输出:

252

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

  1. #major=$(awk '$2=="dev_i2c" { print $1}' /proc/devices)  
这样print 就将$1打印到了major中。测试一下
  1. #echo $(major)  
  2. 252  
目的实现了,上述命令可以直接写到脚本里,先加一个判断/dev/dev_i2c点文件是否存在,不存在就创建
  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 
阅读(1451) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~