VxWorks IO模型,驱动和设备模型

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个表的结构。

下一篇
« Prev Post
上一篇
Next Post »