Linux 网卡驱动设备程序设计(1)

一。网卡驱动架构分析

  1. Linux 网络子系统

    #系统调用接口层

     为应用程序提供访问网络子系统的统一方法。

    #协议无关层

     提供通用的方法来使用传输层协议。

    #协议栈的实现

     实现具体的网络协议

    #设备无关层

     协议与设备驱动之前通信的通用接口

    #设备驱动程序

  2. 重要数据结构

    2.1 网卡描述结构

      在Linux内核中,每个网卡都由一个《net_device》结构来描述,其中的一些重要成员有:

      #char name[IFNAMSIZ]

      设备名,如:eth%d

      #unsigned long base_addr

      I/O 基地址

      #const struct net_device_ops *netdev_ops;

    2.2 网卡操作集合

    说明 : 类似于字符设备驱动中的file_operations结构,net_device_ops结构记录了网卡所支持的操作。

        static const struct net_device_ops dm9000_netdev_ops =

        {

          .ndo_open= dm9000_open,

          .ndo_stop= dm9000_stop,

          .ndo_start_xmit= dm9000_start_xmit,

          .ndo_do_ioctl= dm9000_ioctl,

          .ndo_validate_addr= eth_validate_addr,

          .ndo_set_mac_address= eth_mac_addr,

        };

     2.3  网络数据包

       Linux内核中的每个网络数据包都由一个套接字缓冲区结构struct sk_buff 描述,

       即一个sk_buff结构就是一个网络包,指向sk_buff的指针通常被称做skb。

  3. 网卡驱动架构分析

    1. CS8900.c

     

原文地址:https://www.cnblogs.com/lvxiaoning/p/5075659.html