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