1)VxWorks驱动程序一般实现7个API调用:create,open,read,write,ioctl,remove,close
2)调用iosDrvInstall把上述7个API注册到drvTable中,可以用iosDrvShow显示drvTable表的内容,例如:
-> iosDrvShow
drv creat remove open close read write ioctl
0 0x0 0x0 0x30de14 0x30ded4 0x0 0x30de0c 0x30de4c
1 0x310f54 0x0 0x310f54 0x310fac 0x311c4c 0x311b1c 0x311000
2 0x0 0x0 0x30ead0 0x30ebe4 0x30ec3c 0x30ed00 0x30ee94
3 0x26a6b0 0x26ae1c 0x26a18c 0x26a7dc 0x26c148 0x26c188 0x26d6d0
4 0x36ead8 0x0 0x36ead8 0x36e070 0x36ed64 0x36efc0 0x36e6f4
5 0x30f5b4 0x0 0x30f5b4 0x30f608 0x30f6b8 0x30f7e0 0x30f874
6 0x30f564 0x0 0x30f564 0x30f65c 0x30f748 0x30f80c 0x30f958
7 0x0 0x0 0x0 0x385814 0x385880 0x385868 0x385898
8 0x390944 0x0 0x390944 0x390a30 0x311c4c 0x311b1c 0x390a88
9 0x38fe54 0x38fe60 0x38fc30 0x38ff7c 0x390218 0x390220 0x390228
value = 20 = 0x14
3)使用iosDevAdd创建新的设备,并且把设备添加到iosDvList中,可以用iosDevShow(devs)显示设备的list,/p>
-> iosDevShow
drv name
0 /null
1 /tyCo/0
8 /vio
9 /tgtsvr
3 /sd0:1
4 /sd0:2
value = 25 = 0x19
从上述2个输出可以看出名字“/sd0:1”的设备的驱动号是3,对应的驱动API函数是:
3 0x26a6b0 0x26ae1c 0x26a18c 0x26a7dc 0x26c148 0x26c188 0x26d6d0
从反汇编代码里可以看出:
0x26a6b0–>dosFsCreate
0x26ae1c–>dosFsDelete
0x26a18c–>dosFsOpen
0x26a7dc–>dosFsClose
0x26c148–>dosFsRead
0x26c188–>dosFsWrite
0x26d6d0–>dosFsIoctl
建立fd table FD_ENTRY ** iosFdTable,并用
STATUS iosFdEntrySet(FD_ENTRY *pFdEntry,DEV_HDR *pDevHdr,const char *name, void *value)
注册fd到iosFdTable表中。
总结:vxWorks的驱动模型非常简单,一个链2个表的结构。