网站大量收购独家精品文档,联系QQ:2885784924

嵌入式linux系统万高级开发工程师-04.ppt

嵌入式linux系统万高级开发工程师-04.ppt

  1. 1、本文档共35页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
嵌入式linux系统万高级开发工程师-04

嵌入式Linux系统高级开发讲义 第四天 日程 嵌入式Linux网络子系统分析 嵌入式Linux网卡驱动编写实例 日程安排 嵌入式Linux网络子系统分析 ISO/OSI七层协议模型 TCP/IP协议族 TCP(Transmission Control Protocol) 传输控制协议,基于连接的服务 UDP(User Datagram Protocol) 用户数据报协议,无连接的服务 IP(Internet Protocol) Internet协议,信息传递机制 OSI模型与TCP/IP协议的对比 消息包的逐层递增 Linux网络协议栈分层 系统调用接口层 协议无关的接口层,就是SOCKET层。 (屏蔽底层的不同协议,以便与系统调用层之间的接口可以简单,统一) 网络协议实现层(IP,ICMP,ARP,RARP,TCP,UDP等 ) 与具体设备无关的驱动接口层 驱动程序层 日程安排 嵌入式Linux网卡驱动编写 网络设备驱动程序简介 device数据结构 sk_buff数据结构 内核的驱动程序接口 以太网控制器 sk_buff结构 一个sk_buff代表着一个网络报文。既包含报文的数据,也包含报文的控制信息。 struct sk_buff { struct net_device *dev; //接收和发送sk_buff的设备 union {} h; //h,nh,mac等指向sk_buff中各层报文头 unsigned char *head,*data,*tail,*end; //head和tail指向已分配空间的开头和结尾,data和tail分别是有效数据的开头与结尾。 …… } sk_buff分配与释放 分配: struct sk_buff *alloc_skb(unsigned int size,int gfp_mask) 克隆: struct sk_buff *skb_clone(struct sk_buff *skb, int gfp_mask) 释放: void kfree_skb(struct sk_buff *skb) sk_buff的操作函数 在sk_buff缓冲区的尾部添加数据。 unsigned char *skb_put(struct sk_buff *skb, unsigned int len) 在sk_buff缓冲区的头部添加数据。 unsigned char * skb_push(struct sk_buff *skb, unsigned int len) 在填充sk_buff缓冲区前保留报文头空间。 void skb_reserve(struct sk_buff *skb, unsigned int len) 从数据包头中删除数据。如剥离报文硬件头部。 unsigned char *skb_pull(struct sk_buff *skb,int len) 编写网络驱动程序 发送和接收 这是一个网络设备最基本的功能 如一块网卡所做的无非就是收发工作。所以驱动程序里要告诉系统发送函数在哪里,系统在有数据要发送时就会调用发送程序。 驱动程序由于是直接操纵硬件的,所以网络硬件有数据收到,最先能得到这个数据的也就是驱动程序,它负责把这些原始数据进行必要的处理,然后送给系统。 这里,操作系统必须要提供两个机制: 找到驱动程序的发送函数 驱动程序把收到的数据送给系统 net_device结构成员 一个net_device ,表示一个网络设备。 struct net_device{ char name[IFNAMSIZE]; //设备名称 ulong base_addr; //网络接口的I/O基地址 uchar irq; //中断号 ushort hard_header_len;//硬件头的长度(14) char addr_len; //MAC地址长度 char dev_addr[] //设备的硬件MAC地址 ushort flags; //接口标志。可以设置网络设备为混杂模式,组播模式,回环设备,UP状态标志,不执行ARP等等。 网络设备的各种操作方法 …… } net_device常用方法成员 初始化 : int (*init) (struct net_device *dev) 打开接口:int (*open) (struct net_device*); 停

文档评论(0)

180****5152 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档