理解RTEMS 的网络驱动结构
来源:互联网 发布:javascript 哪些对象 编辑:程序博客网 时间:2024/05/16 06:15
折腾了大半天,勉强看懂了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
- 理解RTEMS 的网络驱动结构
- RTEMS 网络驱动的一些分析和理解
- RTEMS 调试网络驱动的简单方式
- rtems驱动的组织
- rtems网络移植-实现网卡驱动
- RTEMS网络内部的同步
- RTEMS 的 AT91SAM9260 移植(3): 时钟驱动
- RTEMS 的 AT91SAM9260 移植(4): 中断驱动
- RTEMS 网络资料的部分翻译
- 关于RTEMS的网络调试 (上)
- RTEMS 的TCP网络吞吐量测试
- 网络驱动有关结构体的含义
- rtems 驱动机制初探
- rtems源码树结构
- RTEMS 的 AT91SAM9260 移植(5): 调试串口驱动
- RTEMS DM9000网卡驱动在MINI2440 QEMU上的实现
- 网络OSI七层结构的理解
- Linux网络协议栈结构的理解
- ZOJ 3547 《The Boss on Mars》(容斥定理)
- 从顶部开始逐层打印二叉树结点数据
- Struts2、SpringMVC、Servlet(Jsp)性能对比 测试
- VC#2005进行WPS表格2005二次开发的例子
- session标识的作用
- 理解RTEMS 的网络驱动结构
- MyEclipse保存文件时提示"save could not to completed ISO-8859-1"
- AndroidManifest.xml解析
- Linux下Mplayer的安装
- 【原创】驳某些谬论:垂直B2C的发展正是时机!
- Timus 1009 K-based Numbers (DP)
- MVC系列学习文章
- Postgres Linux下安装
- 如何系统地学习JavaScript