aquariuscamus
驱动小牛
驱动小牛
  • 注册日期2004-02-18
  • 最后登录2005-03-29
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:3923回复:9

原创,编写vxworks硬件的驱动程序

楼主#
更多 发布于:2004-04-29 22:49
为了对共享资源的人表示诚挚的感谢,我写下面的文章来表达我的兴奋。希望共享能在这里生生不息,为中国产业做出贡献。

前面的话,我这个人比较懒、比较现实,这可能是脱离学校之后养成的坏毛病。下面的东西,我不想说太多,只想说一点和实际有关系的东西。很多原理性的东西如果讨论起来就没边没际了,而这也不是我一时兴起所能完成的工作。在此,我只想针对论坛上的绝大多数问题,先讨论一下vxworks下字符型设备驱动的编写方法。当然我希望图文并茂、原理和实际并重但我很懒。嘿嘿。如果有什么错误或不足还请大家指出。希望能抛砖引玉,令这里的气氛活跃起来。欢迎引用和转载,但希望可以署上我的名字。

vxworks系统的设计遵循了大多数为内核系统的设计思路,在设备上使用了与设备无关的接口方案,这是一个进步,也是一个牺牲(牺牲了实时性),具体的原理暂时就不描述了,接触过操作系统的人都会有点印象。作驱动只要知道两表一链一描述符。所谓两表指驱动描述表和文件描述符表,一链之设备链表,一描述符指设备描述符。这几个东西的关系将在下面的描述中提及。

好了,那就开始吧,自顶向下可能有人会不解,但是反过来看就明白了。
0。必要的数据结构。我在开始学习的时候并不知道为什么要使用这样的数据结构:
structdef{
DEV_HDR xxxdevhdr;
.../*设备相关的数据*/
}
现在,读者也可以不深究,但一定要知道,DEV_HDR的作用是为了系统可以在设备链表上安装设备,并在执行打开操作时可以找到设备。

1。制作好的驱动必须安装到系统之上。vxworks系统不会自动查找驱动程序,或者为新设备安装驱动。那么制作驱动的第一步工作就是安装驱动,这里要使用的函数是iosDrvInstall,这个工作的目的是把驱动挂接在驱动描述表中。之后,系统就可以为设备使用驱动了。为了遵循标准请使用xxxDrv(xxx代表设备的名称)
在调用的时候使用xxxDrv()。调用之后可以使用iosDrvShow来查看系统的驱动描述表。

2。必须在设备实体上使用驱动。安装完驱动,vxworks系统并不会先知先觉的在某个设备上使用驱动程序,而需要用户创建一个设备,并为将来的打开作准备。这里将会使用iosDevAdd函数添加一个设备到系统中去,同时会通知系统该设备所要使用的驱动程序。用户应在这个函数调用之前创建设备数据结构,就是0节里提到的那个,但后将DEV_HDR通过iosDevAdd传给系统。为了遵循标准请使用xxxDevCreate(xxx代表设备的名称)
在调用的时候使用xxxDevCreate()。调用之后可以使用devs来查看系统的设备链表。

3。打开函数。打开函数的实现是非常丰富多彩的。可以初始化硬件、初始化软件、可以什么都不做、甚至可以什么都做了,但是返回的时候要如下操作:
return(xxxpDev);这里,xxxpDev是指向设备数据结构的指针。便于系统在文件描述符中操作。系统会根据文件描述符中的内容返回一个文件描述符。当然,用户也可以返回写其他的东西,但是在这里的返回要和下面的其它接口函数所获取的参数相对应,否则将会蹈我的覆辙,浪费掉很多宝贵的时间。open的第一个参数是char *的字符串,但是在驱动中,实际传来的是一个指针,嘿嘿,这可是关键的变化,这是系统在设备列表中查找的结果。就是0节里提到的数据结构。

4。读写函数和ioctl函数。这几个寒暑可没什么说的,根据硬件进行数据的传输即可。对应的接口是read\\write\\ioctl。这三个函数的第一个参数是fd,但到了驱动里面,就变成了上面提到的xxxpDev,这一点是需要注意的。

4。1不得不说的中断处理函数。虽然不得不说,但是也只想说就是一段中断来了要执行的代码!这段代码的限制有很多,但是一般的实现中还是不会出问题。只要知道,就是一段代码而已。

5。最后就是那些可实现或可不实现的东西。设备的关闭、删除、卸载等等,这些可以参见iosDevDelete、iosDrvRemove等函数,由于实时系统是个不死系统,所以不会有哪个牛人去不断的创建、删除设备,打开关闭设备(如果有,我服了他)。所以我也不多说。

看到这里,一定有大多数人云山雾绕,那是因为硬件知识缺乏(猜测),不知从何下手,但是按照上面一步一步写出来一个模板,在通读一下全文,我想就会抛弃硬件知识而理解软件内容。推荐看的一本书是封河的bsp开发教程,网上有下载,可恨当年某公司卖到100多一本。关于硬件,我想可能会看看各版的情况,然后讨论几个例子,硬件涉及的东西太多,我太懒。。。。

最新喜欢:

beamdavebeamda...
我的邮件地址:hwybird@sohu。com,两三天看一次
游客

返回顶部