这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » 嵌入式开发 » MCU » 关于VxWorks下的设备驱动程序(老站转)

共1条 1/1 1 跳转至

关于VxWorks下的设备驱动程序(老站转)

菜鸟
2002-05-31 22:14:58     打赏
主题:关于VxWorks下的设备驱动程序 <--- 〖回复该帖子〗 1. VxWorks下有以下几种设备驱动程序: 1) 块设备驱动 block device driver 2) 字符设备驱动 character device driver 3) 串行设备驱动 serial device driver 4) END enhanced network device driver 5) 用户自定义 user custom 2. 位置: 块设备驱动挂到文件系统上,再挂到IO系统上; 字符设备驱动直接挂到IO系统上; 串行设备驱动挂到TTY上,再挂到IO系统上; END挂到MUX层上,最终也要挂到IO系统上。 用户自定义驱动直接和应用程序打交道。 3. 命名: 字符设备需要名字,例如:"/tyCo/0","/pipe/myPipe"等; END设备也需要名字,例如:"ene0", "elPci0"; 其它设备不需要名字。 4. 访问: 一般来说,访问一个设备通过IO系统creat, remove,open,close,read,write,ioctl等函数; END也可以使用read, write, ioctl函数,也需要使用socket等函数; 标准C函数fopen,fclose等是对open,close等的封装,它带缓冲,称为buffered IO; 一般只对文件系统上的文件操作使用fopen,fwrite等函数,对其它类型设备不使用; 用户自定义驱动直接向应用层提供接口。 我画了个图,感兴趣的可mail给你。vxfree@sina.com ※ 作 者: vxfree 02-1-16 10:27:31 ※ mikelish 助理工程师 来自: 发表总数:7 查看   短消息   电子邮件 -------------------------------------------------------------------------------- 驱动程序没有什么特别的资料, 在vxworks program guide 的IO system 这一章讲到一些。 其他吗, 就是看vxworks的源程序了。 从源程序中可以学到很多的。 在就是对所用的硬件协议要熟悉。 ---------------------------------------------------------------------------- Re:Re:关于VxWorks下的设备驱动程序 <--- 〖回复该帖子〗 字符设备又叫非块设备,比如管道。从各种设备在系统中所处地位来看, 文件系统,TTY等都可看成是字符设备,它们和IO系统直接打交道。不过 你也可以只把把他们当作一些特殊模块。这些“设备”的驱动程序通常由 操作系统提供。 串行设备driver要提供诸如xxRead,xxWrite,xxClose,xxOpen等函数, 供IO系统回调用。 文件系统这个“设备”通常要建立在块设备上,毕竟我们的文件是放在 磁盘上的。一个文件系统可以管理多个块设备(磁盘)。块设备至少要 提供2个接口函数:blkRead和blkWrite。块设备挂到文件系统上后, 文件系统每次需要读写磁盘的扇区时,就通过回调的方法进行读写操作。 TTY设备是终端设备。我们可以通过串口实现一个字符终端。所以TTY设备 要建立在串行设备基础上。PC终端(VGA+keyboard)是通过另外一个模块pcConsole挂到IO系统上的。 各个模块都有一个初始化函数,用来初始化这个模块(而不是物理设备!)BSP有责任调用它们,并且要把各个模块以及物理硬件关联起来。 系统中和“设备”相关的所有模块有一个严谨的层次关系,各个模块间的 接口都是独立的,这是因为它们之间有严格定义的接口。一般把直接管理 硬件的那个模块叫做“设备驱动程序”。不过我习惯于把所有模块都看成 是某种意义上的“设备”。 这些模块的核心就是IO System这个模块。为了理解IO系统的工作原理, 建议大家看看VxWorks Programmer"s Guide中的IO系统和它的内部结构 那一部分。 个人的一些理解,不妥之处请见谅,指出! 串行设备driver要提供诸如xxRead,xxWrite,xxClose,xxOpen等数, ^^^^^^^ 字符设备 ※ 作 者: vxfree 02-1-17 下午 08:26:11 ※ =========================================================================== Re:End driver真的最终要挂到IO系统上么?! <--- 〖回复该帖子〗 我这里“挂”的意思说得含糊了一点。sorry! 我的意思是“联系起来”。比如说块设备driver,它一般和文件系统相关联, 再由文件系统和IO系统相联系,这样我们可以调用I/O系统的函数例如 open,close,read,write等对块设备上的文件进行操作。 由于我对网络协议知之甚少,所以END只是我的推测,不妥之处请见谅~ 通过观察源代码,可看出VxWorks下的socket初始化过程: 首先调用sockLibInit(),然后是sockLibAdd(bsdSockLibInit,...)以及 sockLibAdd(strmSockLibInit,...)。 在Shell下反汇编bsdSockLibInit,可看出它发出了I/O系统的调用请求 iosDrvInstall(),把自己当作一个驱动挂到了I/O系统上。right? 在Shell下调用iosFdShow,可以看到有些fd是socket创建的,而所谓的 File Descriptor是由I/O系统维护的一张表的索引。然而在Shell下观察设备, 却没有发现使用5号driver的设备。我推测socket模块并没有调用iosDevAdd 创建设备,所以不能使用open或creat函数打开由socket模块管理的设备, 而只能由socket()来创建(?)然而打开socket后,可以调用read, write, close, ioctl等I/O系统的函数控制socket。也可以使用select()函数对 socket进行查询操作。 socket层下面是TCP/UDP,IP等协议层,再往下就是mux层。原则上来说mux层 是和ip层无关的,是ip层向mux层注册自己,使得ip成为mux的一个使用者。 end driver由BSP调用muxDevLoad()把它挂到mux上。当然你也可以使用ip协议 之外的其它协议,只要满足mux接口就可以。然而目前标准版VxWorks只提供 ip协议(AF_INET)。 如果调用write()写socket,我猜测程序的流程是: I/O -> socket -> TCP -> IP -> MUX -> END。right? -> iosFdShow fd name drv 3 /tyCo/0 1 4 (socket) 5 5 (socket) 5 6 /vio/1 9 value = 0 = 0x0 -> -> devs drv name 0 /null 1 /tyCo/0 4 host: 7 /pty/telnet.S 8 /pty/telnet.M 9 /vio 10 /tgtsvr 3 /ram1 value = 0 = 0x0 -> -> l bsdSockLibInit _bsdSockLibInit 0040e698 55 PUSH EBP 0040e699 89 e5 MOV EBP, ESP 0040e69b 83 3d b8 aa 49 00 00 CMP 0x0049aab8, 0 0040e6a2 7e 08 JLE _bsdSockLibInit + 0x14 0040e6a4 b8 58 60 48 00 MOV EAX, 0x486058 0040e6a9 eb 49 JMP _bsdSockLibInit + 0x5c 0040e6ab 90 NOP 0040e6ac 68 74 e1 45 00 PUSH 0x45e174 0040e6b1 68 b0 ee 40 00 PUSH 0x40eeb0 0040e6b6 68 ac f3 40 00 PUSH 0x40f3ac value = 0 = 0x0 -> l bsdSockLibInit+0x14 0040e6ac 68 74 e1 45 00 PUSH 0x45e174 0040e6b1 68 b0 ee 40 00 PUSH 0x40eeb0 0040e6b6 68 ac f3 40 00 PUSH 0x40f3ac 0040e6bb 68 78 e7 40 00 PUSH 0x40e778 0040e6c0 6a 00 PUSH 0 0040e6c2 6a 00 PUSH 0 0040e6c4 6a 00 PUSH 0 0040e6c6 e8 51 c6 02 00 CALL _iosDrvInstall 0040e6cb a3 b8 aa 49 00 MOV 0x49aab8, EAX 0040e6d0 83 f8 ff CMP EAX, -1 value = 0 = 0x0 -> ※ 作 者: vxfree 02-1-21 下午 06:13:05 ※



关键词: 关于     VxWorks     设备     驱动程序     老站转    

共1条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]