跳至主要内容

【转】Vxworks I/O

Vxworks I/O 分为两个过程:
1,设备无关的基本I/O。
2,直接与设备相关的驱动程序
这里仅简明扼要的讲述Vxworks内部I/O系统的运作机理。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()。调用之后可以使用shell下devs命令来查看系统的设备链表。
3 打开函数。打开函数的实现是非常丰富多彩的。可以初始化硬件、初始化软件、可以什么都不做、甚至可以什么都做了,但是返回的时候要如下操作:
return(xxxpDev);这里,xxxpDev是指向设备数据结构的指针。便于系统在文件描述符中操作。系统会根据文件描述符中的内容返回一个文件描述符。当然,用户也可以返回写其他的东西,但是在这里的返回要和下面的其它接口函数所获取的参数相对应,否则将会蹈我的覆辙,浪费掉很多宝贵的时间。 open的第一个参数是char *的字符串,但是在驱动中,实际传来的是一个指针,嘿嘿,这可是关键的变化,这是系统在设备列表中查找的结果。就是0节里提到的数据结构。
4。读写函数和ioctl函数。这几个函数可没什么说的,根据硬件进行数据的传输即可。对应的接口是read\write\ioctl。这三个函数的第一个参数是fd,但到了驱动里面,就变成了上面提到的xxxpDev,这一点是需要注意的。
4。1不得不说的中断处理函数。虽然不得不说,但是也只想说就是一段中断来了要执行的代码!这段代码的限制有很多,但是一般的实现中还是不会出问题。只要知道,就是一段代码而已。
5。最后就是那些可实现或可不实现的东西。设备的关闭、删除、卸载等等,这些可以参见iosDevDelete、iosDrvRemove等函数,由于实时系统是个不死系统,所以不会有哪个牛人去不断的创建、删除设备,打开关闭设备(如果有,我服了他)。

评论

此博客中的热门博文

【转】smb协议栈使用示例

/*  * * uncdownload.c  * *  * * Utility for downloading files from SMB shares using libsmbclient  * *  * * Copyright(C) 2006 Sophos Plc, Oxford, England.  * *  * * This program is free software; you can redistribute it and/or modify it under the terms of the  * * GNU General Public License Version 2 as published by the Free Software Foundation.  * *  * * This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without  * * even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  * * See the GNU General Public License for more details.  * *  * * You should have received a copy of the GNU General Public License along with this program; if not,  * * write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA  * *  * */ # include < sys / types . h > # include < sys / time . h > # include ...

【转】Ether Types

Ether Types (last updated 2008-09-09) NOTE: Please see [RFC5342] for current information and registration procedures. This registry will be revised soon and will be replaced with up-to-date information. Many of the networks of all classes are Ethernets (10Mb) or Experimental Ethernets (3Mb). These systems use a message "type" field in much the same way the ARPANET uses the "link" field. If you need an Ether Type, contact: IEEE Registration Authority IEEE Standards Department 445 Hoes Lane Piscataway, NJ 08854 Phone +1 732 562 3813 Fax: +1 732 562 1571 Email: <ieee-registration-authority& ieee.org > http://standards.ieee.org/regauth/index.html The following list of EtherTypes is contributed unverified information from various sources. Another list of EtherTypes is maintained by Michael A. Patton and is accessible at: <URL: http://www.cavebear.com/CaveBear/Ethernet/ > <URL: ftp://ftp.cavebear.com/pub/Ethernet-codes > Assign...

【转帖】berkeleyDB安装

我们以redhat9为例开始介绍其安装过程: 从其sleepycat公司官网的下载页 http://dev.sleepycat.com/downloads/releasehistorybdb.html 获得其安装包,现在已经更新到4.4.20.   #tar zxfv db-4.x.tgz   #cd db-4.x/build_unix   1. 如果以gcc编译的话,进行以下操作:   #vi /dist/configure 在最前面添加:CC gcc   #../dist/configure   #make   #make install   默认状态,berkeleyDB的lib和include将被安装到/usr/local/BerkeleyDB/下,需要更改这个路径的话,可以将 #../dist/configure一步加上选项--prefix,例如:#../dist/configure --prefix=/opt/BerkeleyDB.   #vi /etc/ld.so.conf 并将berkeleyDB的lib路径加到该文件的最后一行,这样才能找到并加载它的库文件.ld.so.conf是什么东西?它就是系统动态链接库的配置文件。此文件内,存放着可被LINUX共享的动态链接库所在目录的名字(系统目录/lib,/usr/lib除外),各个目录名间以空白字符(空格,换行等)或冒号或逗号分隔。   #ldconfig   2. 如果以armgcc编译的话,进行以下操作:   先安装armgcc,对我说就是在/mnt/setup/program/FFT/FFT-2410光盘-V3.0/linux开发/linux交叉编译器/tool或者在gmail中附件里armgcc目录下(除了cross-armv4l-qtE-custom-1.5-3mz.i386.rpm,其他都装)   #cp /mnt/setup/program/FFT/FFT-2410光盘-V3.0/linux开发/linux交叉编译器/tool /usr/tmp/   #cd /usr/tmp/tool   #rpm -ivh *   #ldc...