多配色创意metro风格企业网站织梦模板佛山网站制作网站
udev
- udev配置文件
 - 匹配键和赋值键操作符解释
 - 示例
 - 修改udev配置
 - U盘自动挂载
 - Usb卸载
 - SD卡挂载
 - SD卡卸载
 
udev配置文件
/etc/udev/udev.conf
这个文件通常很短,他可能只是包含几行#开头的注释,然后有几行选项:
udev_root=“/dev/”
udev_rules=“/etc/udev/rules.d/”  #表示udev规则存储的目录,这个目录存储的是以.rules结束的文件
udev_log=“err“
 
/etc/udev/rules.d下面可能有好几个udev规则文件,这些文件一部分是udev包安装的,另外一部分则是可能是别的硬件或者软件包生成的。这些规则文件的文件名通常是两个数字开头,它表示系统应用该规则的顺序。
匹配键和赋值键操作符解释
| 操作符 | 匹配或赋值 | 解释 | 
|---|---|---|
| == | 匹配 | 相等比较 | 
| != | 匹配 | 不等比较 | 
| = | 赋值 | 分配一个特定的值给该键,他可以覆盖之前的赋值。 | 
| += | 赋值 | 追加特定的值给已经存在的键 | 
| := | 赋值 | 分配一个特定的值给该键,后面的规则不可能覆盖它。 | 
| 键 | 含义 | 
|---|---|
| ACTION | 一个时间活动的名字,比如add,当设备增加的时候 | 
| KERNE | 在内核里看到的设备名字,比如sd*表示任意SCSI磁盘设备 | 
| KERNELS | KERNELS属性可以匹配设备的内核名称或路径。例如,KERNELS=="eth0"将匹配名称为"eth0"的设备。 | 
| DEVPATH | 内核设备录进,比如/devices/* | 
| SUBSYSTEM | 子系统名字,比如sound,net | 
| BUS | 总线的名字,比如IDE,USB | 
| DRIVER | 设备驱动的名字,比如usb-storage | 
| ID | 独立于内核名字的设备名字 | 
| SYSFS{ value} | sysfs属性值,他可以表示任意 | 
| ENV{ key} | 环境变量,可以表示任意 | 
| PROGRAM | 可执行的外部程序,如果程序返回0值,该键则认为为真(true) | 
| RESULT | 上一个PROGRAM调用返回的标准输出。 | 
| NAME | 根据这个规则创建的设备文件的文件名。注意:仅仅第一行的NAME描述是有效的,后面的均忽略。 如果你想使用使用两个以上的名字来访问一个设备的话,可以考虑SYMLINK键。 | 
| SYMLINK | 根据规则创建的字符连接名 | 
| OWNER | 设备文件的属组 | 
| GROUP | 设备文件所在的组。 | 
| MODE | 设备文件的权限,采用8进制 | 
| RUN | 为设备而执行的程序列表 | 
| LABEL | 在配置文件里为内部控制而采用的名字标签(下下面的GOTO服务) | 
| GOTO | 跳到匹配的规则(通过LABEL来标识),有点类似程序语言中的GOTO | 
| IMPORT{ type} | 导入一个文件或者一个程序执行后而生成的规则集到当前文件 | 
| WAIT_FOR_SYSFS | 等待一个特定的设备文件的创建。主要是用作时序和依赖问题。 | 
| PTIONS | 特定的选项: last_rule 对这类设备终端规则执行; ignore_device 忽略当前规则; ignore_remove 忽略接下来的并移走请求。all_partitions 为所有的磁盘分区创建设备文件。 | 
示例
KERNEL=="*", OWNER="root" GROUP="root", MODE="0600" 
KERNEL=="tty", NAME="%k", GROUP="tty", MODE="0666", OPTIONS="last_rule"
KERNEL=="scd[0-9]*", SYMLINK+="cdrom cdrom-%k"
KERNEL=="hd[a-z]", BUS=="ide", SYSFS{removable}=="1",SYSFS{device/media}=="cdrom", SYMLINK+="cdrom cdrom-%k" 
ACTION=="add", SUBSYSTEM=="scsi_device", RUN+="/sbin/modprobe sg"
 
- 第一个规则是缺省的,他匹配任意被内核识别到的设备,然后设定这些设备的属组是root,组是root,访问权限模式是0600(-rw——-)。这也是一个安全的缺省设置保证所有的设备在默认情况下只有root可以读写
 - 第二个规则匹配终端设备(tty),然后设置新的权限为0600,所在的组是tty。它也设置了一个特别的设备文件名:%K。在这里例子里,%k代表设备的内核名字。那也就意味着内核识别出这些设备是什么名字,就创建什么样的设备文件名。
 - 第三行开始的KERNEL==”scd[0-9]*”,表示 SCSI CD-ROM 驱动. 它创建一对设备符号连接:cdrom和cdrom-%k。
 - 第四行,开始的 KERNEL==”hd[a-z]“, 表示ATA CDROM驱动器。这个规则创建和上面的规则相同的符号连接。ATA CDROM驱动器需要sysfs值以来区别别的ATA设备,因为SCSI CDROM可以被内核唯一识别。.
 - 第五行以 ACTION==”add”开始,它告诉udev增加 /sbin/modprobe sg 到命令列表,当任意SCSI设备增加到系统后,这些命令将执行。其效果就是计算机应该会增加sg内核模块来侦测新的SCSI设备。
 
修改udev配置
正确做法是在/etc/udev/rules.d/下创建一个信的规则文件。确定你给出的文件的后缀是rules文件名给出的数字序列应该比 标准配置文件高。
比如,创建一个名为99-my-udev.rules的规则文件。假设修改floppy设备的所在组,还准备创建一个信的符号连接/dev/floppy,
KERNEL==”fd[0-9]*“, GROUP=“users“,   SYMLINK+=“floppy“
 
有些发行版本,比如Fedora,采用了外部脚本来修改某些特定设备的属组,组关系和权限。因此上面的改动可能并不见得生效。如果你遇到了这个问题,你就需要跟踪和修改这个脚本来达到你的目的。或者你可以修改PROGRAM或RUN键的值来做到这点。
U盘自动挂载
vim /etc/udev/rules.d/11-add-usb.rules
ACTION!="add",GOTO="farsight"
KERNEL=="sd[a-z][0-9]",RUN+="/home/mountusb.sh %k"
KERNEL=="sd[a-z]",RUN+="/home/mountusb.sh %k"
LABEL="farsight"
 
ACTION:说明是什么事件
 KERNEL:是什么设备比如sda1,mmcblk0p1等
 RUN:设备插入后去执行哪个程序%k是传入这个程序的参数,这里%k=KERNEL的值也就是sda1等
在/home/下创建mountusb.sh文件添加如下内容:
#!/bin/sh
mount  -t vfat /dev/$1 /mnt/usb
sync
 
修改文件权限为其添加可执行的权限。
Usb卸载
vim etc/udev/rules.d/11-add-remove.rules
ACTION !="remove",GOTO="farsight"
SUBSYSTEM!="block",GOTO="farsight"
KERNEL=="sd[a-z][0-9]",RUN+="/home/umount-usb.sh"
LABEL="farsight"
 
umount-usb.sh
#!/bin/sh
sync
umount /mnt/usb
 
SD卡挂载
ACTION!='add',GOTO='farsight'
KERNEL=='mmcblk[0-9]p[0-9]',RUN+='/sbin/mount-sd.sh %k'
LABEL='farsight'
 
mount-sd.sh
#!/bin/sh
/bin/mount -t vfat /dev/$1 /mnt/sd
sync
 
SD卡卸载
ACTION !='remove',GOTO='farsight'
SUBSYSTEM!='block',GOTO='farsight'
KERNEL=='mmcblk[0-9]p[0-9]',RUN+='/home/umount-sd.sh'
LABEL='farsight'
 
umount-sd.sh
#!/bin/sh
sync
umount /mnt/sd
 
11-usb-hotplug.rules
#
# Create By Czy
#ACTION!="add",GOTO="out"
KERNEL=="sd[a-z][0-9]",SUBSYSTEM=="block",KERNELS=="3-1:1.0",DRIVERS=="usb-storage",RUN+="/etc/udev/mount-usb3.sh %k"
LABEL="out"
ACTION!="remove",GOTO="out"
KERNEL=="sd[a-z][0-9]",RUN+="/etc/udev/umount-usb3.sh %k"
LABEL="out"KERNEL=="sd*", SUBSYSTEM=="block", RUN+="/etc/udev/disk-hotplug.sh"
KERNEL=="usbdev*", SUBSYSTEM=="usb_device", RUN+="/etc/udev/usbdev-hotplug.sh" 
mount-usb3.sh
#!/bin/shmkdir /mnt/usb3  mount -o rw,umask=000,iocharset=utf8 /dev/$1 /mnt/usb3
if [ $? -ne 0 ];then #if last commond not equtment 0, remount this commond.mount -o rw,umask=000,iocharset=utf8 /dev/$1 /mnt/usb3touch /tmp/usbstorageavailable
elsetouch /tmp/usbstorageavailable
fi
 
umount-usb3.sh
#!/bin/shumount /mnt/usb3
rm -rf /tmp/usbstorageavailable