首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

ARM嵌入式系统网络驱动中的重要数据结构

ARM嵌入式系统网络驱动中的重要数据结构

ARM嵌入式系统网络驱动中的重要数据结构
    网络设备的关键数据结构是net_device,它不仅包含了网络接口所使用的中断、地址、实际函数等硬件信息,也包含相关的上层网络协议的内容,它是网络和内核的接口。Net_device适用于所有的网络接口,结构比较复杂。在此分四个方面对它进行介绍。
1、通用部分
   net_device的这些项内容用于管理网络设备不和具体协议相关。
    char*name:设备的名字,例如eth0,如果不指定,在设备登记时   register_netdev()函数将会自动指定一个;
    structdevice *next:指向下一个网络设备,用于维护整个网络设备链表;
    structmodule *owner:在模块加载时指向模块的所有者;
    intifindex:提供快速查找网络设备的索引;
    unsignedlong state:包含网络设备的状态信息。
2、硬件相关部分
    标识设备使用的共享内存的首地址及尾地址,包括如下域段:
     unsigned long rmem_end;
     unsigned longrmem_start;
     unsigned long mem_end;
     unsigned long mem_start;
    如果设备用来接收和发送的内存块不同,则mem域段用来标识发送的内存位置,rmem用来标识接收的内存位置。mem_start和mem_end可在系统启动时用内核的命令行指定,用ifconfig命令可以查看它们的值。rmem域段从来不被驱动程序以外的程序所引用。
     unsigned long base_addr;
     unsigned char irq;
    I/O基地址和中断号。对于嵌入式系统,这两个值基本是固定的,在PCI总线连接中它们可以在设备检测期间被赋值,但也可以在系统启动时指定传入(如传给LILO)。
     ifconfig命令可显示及修改它们的当前值。
     unsigned charif_port:记录哪个硬件I/O端口正在被接口所用,如BNC,AUI;
     unsigned chardma:设备用的DMA通道;
     void *priv:是指向私有数据的指针。
    私有数据是个很重要的结构,硬件不同这个结构内部的定义也不相同,不过一般都包括structenet_statistics这个结构,用于记录网络设备各种统计信息。因为这些统计信息即使在接口卸下(down)时也要保存。所以私有数据总是在设备初始化时,而不是在设备打开时分配内存空间的。
3、物理层相关数据
    以下这些数据是针对于网络接口使用的各种不同的物理层的,对于以太网设备一般可直接调用ether_setup函数自动完成填写,像tokenring、FDDI等其他接口一般也有类似函数完成这些域段的填写。
     unsigned shortmtu这个域段表示最大数据传输单元,对以太网而言,该域段为1500,不包括MAC帧的帧首和帧尾。
     unsigned shorttype这个域段表示接口的硬件类型,描述了与该网络接口绑在一起的媒介类型。Linux网络设备支持许多不同种类的媒介,如以太网、X.25、令牌环、SLIP、PPP、AppleLocaltalk等。ARP在判定接口支持哪种类型的物理地址时要用到该域段。若是以太网接口,则在ether_setup中将之设为ARPHRD_ETHER。
      Unsigned longtx_queue_len这个域段表示一个设备的传输队列能容纳的最大的帧数。对以太网,默认为100;而plip则为节省系统资源,仅设为10。
      unsigned shorthard_header_len这个域段表示在被传送的包中IP头和其他协议信息之前的字节数。对于以太网接口,该域段为14。
      unsigned char broadcast[MAX_ADDR_LEN];
      unsigned char dev_addr[MAX_ADDR_LEN];
      unsigned char addr_len;
      这几个域段提供数据链路层所需要的各种地址信息。
     struct dev_mc_list *mc_list;
     int mc_count;
     这两个域段表示在数据链路层提供多播协议要使用的一些信息。
4、网络层协议相关部分
     网路层协议包括8个不同的域段,下面分别讲它们的作用。
    下面这域段标识本设备支持的网络层协议地址簇。大部分为AF_INET(因特网IP协议)。
     unsigned short family,
    下面三个域段分别描述接口的网络层协议地址、协议广播地址和协议的网络掩码。若dev->family为AF_INET,则它们即为IP地址。这些域段可用ifconfig命令赋值。
     unsigned long pa_addr;
     unsigned long pa_brdaddr;
     unsigned long pa_mask;
    下面这个域段表示网络层协议地址的长度。对于IP协议(AF_INET)值为4。
     unsigned short pa_alen,
    下面这个域段表示点对点协议接口(如SLIP、PPP)用这个域记录连接另一边设备的IP值。
     unsigned long pa_dstaddr,
     下面域段用于多播协议(Muticast),网络层相关信息。
     struct ip_mc_list *ip_mc_list,
     下面的域段包含一系列开关值,开关值有的是描述设备属性,有的表示设备现在的状态。最常用的一个就是IFF_UP表示设备是否被激活。这些开关值都可以用ifconfig命令设置。
      unsigned short flags,
5、服务处理部分
       除了各种数据域段外,net_device还提供一系列函数指针,这些函数指针把统一的操作接口映射为实际的硬件操作函数。
继承事业,薪火相传
返回列表