我有两个问题想请教各位师兄:
1.能给我一个编写pci驱动程序的步骤吗?最好有一个模板,就是已经编写好的驱动程序。我想学习一下。
因为看了两天这方面的资料也不是很明白,如果能帮我一下,效果会好很多。
2.tornado下面的pci配置程序,是不是已经负责把pci找到了,换句话说:就是编译好的bsp是不是已经包含pci驱动了?而我所要编写的就是去某个端口取数据。是这个样子吗?
如果不是上面所述的话,那么bsp下的pci配置程序又是起什么作用的?
谢谢各位师兄!
此致!
敬礼
啊,看看这样行不:
1. 用总线搜索的函数找到你的卡,并确定PCI PnP得来的各个IO/MEM基址和中断信息。
2. 按照板卡的寄存器定义编程,这个根本没有办法提供参考,每个PCI卡都不同。
可参考的资料有BSP目录下PCI网卡的PCI接口的网卡驱动,例如fei557。x86的稍微麻烦点,还要添加MMU条目。
PCI驱动是系统已经带有的,怎么说呢,严格来讲不叫PCI的设备驱动,应该是PCI总线驱动,因为它只提供访问PCI总线上相关资源的支持,而具体哪个设备如何驱动,则调用这些总线访问的支持函数自己做。如fei557、gei553或者其它任何PCI接口的设备驱动就是调用基本的PCI总线访问函数来做的。
俺这样理解:PCI,跟内存总线一样,它本身只是一种总线,一种途径。作为编写具体PCI设备的驱动来讲,就是利用这个途径来实现你设备的操作,就跟读写内存一样。。
可以这样理解的。
在BSP里面是要包含INCLUDE_PCI这个组件和其它相应配置,不过这些通常参考BSP里面就配置了的。
PCI总线使用了映射的概念,啥意思呢,就是把PCI总线上的东西跟普通存储或者IO总线上的东西在访问方式上保持一致,把PCI的IO\MEM空间映射到系统中来,感觉就好像在普通总线上一样。最终对编程来说,操作PCI总线上的MEM和IO和操作非PCI上的MEM和IO一样,地址编排、访问函数都一样的。我说清楚了没有?
啊x86的IO和MEM是独立编址的,有些CPU不是。VxWorks中访问IO端口的函数有sysOutByte/sysInByte等类似函数,MEM则可以通过指针或者直接内存读写来操作。
关于status的含义,你说的应该是STATUS吧。这些是基本的东西,在你开始做从事软件开发工作前,必须具备相关C预言的使用通行规则,这可能需要一些时间和积累。可以阅览相关的头文件和源文件,找到它的定义。--每一个非标准C预言数据类型都是有定义来源的,通常在头文件中。查找的话,可以在文件中搜索就可以得到。
这样理解不对。
BSP做好的事情只是能让你访问相应的硬件资源(啊,单就PCI驱动来说),离能使用操作系统IO系统函数还差很远--VxWorks并不知道你这是什么卡,只知道该如何操作PCI总线上的资源,因为有PCI标准。
举个例子吧:有一块卡:它使用三个PCIBAR,BAR0为MEM空间,BAR1,BAR2为IO空间。BSP做的事情是:
1. 通常会把这些空间映射到系统中来,可以让你象操作本地资源一样操作PCI上的资源,在x86中,这是由BIOS完成的,VxWorks仅仅接受其设置,在其它系统中,通常是BSP中的PCI支持库初始化过程中完成的。不管谁完成,这个过程通常叫做POST过程。POST过程很巧妙,写起来比较长,啊,网上自己找了看看。POST好之后,你用pciConfigTopoShow应该可以看到系统中所有的PCI设备的情况,然后用pciHeaderShow可以看某个设备的具体信息,里面就会包含有BAR的信息。比方说BAR1的值为0x10000000,那么使用硬件IO函数(注意:硬件IO和open()、read()一类的系统IO函数完全是两个概念),比如sysOutLong(0x10000000,0x5555aaaa)就可以向这个PCI的IO空间1输出一个0x5555aaaa的值。(要是内存空间则通过指针)。
2. 分配IRQ。因为PCI卡片自己只知道自己使用的哪根中断线,但不知道对应哪个IRQ,同样,POST软件会根据自己使用的母板的中断路由表来确定其对应的IRQ,并把这个值填写到PCI设备的寄存器里面去。中断路由表是跟母板(我们通常叫主板吧)有关的,好在IBM PC定义一套固定的规则,大家都按那个来做,我们通常就不用多考虑了。但是如果是非x86系统,这个中断路由表通常是在BSP中自己编写的。
啊,BSP就完成这么多,至于你的寄存器是啥含义啊什么的,就自己通过读写IO或者MEM寄存器来编程了,很简单,假如你的板子是一个串口卡,芯片是用的intel 8250,对应的IO空间BAR1,BAR1的基址是0x8400 0000,8位操作,你就可以像操纵普通的(不是位于PCI总线上的)8250一样操纵这个芯片了,甚至连访问函数都是一样的。
我说清楚了吗?
有奖活动 | |
---|---|
【有奖活动】分享技术经验,兑换京东卡 | |
话不多说,快进群! | |
请大声喊出:我要开发板! | |
【有奖活动】EEPW网站征稿正在进行时,欢迎踊跃投稿啦 | |
奖!发布技术笔记,技术评测贴换取您心仪的礼品 | |
打赏了!打赏了!打赏了! |