SylixOS网卡驱动框架

  1. 开发环境

  • 操作系统:SylixOS操作系统

  • 编程环境:RealEvo-IDE3.1

  • 开发板:imx6q实验箱

  1. 技术实现

    SylixOS 内核版本1.4.1的网卡驱动框架与之前的版本相比有了很大变化,最主要的就是由之前的netif结构体变成了现在了netdev结构体。这个版本的网卡驱动框架主要由以下几个部分组成。

     

  2. 网卡驱动框架:网卡驱动入口

    在官方提供的imx6Q的BSP工程目录中,SylixOS文件夹主要由三个子文件夹组成,分别是:bsp, driver, user。如图 21所示

     21 工程资源文件

    bsp文件夹里是跟整个bsp相关的C文件及相关配置文件等,在startup.s之后运行的第一个C文件为:bspInit.c,如图 22所示

     22 bspInit.c

    驱动程序一般都存放在driver文件夹中。如图 23所示。

     23 驱动文件夹

    网卡驱动代码在driver下的netif子文件内,打开imx6q_netif.h , 整个网卡驱动对外只提供了一个函数:enetInit ,如图 24所示。

     24 网卡入口函数

    enetInit是整个网卡驱动的入口函数,前面说的bspInit.c里halNetifAttch函数里会调用这个函数,进行网络的初始化。如图 25所示。

     25 调用enetInit

  3. 网卡驱动框架:网卡驱动实现

    在当前版本的SylixOS 里,网卡驱动主要是实现netdev这样一个结构体,结构体里的成员如图 26所示。

     26 netdev

    这个结构体里的内容主要可以分为以下两类:

  4. 配置信息相关

    除了netdev_funcs结构体指针变量drv之外,其他的成员都可以分到这一类中,在驱动程序里,只需根据具体情况,对这一类的成员进行对应的赋值即可。如图 27所示。

     27 配置信息相关

  5. 驱动程序相关

    这一类的就一个成员,即netdev_funcs结构体指针。它里面定义了所有驱动程序需要实现的内容,这个结构体的定义如图 28所示。

     28 netdev_funcs

    一般,实现了init,transmit,receive这三个成员后,网卡基本就可以正常工作。这三个函数的功能如下:

    .init : 进行整个网卡的初始化内容,里面可以包括MAC控制器的初始化,PHY的初始化,描述符的初始化,中断的绑定等等;

    .transmit : 上层协议发送数据时,最后调用的就这个函数,因此,它要是实现网卡驱动的发送功能。

    .receive : 当网卡收到数据时,会调用这个函数进行接收,同时,它里面还需要实现将收到的信息传到上层协议栈中去的功能。

  6. 网卡驱动框架:在系统中添加网卡信息

    完成了上述内容之后,整个网卡驱动的内容也已经填充到netdev这个结构体中去了,最后只需要调用netdev_add函数就可以在系统中添加我们实现的这个网卡信息,如图 29所示。

     29 netdev_add

  7. 网卡驱动框架:连接监测线程

    在网卡驱动里,可以创建一个线程,用来监测当前网络的连接状态,如图 210所示。

     210 监测线程

     

     

  8. 参考资料

猜你喜欢

转载自www.linuxidc.com/Linux/2017-02/140358.htm