分类:
2008-04-08 17:03:16
每当输入一个入口点例程时,该 dummy 驱动程序只向系统日志中写入一条消息。为了测试本驱动程序,需要留意这些消息,以确认成功地输入了所有入口点例程。
函数将低优先级的消息(如在该 dummy 驱动程序中定义的消息)写入 /dev/log。 守护进程从 /dev/log 读取消息并将低优先级的消息写入 /var/adm/messages。
在一个单独的窗口中输入下列命令,并在在执行测试(如本节内容所述)时监测输出:
% tail -f /var/adm/messages |
加载驱动程序时要确保您是用户 root。使用 命令来加载驱动程序:
# add_drv dummy |
在查看的 /var/adm/messages 的窗口中应该可以看到下列消息:
date time machine dummy:[ID 513080 kern.notice] NOTICE:Inside _info date time machine dummy:[ID 874762 kern.notice] NOTICE:Inside _init date time machine dummy:[ID 678704 kern.notice] NOTICE:Inside dummy_attach |
添加驱动程序时,_info(9E)、_init(9E) 和 attach(9E) 入口点按此顺序调用。
dummy 驱动程序已添加到 /devices 目录:
% ls -l /devices/pseudo | grep dummy drwxr-xr-x 2 root sys 512 date time dummy@0 crw------- 1 root sys 92, 0 date time dummy@0:0 |
dummy 驱动程序还是 列出的最新使用的模块:
% modinfo Id Loadaddr Size Info Rev Module Name |
模块名 dummy driver 是为 modldrv(9S) 结构第二个元素输入的值。值 92 是该模块的主设备号。
% grep dummy /etc/name_to_major dummy 92 |
ed192b70 的 Loadaddr 地址是 dummy 驱动程序中第一条指令的地址。该地址可能会有用,如在调试中。
% mdb -k > dummy`_init $m BASE LIMIT SIZE NAME ed192b70 ed192ff0 480 dummy > $q |
dummy 驱动程序还是伪设备部分中的 列出的最新使用的模块:
% prtconf -P pseudo, instance #0 |
未使用驱动程序时,它会被自动卸载。若驱动程序在 /devices 目录中但 modinfo(1M) 未列出,则可使用下列方法之一来加载驱动程序:
使用 命令。
访问该设备。访问驱动程序时,它会被自动加载。下面的部分将讲述如何访问该 dummy 设备。
在进行本节所述的测试时要确保您是用户 root。如果您不是用户 root,那么在访问 /devices /pseudo/dummy@0:0 专用文件时将收到 Permission denied 错误消息。请注意在中为 /devices /pseudo/dummy@0:0 显示的权限。
对读取设备进行测试。dummy 设备可能被命名为 /devices /pseudo/dummy@0:0。下列命令可读取 dummy 设备,即使其名字略有不同:
# cat /devices/pseudo /dummy* |
在查看 /var/adm/messages 的窗口中应该可以看到下列消息:
date time machine dummy:[ID 136952 kern.notice] NOTICE:Inside dummy_open date time machine dummy:[ID 623947 kern.notice] NOTICE:Inside dummy_getinfo date time machine dummy:[ID 891851 kern.notice] NOTICE:Inside dummy_prop_op date time machine dummy:[ID 623947 kern.notice] NOTICE:Inside dummy_getinfo date time machine dummy:[ID 891851 kern.notice] NOTICE:Inside dummy_prop_op date time machine dummy:[ID 623947 kern.notice] NOTICE:Inside dummy_getinfo date time machine dummy:[ID 709590 kern.notice] NOTICE:Inside dummy_read date time machine dummy:[ID 550206 kern.notice] NOTICE:Inside dummy_close |
对写入设备进行测试:
# echo hello > `ls /devices/pseudo /dummy*` |
在查看 /var/adm/messages 的窗口中应该可以看到下列消息:
date time machine dummy:[ID 136952 kern.notice] NOTICE:Inside dummy_open date time machine dummy:[ID 623947 kern.notice] NOTICE:Inside dummy_getinfo date time machine dummy:[ID 891851 kern.notice] NOTICE:Inside dummy_prop_op date time machine dummy:[ID 623947 kern.notice] NOTICE:Inside dummy_getinfo date time machine dummy:[ID 891851 kern.notice] NOTICE:Inside dummy_prop_op date time machine dummy:[ID 623947 kern.notice] NOTICE:Inside dummy_getinfo date time machine dummy:[ID 672780 kern.notice] NOTICE:Inside dummy_write date time machine dummy:[ID 550206 kern.notice] NOTICE:Inside dummy_close |
可以看到,写测试的输出与读测试的输出几乎是一样的。只有第七行输出不同。使用 命令将导致内核访问驱动程序的 入口点。使用 命令将导致内核访问驱动程序的 入口点。为 指定的文本参数被忽略了,因为本驱动程序与该数据没有任何关系。
卸载驱动程序时要确保您是用户 root。使用 命令可以卸载驱动程序并从 /devices 目录删除该设备:
# rem_drv dummy |
在查看 /var/adm/messages 的窗口中应该可以看到下列消息:
date time machine dummy:[ID 513080 kern.notice] NOTICE:Inside _info date time machine dummy:[ID 617648 kern.notice] NOTICE:Inside dummy_detach date time machine dummy:[ID 812373 kern.notice] NOTICE:Inside _fini |
dummy 设备不再位于 /devices 目录:
# ls /devices/pseudo /dummy* /devices/pseudo/dummy*: No such file or directory |
下次读写该 dummy 设备时必须使用 add_drv(1M) 重新加载本驱动程序。
可以使用 命令来卸载驱动程序,但并不从 /devices 删除该设备。那么在下次读写该 dummy 设备时,驱动程序会自动加载。
按下 Control-C 可以停止对 /var/adm/messages 消息的跟踪。