VxWorks的设备驱动程序就靠着三张表来维护:我把它们叫做 Fd Table、Dev Table、Drv Table,分别表示文件描述符表、设备列表、驱动程序表。用英文表示是想说明这些表的名字与我们使用设备驱动程序时的关系:想一想,我们在调用设备驱动程序时,一般是用open、read、write、ioctl函数,调用这些函数的时候都要使用一个句柄即文件描述符,这便是fd Table即文件描述符表。文件描述符表中都有什么东西呢?可以在终端模式下用命令iosFdShow函数来查看已经使用的文件描述符内容:
->iosFdShow
fd name drv
3 /pcConsole/0 2
4 /vio/1 7
从上面的结果可以看到,Fd Table中包含有句柄号(fd),对应的设备名称(name),驱动号(drv),就是这样一个简单的表联系着另外两个重要的表:Dev Table和Drv table。
dev tabel中维护者系统中所有的设备,在命令行中敲入devs便可以查看dev Table的内容了,就是设备列表了:
->devs
drv name
0 /null
1 /tyCo/0
1 /tyCo/1
2 /pcConsole/0
2 /pcConsole/1
4 /ata0a
6 host:
7 /vio
8 /ghDev
9 xxdev
从结果中可以看到,dev table中包含两个内容:一个是驱动号(drv),一个是设备名称(name),仔细对比上面的dev tabel和fd table就可以发现,这两个表中设备名称和驱动号是对应着的。
然后再看看Drv table ,这个表叫做驱动程序表,顾名思义,这个表中维护者我们所有的驱动程序,同样,我们先在命令行里查看一下它的内容吧
-> iosDrvShow
drv create delete open close read write ioctl
1 388660 0 388660 3886a0 388eb0 388da0 3886e0
2 30bae0 0 30bae0 0 388eb0 388da0 30baf0
3 0 0 384040 3840a0 3840d0 384120 384240
4 36d3f0 36d7f0 36d030