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

网络设备的关键数据结构是net_device,它不仅包含了网络接口所使用的中断、地址、实际函数等硬件信息,也包含相关的上层网络协议的内容,它是网络和内核的接口。Net_device适用于所有的网络接口,结构比较复杂。在此分四个方面对它进行介绍。
1、通用部分
    net_device的这些项内容用于管理网络设备不和具体协议相关。
    char *name:设备的名字,例如eth0,如果不指定,在设备登记时    register_netdev()函数将会自动指定一个;
    struct device *next:指向下一个网络设备,用于维护整个网络设备链表;
    struct module *owner:在模块加载时指向模块的所有者;
    int ifindex:提供快速查找网络设备的索引;
    unsigned long state:包含网络设备的状态信息。
2、硬件相关部分
      标识设备使用的共享内存的首地址及尾地址,包括如下域段:
      unsigned long rmem_end;
      unsigned long rmem_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 char if_port:记录哪个硬件I/O端口正在被接口所用,如BNC,AUI;
      unsigned char dma:设备用的DMA通道;
      void *priv:是指向私有数据的指针。
      私有数据是个很重要的结构,硬件不同这个结构内部的定义也不相同,不过一般都包括struct enet_statistics这个结构,用于记录网络设备各种统计信息。因为这些统计信息即使在接口卸下(down)时也要保存。所以私有数据总是在设备初始化时,而不是在设备打开时分配内存空间的。
3、物理层相关数据
      以下这些数据是针对于网络接口使用的各种不同的物理层的,对于以太网设备一般可直接调用ether_setup函数自动完成填写,像token ring、FDDI等其他接口一般也有类似函数完成这些域段的填写。
      unsigned short mtu这个域段表示最大数据传输单元,对以太网而言,该域段为1500,不包括MAC帧的帧首和帧尾。
      unsigned short type这个域段表示接口的硬件类型,描述了与该网络接口绑在一起的媒介类型。Linux网络设备支持许多不同种类的媒介,如以太网、X.25、令牌环、SLIP、PPP、Apple Localtalk等。ARP在判定接口支持哪种类型的物理地址时要用到该域段。若是以太网接口,则在ether_setup中将之设为ARPHRD_ETHER。
       Unsigned long tx_queue_len这个域段表示一个设备的传输队列能容纳的最大的帧数。对以太网,默认为100;而plip则为节省系统资源,仅设为10。
       unsigned short hard_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还提供一系列函数指针,这些函数指针把统一的操作接口映射为实际的硬件操作函数。

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

  1. 网络上所谓的《ARM嵌入式系统入门最好的文章》

    一 首先说说ARM的发展 可以用一片大好来形容,翻开各个公司的网站,招聘里面嵌入式占据了大半工程师职位. 广义的嵌入式无非几种:传统的什么51.AVR.PIC称做嵌入式微控制器:ARM是嵌入式微处理器 ...

  2. 嵌入式系统在物联网中的应用及架构

    如果说其他技术涉及到的是物联网的某个特定方向,如感知.计算.通信等.嵌入式系统则是物联网中各种物品的表现形式. 首先要谈一下关于架构 在接触嵌入式之后,就出现了一系列的XX架构之类的狼虎之词,什么物联 ...

  3. 嵌套在计算机中应用,嵌入式系统在计算机中的应用.ppt

    嵌入式系统在计算机中的应用 异步存储器的连接 23 (8–15) (0–7) 16 DATA DATA 'C5000 ADDRESS IOSTRB MSTRB R/W DS A A A CS OE C ...

  4. linux系统网络驱动简介

    网络设备驱动简介 网络设备驱动是linux内核中三大类设备驱动之一,它用来完成高层网络协议的底层数据传输及设备控制. 网络设备与其他两种设备的区别: 网络接口不存在于linux的文件系统中,及/dev ...

  5. ARM嵌入式系统malloc的实现(C源码)

    在ARM嵌入式系统实现malloc内存分配机制. 在ARM cpu上验证通过. ps:也可在pc ubuntu linux进行验证 #include "include/lib_replace ...

  6. 8、ARM嵌入式系统:UART初始化

    一.UART概述 百度上UART的定义:通用异步收发传输器(Universal Asynchronous Receiver/Transmitter),通常称作UART.它将要传输的资料在串行通信与并行 ...

  7. 7、ARM嵌入式系统:LCD/数码管/OLED初始化

    一.LCD/数码管模块在板子上的位置 LCD和数码管在板子上都分别有一个插槽. 二.LCD/数码管初始化代码 //SMG init void SMG_Init() { /* PORTB and POR ...

  8. [ARM嵌入式系统开发]第一章之嵌入式系统的软硬件

    本章的最后,通过描述ARM为核心的嵌入式系统,来介绍了嵌入式系统的软件和硬件构成和结构.这里根据这部分的介绍以及其他的文章,描述下通用的嵌入式系统的软件和硬件.     首先来说下硬件,书中说,包含有 ...

  9. 嵌入式系统和物联网中的软件安全

    文章目录 您需要了解的嵌入式系统软件的功能安全与信息安全 为什么C与C++对于嵌入式系统软件的功能安全及信息安全很重要 为什么静态分析对于嵌入式系统软件的功能安全及信息安全很重要 为什么编码标准对于嵌 ...

  10. win10 系统网络驱动出现黄色感叹号

    1.问题描述 win10的系统,今天电脑提示更新,更新完开机以后,电脑无线网卡和有线网卡全部无法使用,我查看网络驱动无线网卡和有线网卡的驱动左下角都显示有一个黄色的感叹号.在图上划红色框的位置. 当时 ...

最新文章

  1. 顺便发现一bug??
  2. vs2005's addin folder
  3. rdf mysql持久化l_Jena 利用数据库保存,持久化本体
  4. Oracle【IT实验室】数据库备份与恢复之二:SQL*Loader
  5. @SpringBootApplication揭秘
  6. linux 磁盘监控,9个在Linux中监视Linux磁盘分区和用法的工具
  7. caj文件浏览器_史上最全:提高律师工作效率必不可少的27款浏览器插件
  8. python中home定义是什么_关于python中的module你需要了解的
  9. Java基础——常用对象API(2):StringBuffer类
  10. 2019年VQA论文整理
  11. 这四款好用的前端开发工具,不要错过!
  12. 学习方法分享:为何一年半就能拿到大厂 offer
  13. 去掉word中页眉上方的一条线
  14. win远程桌面连接服务器,远程桌面连接windows服务器
  15. Temporal Action Detection with Multi-level Supervision UFA论文阅读笔记
  16. FusionAccess模板制作并发放
  17. Rust FFI 编程 - FFI 概述
  18. HTTP状态码(2xx,3xx,4xx,5xx)
  19. 罐装红酒的开拓者——智利菲尔帝进军中国市场
  20. 华为2016年精英挑战赛总结

热门文章

  1. python coroutine测试
  2. 51nod1437 迈克步
  3. cocos2d-x学习记录3——CCTouch触摸响应
  4. Sparse Principal Component Analysis
  5. 开启Spark history server
  6. 求助:为什么我用360浏览器和UC浏览器打不开JAVA中的index.html文件? 一打开就显示浏览器首界页...
  7. py2exe使用方法
  8. tfs 解除锁定命令
  9. CentOS设置时间
  10. 如何查看mongo集合的数据类型