Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1283991
  • 博文数量: 554
  • 博客积分: 10425
  • 博客等级: 上将
  • 技术积分: 7555
  • 用 户 组: 普通用户
  • 注册时间: 2006-11-09 09:49
文章分类

全部博文(554)

文章存档

2012年(1)

2011年(1)

2009年(8)

2008年(544)

分类:

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
180 ed192b70 544 92 1 dummy (dummy driver)

模块名 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
dummy, instance #0 (driver not attached)

未使用驱动程序时,它会被自动卸载。若驱动程序在 /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 消息的跟踪。

 
 
以上文章转自于 : http://developers.sun.com.cn/
阅读(403) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~