第11章基于S3C2440的嵌入式Linux开发实例的ppt 孙戈著

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

第11章 Linux下网卡驱动及应用实例 章 下网卡驱动及应用实例
设计网络驱动程序时,最主要的工作就是完成设备驱动 功能层,使其满足我们所需的功能。在Linux中所有网络设备 都抽象为一个接口,这个接口提供了对所有网络设备的操作 集合。由数据结构struct device来表示网络设备在内核中的运 行情况,即网络设备接口。
第11章 Linux下网卡驱动及应用实例 章 下网卡驱动及应用实例
struct dev_mc_list *mc_list;/* Multicast mac addresses */ int mc_count; int promiscuity; int allmulti; int watchdog_timeo; struct timer_list watchdog_timer; /* Number of installed mcasts*/
unsigned short hard_header_len; /* hardware hdr length*/ void *priv; /* pointer to private data */
第11章 Linux下网卡驱动及应用实例 章 下网卡驱动及应用实例
struct net_device *master; /* Pointer to master device of a group,which this device is */ /* member of Interface address info. */ unsigned char broadcast[MAX_ADDR_LEN]; /* hw bcast add unsigned char dev_addr[MAX_ADDR_LEN]; /* hw address unsigned char addr_len; unsigned short dev_id; */ */ /* hardware address length /* for shared network cards */ */
第11章 Linux下网卡驱动及应用实例 章 下网卡驱动及应用实例
struct net_device_stats* (*get_stats)(struct net_device *dev); struct iw_statistics* *dev); struct iw_public_data * wireless_data; (*get_wireless_stats)(struct net_device
/* device I/O address*/ /* device IRQ number*/
第11章 Linux下网卡驱动及应用实例 章 下网卡驱动及应用实例
unsigned char if_port; unsigned char dma; unsigned long state; struct net_device *next; struct net_device *next_sched; /* Interface index. Unique device identifier */ int ifindex; int iflink; /* Selectable AUI, TP,..*/ /* DMA channel*/
第11章 Linux下网卡驱动及应用实例 章 下网卡驱动及应用实例
11.1 Linux网络设备的驱动基础 网络设备的驱动基础
Linux驱动分为字符设备、块设备和网络设备三种。硬盘 就是典型的块设备驱动。 在Linux中,字符设备和块设备都是通过文件系统节点被 访问的,块驱动程序除了向内核提供与字符驱动程序相同的 接口外,还提供了专门面向块驱动设备的接口。
第11章 Linux下网卡驱动及应用实例 章 下网卡驱动及应用实例
unsigned short flags; unsigned short gflags; unsigned short priv_flags; unsigned short padded; unsigned mtu; unsigned short type; /* interface MTU value*/ /* interface hardware type*/ /* interface flags (a la BSD) */
第11章 Linux下网卡驱动及应用实例 章 下网卡驱动及应用实例
struct Qdisc *qdisc; struct Qdisc *qdisc_sleeping; struct Qdisc *qdisc_ingress; struct list_head qdisc_list;
unsigned long tx_queue_len; /* Max frames per queue allowed */ /* ingress path synchronizer */ spinlock_t ingress_lock; /* hard_start_xmit synቤተ መጻሕፍቲ ባይዱhronizer */ spinlock_t xmit_lock;
第11章 Linux下网卡驱动及应用实例 章 下网卡驱动及应用实例
(4) 设备操作函数: 设备操作函数: int (*open)(struct net_device *dev):打开网络接口设备, 获得需要的I/O地址、IRQ、DMA等。 int (*stop)(struct net_device *dev):停止网络接口设备。
struct ethtool_ops *ethtool_ops; /* These may be needed for future network-power-down code. */ unsigned long trans_start; /* Time (in jiffies) of last Tx */ unsigned long last_rx; /* Time of last Rx */
第11章 Linux下网卡驱动及应用实例 章 下网卡驱动及应用实例
/* device name hash chain */ struct hlist_node name_hlist; /* device index hash chain */ struct hlist_node index_hlist; /* register/unregister state machine */ enum {
/* Protocol specific pointers */
第11章 Linux下网卡驱动及应用实例 章 下网卡驱动及应用实例
void *atalk_ptr; void *ip_ptr; void *dn_ptr; void *ip6_ptr; void *ec_ptr; void *ax25_ptr; struct list_headpoll_list; int quota; int weight; /* AppleTalk link */ /* IPv4 specific data*/ /* DECnet specific data */ /* IPv6 specific data */ /* Econet specific data /* AX.25 specific data */ /* Link to poll list */ */
(2) 硬件信息: 硬件信息: unsigned long mem_end/ unsigned long mem_start: mem_end 和mem_start:设备所使用的共享内存的起始和结 束地址。 unsigned long base_addr:网络设备的I/O基地址。 unsigned char irq:irq为设备使用的网络中断号。
第11章 Linux下网卡驱动及应用实例 章 下网卡驱动及应用实例
(5) 辅助成员: 辅助成员: unsigned long trans_start:最后数据包开始发送时的时间 戳。 unsigned long last_rx:数据包开始发送时的时间戳。 void *priv:为设备私有信息指针netdev_priv()获取该指 针。 spinlock_t xmit_lock:避免hard_start_xmit()函数同时多 次调用的自旋锁。 int xmit_lock_owner:拥有xmit_lock自旋锁的CPU编号。
第11章 Linux下网卡驱动及应用实例 章 下网卡驱动及应用实例
/* cpu id of processor entered to hard_start_xmit or -1,if nobody entered there. */ int xmit_lock_owner; /* device queue lock */ spinlock_t queue_lock; /* Number of references to this device */ atomic_t refcnt; /* delayed register/unregister */ struct list_head todo_list;
第11章 Linux下网卡驱动及应用实例 章 下网卡驱动及应用实例
(3) 接口信息: 接口信息: unsigned short hard_header_len:网络设备硬件头长度, 在以太网设备初始化函数中,该成员函数被赋值为 ETH_HLEN,即为14。 unsigned mtu:mtu最大传输单元,在包传输时,这个域 由网络层使用。以太网的mtu最大的位是1500个字节。 unsigned short type:指硬件类型,这个域被ARP用来判 断接口支持的硬件地址类型。以太网接口把它设为 ARPHRD_ETHER,eth_setup会自动设置。
第11章 Linux下网卡驱动及应用实例 章 下网卡驱动及应用实例
11.2 基于 基于Linux的网络设备驱动程序分析 的网络设备驱动程序分析
网络驱动系统体系结构如图11-1所示。
第11章 Linux下网卡驱动及应用实例 章 下网卡驱动及应用实例
图11-1 Linux网络驱动系统体系结构
第11章 Linux下网卡驱动及应用实例 章 下网卡驱动及应用实例 11.2.1 数据结构 数据结构struct net_device
第11章 Linux下网卡驱动及应用实例 章 下网卡驱动及应用实例
数据结构struct net_device的代码描述如下: struct net_device { char name[IFNAMSIZ]; unsigned long mem_end; unsigned long mem_start; unsigned long base_addr; unsigned int irq; /* shared mem end /* shared mem start */ */
网络设备接口层的主要功能是为网络设备定义了统一、 抽象的数据结构。 struct net_device主要数据域有全局信息、硬件信息、接 口信息、设备操作函数和辅助成员。 (1) 全局信息: 全局信息: char name[IFNAMESIZE]; name:网络设备的名称。
第11章 Linux下网卡驱动及应用实例 章 下网卡驱动及应用实例
第11章 Linux下网卡驱动及应用实例 章 下网卡驱动及应用实例
11.1 Linux网络设备的驱动基础 网络设备的驱动基础 11.2 基于 基于Linux的网络设备驱动程序分析 的网络设备驱动程序分析 11.3 基于 基于CS8900网络设备驱动设计实例 网络设备驱动设计实例 11.4 网络应用 11.5 Web服务器 服务器Boa移植实例 服务器 移植实例
第11章 Linux下网卡驱动及应用实例 章 下网卡驱动及应用实例
网络驱动程序同时必须支持大量的管理任务,网络驱动 程序的API反映了这种需求。此外,网络驱动程序与内核其 余部分每次进行交互处理的是一个网络数据包,因此,驱动 程序无需关心协议问题。 Linux网络驱动程序的体系结构可以划分为四层(见图111),从上到下分别为网络协议接口层、网络设备接口层、提 供实际功能的设备驱动功能层,以及网络设备和网络媒介层。
相关文档
最新文档