Chinaunix首页 | 论坛 | 博客
  • 博客访问: 140092
  • 博文数量: 39
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 237
  • 用 户 组: 普通用户
  • 注册时间: 2013-09-23 10:59
文章分类

全部博文(39)

文章存档

2016年(2)

2015年(25)

2014年(10)

2013年(2)

我的朋友

分类: LINUX

2014-11-16 10:54:24

在LDD3中有这么一个脚本文件
#!/bin/sh

module="scull"   

device="scull"

mode="664"

# invoke insmod with all arguments we got

# and use a pathname, as newer modutils don't look in . by default

/sbin/insmod ./$module.ko $* || exit 1    

# remove stale nodes

rm -f /dev/${device}[0-3]   

major=$(awk "\\$2==\"$module\" {print \\$1}" /proc/devices) 

mknod /dev/${device}0 c $major 0   

mknod /dev/${device}1 c $major 1

mknod /dev/${device}2 c $major 2

mknod /dev/${device}3 c $major 3

# give appropriate group/permissions, and change the group.

# Not all distributions have staff, some have "wheel" instead.

group="staff"

grep -q '^staff:' /etc/group || group="wheel"

chgrp $group /dev/${device}[0-3]     

chmod $mode /dev/${device}[0-3]

以前对脚本几乎没有接触,今天就拿这个好好学习一下。
首先

module="scull"   

device="scull"

mode="664"

这是三行是三个变量的定义,后面利用$x的一种形式来使用这些变量。
第二
/sbin/insmod ./$module.ko $* || exit 1  
这是执行insmod命令,加载内核/$module.ko $*,如果加载不成功就走exit 1(退出脚本程序);这里的这个||代表的就是通常的“或运算。详见。但是里面的$*该怎么理解却不得而知。
第三
rm -f /dev/${device}[0-3]   
表示删除/dev目录下的scull[0]、
scull[1]scull[3]、scull[4]四个结点文件。
第四
major=$(awk "\$2==\"$module\" {print \\$1}" /proc/devices) 
这句是
/proc/devices文件中获取设备主编号;这个主编号是模块加载执行的时候通过alloc_chrdev_region动态分配的.
这里主要参考了http://chen84769797.blog.163.com/blog/static/1116209342011103966738/
第五

mknod /dev/${device}0 c $major 0   

mknod /dev/${device}1 c $major 1

mknod /dev/${device}2 c $major 2

mknod /dev/${device}3 c $major 3

这一段主要创建设备设备结点。



具体细节很多是很多网上的前辈分析的,自己这里整理下,以防忘记。





阅读(995) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~