vxworks pci驱动开发问题

liwei19840617 2011-04-27 06:44:15
最近在vxworks5.5下开发pci板卡的驱动,遇到了很多问题,想请教一下高手,如下:pci的.c和.h文件都写完了,为了以后便于文件使用方便,我就生成一个静态库连接的.a文件,建立一个download工程,把它编译为了.a文件,然后有加到了BSP下,也改写mkaefile文件,然后build boot rom ,编译成功,最后在建立一个bootable vxworks image工程编译通过,到这步我认为是没有错误的,如有错误请高手指出,接下来就重新做boot,让后启动在把vxworks镜像下载到目标机里,在shell下输入devs却没发现我的驱动挂载,我也在.c里加入了iosDrvInstall、great、iosDevadd函数,请高手帮忙解答,实在是头疼了好几天,先谢谢大家了
...全文
534 22 打赏 收藏 转发到动态 举报
写回复
用AI写文章
22 条回复
切换为时间正序
请发表友善的回复…
发表回复
xichengyi 2011-12-02
  • 打赏
  • 举报
回复
可以将编译成.o文件,然后放到config下(BSP下),改写Makefile文件,编译生成boot rom ,继续往下操作,应该可以的吧
异乡客 2011-08-17
  • 打赏
  • 举报
回复
vendorIdEnet数组在sysNet.c文件中
异乡客 2011-08-17
  • 打赏
  • 举报
回复
给你举个网卡驱动加载的例子吧,或许对你有帮助。
PCI首先进行自动配置,然后对网卡进行识别,vendorIdEnet 数组中定义了一个系统支持的PCI网卡类型,如果你写了网卡驱动,那么需要先把你的网卡识别码加入到数组vendorIdEnet 中,系统才能够识别你的网卡。
完成了网卡的识别之后,系统会运行configNet.h文件定义的endDevTbl数组中的各个函数,进行试探性的加载网卡,如果你自己写了网卡驱动,那么一定要把你的驱动加入到数组endDevTbl中。这样系统就能够自动加载你的网卡。

也就是说你需要修改vendorIdEnet 和endDevTbl数组,将你的网卡的类型即加载函数放到这两个数组中。

不知道你的是什么设备,希望对你有些参考价值。
embedded007 2011-08-17
  • 打赏
  • 举报
回复
获取PCI空间的资源是关键

别的套用格式就行了
bflyswhbflyswh 2011-08-17
  • 打赏
  • 举报
回复

Q45012079讲的是对的,PCI是有标准驱动的,你写的驱动需要基于PCI标准驱动之上来编写板卡驱动,PCI并不会自动调用你的驱动,你需要在PCI驱动查找到板卡标识后调用并创建它,这样上层应用才能使用。
fengxz1985 2011-08-16
  • 打赏
  • 举报
回复
学习下 正在学习PCI
异乡客 2011-08-14
  • 打赏
  • 举报
回复
PCI驱动是自动加载的,你写的驱动应该是PCI设备的功能驱动,如果PCI网卡只需要写网卡驱动,而无需写PCI驱动,因为PCI是自动配置的。只需要在自动配置的基础上通过访问PCI映射的内存空间或者IO空间控制网卡的行为即可。
一般来说iosDrvInstall只是安装了驱动控制函数,还要调用create函数创建设备,这主要是控制硬件的初始化以及相关数据结构的初始化。

你可以先打印一下输出,是iosDrvinstall安装的问题,还是create函数创建设备出了问题,估计是后者的问题。
liwei19840617 2011-05-16
  • 打赏
  • 举报
回复
谢谢大家!如果在遇到什么问题了在请教大家。
embedded007 2011-05-13
  • 打赏
  • 举报
回复
[Quote=引用 12 楼 liwei19840617 的回复:]

恩,是的,我也觉得我的思路应该没有问题,那除了最后的.a封库外,还要不要在sysLib.c里添加初始化的函数,还有就是封装成静态库以后在sysLib.c里添加这个还有用吗?


还有楼上说的标准驱动方式是什么,麻烦简单说一下,谢谢!
[/Quote]

就是按照PCI读取配置空间获取资源,然后再按照设备驱动的写法来实现

liwei19840617 2011-05-10
  • 打赏
  • 举报
回复
恩,是的,我也觉得我的思路应该没有问题,那除了最后的.a封库外,还要不要在sysLib.c里添加初始化的函数,还有就是封装成静态库以后在sysLib.c里添加这个还有用吗?


还有楼上说的标准驱动方式是什么,麻烦简单说一下,谢谢!
liwei19840617 2011-05-09
  • 打赏
  • 举报
回复
首先谢谢大家的解答,我写驱动的时候主要是调用系统的函数,驱动本身编写不难,到是怎么去加载它难住了我,我的初意是把它一静态库的形式加载到BSP中,然后启动系统后shell下输入devs能看到加载的这个驱动,可是我加载进去看不到这个驱动,我是用IO函数封装的,希望大家耐心帮帮,谢谢
embedded007 2011-05-09
  • 打赏
  • 举报
回复
你的思路没有错

但PCI设备的驱动有一个标准的驱动方式

至于.a这是封库,到最后再做不迟
小小豆芽 2011-05-05
  • 打赏
  • 举报
回复
不会要你去写总线驱动,一般bsp都包含这些功能。你可以先用sysPciAutoConfig来probe设备为每个pci设备分配空间,然后使用pciFindDevice找到你所需要操作的设备,从BAR中读取总线基地址,将总线基地址映射为本地地址,这样就可以用内存映射的方式去访问pci外设了。

可以访问外设后,你就只要编写设备驱动程序即可。
frank_zhou 2011-05-05
  • 打赏
  • 举报
回复
参照一个类似的驱动,仔细看看就比较清楚了。
基本上PCI驱动开发的话还是比较简单的,使用系统pciConfigLib库里的接口函数就可以了,pciConfigShow库里的几个函数可以帮你直接查看PCI设备信息。设备驱动主要的是对硬件设备芯片手册仔细看看,一般类型的PCI设备驱动系统都已经有类似的了,参照硬件手册把不同的地方改改一般可能就可以了。
liwei19840617 2011-05-04
  • 打赏
  • 举报
回复
是的,有这个pci库,我可能是现在对pci驱动开发的流程的逻辑顺序认识有问题,请帮我理一理,怎么去写这个pci驱动,我已经晕了,请高手指点
liwei19840617 2011-04-29
  • 打赏
  • 举报
回复
首先谢谢耐心的帮助
create函数是在sysxxxInit(void)里调用的,如:pci3377DevCreate("/3377pci",8192,8192);pci3377DrvNum = iosDrvInstall(pci3377DevCreate,0,0,0,0,0,0);
然后再初始化函数外有写的create函数。
tpu 2011-04-29
  • 打赏
  • 举报
回复
继续: 谁调用了create?
frank_zhou 2011-04-29
  • 打赏
  • 举报
回复
vxworks本身不是有PCI库的吗,如果是开发PCI板卡的话,直接调用PCI库接口函数就可以访问PCI设备了啊.
或者你是要开发PCI桥芯片的驱动?
liwei19840617 2011-04-28
  • 打赏
  • 举报
回复
补充 :LOCAL int pci3377DrvNum
liwei19840617 2011-04-28
  • 打赏
  • 举报
回复
xxxDrvNum = iosDrvInstall();然后在create函数里用iosDevAdd( , ,xxxDrvNum);
加载更多回复(1)

2,180

社区成员

发帖
与我相关
我的任务
社区描述
xworks是美国 Wind River System 公司( 以下简称风河公司 ,即 WRS 公司)推出的一个实时操作系统。
社区管理员
  • VxWorks开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧