理解RTEMS 的网络驱动结构

折腾了大半天,勉强看懂了RTEMS关于网卡驱动部分的架构了。根据 networking 文档的描述,
网卡驱动必须执行 attach函数将驱动和bsd协议栈联系起来 cs8900_driver_attach,然后
这个函数里面将各个驱动函数注册到 rtems_bsdnet_ifconfig,然后注册到系统,这看起来没
什么特别,一般驱动都是这样做。

但是问题来了,cs8900_driver_attach 被谁调用的?查找,竟然找不到,怎么回事?
于是阅读文档
rtems_bsdnet_initialize_network 必须被调用,bsp 调用,或者用户程序调用。
里面有这么一段,很显然就是根据 rtems_bsdnet_config.ifconfig 的内容去完成 attach。
for (ifp = rtems_bsdnet_config.ifconfig ; ifp ; ifp = ifp->next) {
  rtems_bsdnet_attach (ifp);
 }

那查找这个 rtems_bsdnet_config ,发现没有定义!
折腾很久终于发现了在 Rtems_bsdnet.h 中有这么一句说明

/*
 * Default global device configuration structure. This is scanned
 * by the initialize network function. Check the network demo's for
 * an example of the structure. Like the RTEMS configuration tables,
 * they are not part of RTEMS but part of your application or bsp
 * code.
 */
extern struct rtems_bsdnet_config rtems_bsdnet_config;

也就是说 rtems_bsdnet_config 配置结构必须由用户或者BSP来完成,rtems内核并不参与。

在 rtems-4.10.2\c\src\libchip\network 中已经有了 CS8900.C 的驱动程序了。但是驱动是
分两层的,这里实现的是通用的部分,还需要BSP实现具体的接口。

上网找了下家山的s3c2410移植的文章,上面提到了在以下目录有 CS8900 的bsp驱动
\c\src\lib\libbsp\arm\edb7312\network
于是翻开看了代码,但是,问题来了,里面并没有实现 rtems_bsdnet_config,而且
c\src\lib\libbsp\arm\edb7312\include\bsp.h 文件
/*
 * Network driver configuration
 */
#define RTEMS_BSP_NETWORK_DRIVER_NAME "eth0"
#define RTEMS_BSP_NETWORK_DRIVER_ATTACH cs8900_driver_attach

晕死,全文查找找不到 RTEMS_BSP_NETWORK_DRIVER_NAME 在哪里使用。折腾了很久,
最后发现官方原来还有 network 的demo程序 network-demos-4.10.2.tar.bz2

解开阅读后发现,所有的谜团解开了,原来 RTEMS_BSP_NETWORK_DRIVER_NAME 的定义是提供
给 demo 使用的。bsp只有实现代码,但是并没有具体去使用驱动。
要使用驱动,则用户可以自己准备好 rtems_bsdnet_config 结构,然后在 Init 函数可以调用
rtems_bsdnet_initialize_network ,那么如果驱动正常的话,那么网络协议就准备好了。
用户可以写各种网络程序去做需要的事情了。

郁闷了大半天,基本了解了大概结构,接着就是做 8900 的驱动移植了。成功后再写文章。

Etual
2012-12-26

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值