2011-7-30 14:18:07

来源:互联网 发布:淘宝达人大v认证难不难 编辑:程序博客网 时间:2024/04/29 20:55
 

 

2011-7-30 14:18:07

 

五)udev的测试与工具

1)udev守护进程的测试

卸掉nvram模块
rmmod nvram

停掉udev监听程序
/etc/init.d/udev stop

modprobe nvram

ls -l /dev/cmos
ls: cannot access /dev/cmos: No such file or directory

启动udev监听程序
/etc/init.d/udev start

ls -l /dev/cmos
crw-rw---- 1 root root 10, 144 2010-01-31 05:34 /dev/cmos

看一下udev的启停脚本

#!/bin/sh -e
# upstart-job
#
# Symlink target for initscripts that have been converted to Upstart.

set -e

INITSCRIPT="$(basename "$0")"
JOB="${INITSCRIPT%.sh}"

if [ "$JOB" = "upstart-job" ]; then
    if [ -z "$1" ]; then
        echo "Usage: upstart-job JOB COMMAND" 1>&2
        exit 1
    fi

    JOB="$1"
    INITSCRIPT="$1"
    shift
else
    if [ -z "$1" ]; then
        echo "Usage: $0 COMMAND" 1>&2
        exit 1
    fi
fi

COMMAND="$1"
shift


if [ -z "$DPKG_MAINTSCRIPT_PACKAGE" ]; then
        ECHO=echo
else
        ECHO=:
fi

$ECHO "Rather than invoking init scripts through /etc/init.d, use the service(8)"
$ECHO "utility, e.g. service $INITSCRIPT $COMMAND"

case $COMMAND in
status)
    $ECHO
    $ECHO "Since the script you are attempting to invoke has been converted to an"
    $ECHO "Upstart job, you may also use the $COMMAND(8) utility, e.g. $COMMAND $JOB"
    $COMMAND "$JOB"
    ;;
start|stop|restart)
    $ECHO
    $ECHO "Since the script you are attempting to invoke has been converted to an"
    $ECHO "Upstart job, you may also use the $COMMAND(8) utility, e.g. $COMMAND $JOB"
    PID=$(status "$JOB" 2>/dev/null | awk '/[0-9]$/ { print $NF }')
    if [ -z "$PID" ] && [ "$COMMAND" = "stop" ]; then
        exit 0
    elif [ -n "$PID" ] && [ "$COMMAND" = "start" ]; then
        exit 0
    elif [ -z "$PID" ] && [ "$COMMAND" = "restart" ]; then
        start "$JOB"
        exit 0
    fi
    $COMMAND "$JOB"
    ;;
reload|force-reload)
    $ECHO
    $ECHO "Since the script you are attempting to invoke has been converted to an"
    $ECHO "Upstart job, you may also use the $COMMAND(8) utility, e.g. $COMMAND $JOB"
    reload "$JOB"
    ;;
*)
    $ECHO
    $ECHO "The script you are attempting to invoke has been converted to an Upstart" 1>&2
    $ECHO "job, but $COMMAND is not supported for Upstart jobs." 1>&2
    exit 1
esac
                                                               
                                                               
                                                               
                                                            
查看udev打开的socket端口
netstat -anp|grep udev
unix  2      [ ]         DGRAM                    14276    4384/udevd          @/org/kernel/udev/udevd


一个用于监听内核的

2)查询udev

查询所有的设备节点和显示udev信息
udevinfo --export-db

查看名为cmos的udev信息.
udevinfo --query=all --name=cmos
P: /devices/virtual/misc/nvram
N: cmos


3)监听udev

终端1)
udevadm monitor


终端2)
rmmod nvram
modprobe nvram


终端1)
UEVENT[1264934453.475726] remove   /devices/virtual/misc/nvram (misc)
UEVENT[1264934453.476732] remove   /module/nvram (module)
UEVENT[1264934461.563268] add      /module/nvram (module)
UEVENT[1264934461.563418] add      /devices/virtual/misc/nvram (misc)


终端2)
ls /sys/devices/virtual/misc/nvram/
dev        power/     subsystem/ uevent

cat /sys/devices/virtual/misc/nvram/dev
10:144

cat /sys/module/nvram/sections/.bss
0xe0a83ca0

 

4)调试udev


先停掉udev服务
/etc/init.d/udev stop

终端1)
打开udevd监听
udevd --debug

终端2)
卸载nvram
rmmod nvram

终端1)
[4488] msg_queue_insert: seq 2364 queued, 'remove' 'misc'
[4488] udev_event_run: seq 2364 forked, pid [4492], 'remove' 'misc', 0 seconds old
[4488] msg_queue_insert: seq 2365 queued, 'remove' 'module'
[4488] udev_event_run: seq 2365 forked, pid [4493], 'remove' 'module', 0 seconds old
[4492] udev_db_get_device: found a symlink as db file
[4492] name_index: removing index: '/dev/.udev/names/cmos/\x2fdevices\x2fvirtual\x2fmisc\x2fnvram'
[4492] match_rule: '/lib/udev/devices/cmos' does not exist
[4492] udev_node_remove: removing device node '/dev/cmos'
[4492] pass_env_to_socket: passed -1 bytes to socket '@/org/kernel/udev/monitor',
[4492] udev_event_run: seq 2364 finished with 0
[4488] udev_done: seq 2364, pid [4492] exit with 0, 0 seconds old
[4493] pass_env_to_socket: passed -1 bytes to socket '@/org/kernel/udev/monitor',
[4493] udev_event_run: seq 2365 finished with 0
[4488] udev_done: seq 2365, pid [4493] exit with 0, 0 seconds old

终端2)
加载nvram
modprobe nvram

终端1)
[4494] msg_queue_insert: seq 2366 queued, 'add' 'module'
[4494] udev_event_run: seq 2366 forked, pid [4497], 'add' 'module', 0 seconds old
[4494] msg_queue_insert: seq 2367 queued, 'add' 'misc'
[4494] udev_event_run: seq 2367 forked, pid [4498], 'add' 'misc', 0 seconds old
[4497] pass_env_to_socket: passed -1 bytes to socket '@/org/kernel/udev/monitor',
[4497] udev_event_run: seq 2366 finished with 0
[4494] udev_done: seq 2366, pid [4497] exit with 0, 0 seconds old
[4498] udev_rules_get_name: rule applied, 'nvram' becomes 'cmos'
[4498] udev_db_get_device: no db file to read /dev/.udev/db/\x2fdevices\x2fvirtual\x2fmisc\x2fnvram: No such file or directory
[4498] udev_node_add: creating device node '/dev/cmos', major=10, minor=144, mode=0660, uid=0, gid=0
[4498] udev_node_mknod: mknod(/dev/cmos, 020660, (10,144))
[4498] udev_node_mknod: chmod(/dev/cmos, 020660)
[4498] udev_node_mknod: chown(/dev/cmos, 0, 0)
[4498] name_index: creating index: '/dev/.udev/names/cmos/\x2fdevices\x2fvirtual\x2fmisc\x2fnvram'
[4498] pass_env_to_socket: passed -1 bytes to socket '@/org/kernel/udev/monitor',
[4498] udev_event_run: seq 2367 finished with 0
[4494] udev_done: seq 2367, pid [4498] exit with 0, 0 seconds old