UDEV规则和调试

原创 2016年08月31日 12:10:17
root@wang:/work/7405/trunk2/release/vender/cdma2000/udev/etc/udev# cat udev.conf 
# udev.conf

# The initial syslog(3) priority: "err", "info", "debug" or its
# numerical equivalent. For runtime debugging, the daemons internal
# state can be changed with: "udevcontrol log_priority=".
udev_root="/dev/"
udev_rules="/etc/udev/rules.d/"
udev_log="err"
调试时将udev_log="err"改为udev_log="info" ,这样看以看到更多的日志信息。同理,debug可以看到比info更多的调试信息。
udev_root指定设备节点的位置。
udev_rules="/etc/udev/rules.d/" 指定udev规则的目录。udev会根据规则的名字依次查找,直到找到正确的规则。

写udev规则是需要使用udevinfo工具查看相关的信息:
udevinfo -q path -n /dev/sda,命令会产生一个该设备名对应的在sysfs下的路径,如/block/sda。然后,再用udevinfo -a -p /sys/block/sda,这个命令会显示一堆信息,信息分成很多块。这些信息实际来自于操作系统维护的sysfs链表,不同的块对应不同的路径。你就可以用这些信息来作为udev规则文件中的匹配项。但需要注意的是,同一个规则只能使用同一块中显示的信息,不能跨块书写规则。也可以使用一条命令udevinfo –a –p $(udevinfo –q path   –n /dev/hda)
第二种情况是,不知道系统产生的设备名,那就只有到/sys目录下去逐个目录查找了,反复用udevinfo -a -p /sys/path...这个命令看信息,如果对应的信息是这个设备的,那就恭喜你。否则就再换个目录。当然,在这种情况下,成功的可能性比较小

root@wang:/work/7405/trunk2/release/vender/cdma2000/udev/etc/udev/rules.d# cat 9-cdma2000.rules 
ACTION=="add",KERNEL=="sg[0-9]",ATTRS{idProduct}=="1446",ATTRS{idVendor}=="12d1",NAME="%k",RUN+="/usr/local/bin/usb_modeswitch -c /etc/usb-modeswitch.d/usb_modeswitch.conf"
ACTION=="add",KERNEL=="ttyUSB[0-9]",ATTRS{idVendor}=="12d1",ATTRS{idProduct}=="140c",RUN+="/etc/ppp/cdma.sh"
这个规则的意思就是如果发现内核设备名为sg0-sg9的设备,并且idProduct=="1446", idVendor=="12d1"的设备加入的话运行/usr/local/bin/usb_modeswitch -c /etc/usb-modeswitch.d/usb_modeswitch.conf 这条命令。这条命令的作用就是将KERNEL=="sg[0-9]",ATTRS{idProduct}=="1446",ATTRS{idVendor}=="12d1"属性改为KERNEL=="ttyUSB[0-9]",ATTRS{idVendor}=="12d1",ATTRS{idProduct}=="140c",这条属性。接下来符合下面的这条规则,就执行/etc/ppp/cdma.sh 脚本。

/etc/ppp/cdma.sh脚本是这样写的:
root@wang:/work/7405/trunk2/release/vender/cdma2000/pppd/etc.ppp# cat cdma.sh 
#!/bin/sh
#dial
killall pppd
mkdir -p /var/lock/
mkdir -p /var/run/
echo "\nhello pppd \n"
sleep 20 && /usr/local/bin/pppd call cdma2000&
基本上就是pppd拨号,pppd拨号是会有一些错误,会打不开 /var/lock/    /var/run/这两个目录,就手工建立了两个。然后sleep 20秒,如果不sleep的话会拨号失败,原因不明。
有一点需要注意的是在udev规则中的 可执行程序要加上路径,不然会出现找不到的情况。

 udev 键/值对操作符
操作符      匹配或赋值t                          解释
----------------------------------------
==             匹配               相等比较
!=             匹配              不等比较
=             赋值               分配一个特定的值给该键,他可以覆盖之前的赋值。
+=       赋值               追加特定的值给已经存在的键
:=             赋值                   分配一个特定的值给该键,后面的规则不可能覆盖它。 


这有点类似我们常见的编程语言,比如C语言。只是这里的键一次可以处理多个值。有一些键在udev规则文件里经常出现,这些键的值可以使用通配符(*,?,甚至范围,比如[0-9]),这些常用键列举如下:

常用udev键
键                        含义
ACTION                一个时间活动的名字,比如add,当设备增加的时候
KERNEL                  在内核里看到的设备名字,比如sd*表示任意SCSI磁盘设备
DEVPATH               内核设备录进,比如/devices/*
SUBSYSTEM           子系统名字,比如sound,net
BUS                      总线的名字,比如IDE,USB
DRIVER                  设备驱动的名字,比如ide-cdrom
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 为所有的磁盘分区创建设备文件。

<script>window._bd_share_config={"common":{"bdSnsKey":{},"bdText":"","bdMini":"2","bdMiniList":false,"bdPic":"","bdStyle":"0","bdSize":"16"},"share":{}};with(document)0[(getElementsByTagName('head')[0]||body).appendChild(createElement('script')).src='http://bdimg.share.baidu.com/static/api/js/share.js?v=89860593.js?cdnversion='+~(-new Date()/36e5)];</script>
阅读(2598) | 评论(0) | 转发(0) |
相关热门文章
给主人留下些什么吧!~~
评论热议
版权声明:本文为博主原创文章,转载请注明出处。

相关文章推荐

跟我一起写udev规则(译)

目录 介绍        关于本文档       更新历史 概念      术语: devfs, sysfs, nodes, etc.      为什么?      内置固定命名设计 编写规则    ...
  • nhczp
  • nhczp
  • 2009年04月22日 10:28
  • 11784

添加Udev规则,让Linux自动挂载U盘(转载)

如果你使用Linux比较长时间了,那你就知道,在对待设备文件这块,Linux改变了几次策略。在Linux早期,设备文件仅仅是是一些带有适当的属性集的普通文件,它由mknod命令创建,文件存放在/dev...

udev学习总结

udev规则文件的路径: /etc/udev/rules.d/ /lib/udev//rules.d/ udev的规则获取顺序,/etc/udev/rules.d/ /lib/udev//r...

udev规则

udev介绍:  1.udev规则文件:      /etc/udev/rules.d/    # 用户自定义的规则文件一般放在这     /lib/udev/rules.d/ 2.ude...

解读udev的几个作用

udev是一种工具,它能够根据系统中的硬件设备的状况动态更新设备文件,包括设备文件的创建,删除等。设备文件通常放在/dev目录下,使用udev后,在/dev下面只包含系统中真实存在的设备。它于硬件平台...

udev 规则文件的写法

配置文件:         udev的配置文件位于 /etc/udev/ 和 /lib/udev/ ( # 开头的是注释)         udev 的主配置文件是 /etc/udev/udev....

linux热插拔之udev的使用方法

作者:刘旭晖 colorant@163.com 转载请注明出处 http://blog.csdn.net/colorant/    Udev相关的文章很多,本文的主要目的不是提供一个完整...

udev -- 规则 工具 原理

1. udev 规则 http://reactivated.net/writing_udev_rules.html

Udev详解

Udev详解 udev linux用户空间设备管理(Linux userspace device management),在kernel 2.6.13后被使用,动态提供了在系统中实际存在的设备节点...
  • lqrensn
  • lqrensn
  • 2012年10月22日 10:18
  • 8788

使用 udev 高效、动态地管理 Linux 设备文件

概述: Linux 用户常常会很难鉴别同一类型的设备名,比如 eth0, eth1, sda, sdb 等等。通过观察这些设备的内核设备名称,用户通常能知道这些是什么类型的设备,但是不知道哪一个设备...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:UDEV规则和调试
举报原因:
原因补充:

(最多只允许输入30个字)