嵌入式Linux系统高级开发工程师课件.ppt
- 【下载声明】
1. 本站全部试题类文档,若标题没写含答案,则无答案;标题注明含答案的文档,主观题也可能无答案。请谨慎下单,一旦售出,不予退换。
2. 本站全部PPT文档均不含视频和音频,PPT中出现的音频或视频标识(或文字)仅表示流程,实际无音频或视频文件。请谨慎下单,一旦售出,不予退换。
3. 本页资料《嵌入式Linux系统高级开发工程师课件.ppt》由用户(晟晟文业)主动上传,其收益全归该用户。163文库仅提供信息存储空间,仅对该用户上传内容的表现方式做保护处理,对上传内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(点击联系客服),我们立即给予删除!
4. 请根据预览情况,自愿下载本文。本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
5. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007及以上版本和PDF阅读器,压缩文件请下载最新的WinRAR软件解压。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 嵌入式 Linux 系统 高级 开发 工程师 课件
- 资源描述:
-
1、嵌入式嵌入式Linux系统高级开发讲义系统高级开发讲义 第四天 日程l嵌入式Linux网络子系统分析 l嵌入式Linux网卡驱动编写实例 日程安排l嵌入式嵌入式Linux网络子系统分析网络子系统分析ISO/OSI七层协议模型TCP/IP协议族lTCP(Transmission Control Protocol)传输控制协议,基于连接的服务lUDP(User Datagram Protocol)用户数据报协议,无连接的服务lIP(Internet Protocol)Internet协议,信息传递机制OSI模型与TCP/IP协议的对比TCP或UDPIP和路由网卡驱动TelnetFTPWWW等消息包
2、的逐层递增Linux网络协议栈分层l系统调用接口层l协议无关的接口层,就是SOCKET层。(屏蔽底层的不同协议,以便与系统调用层之间的接口可以简单,统一)l网络协议实现层(IP,ICMP,ARP,RARP,TCP,UDP等)l与具体设备无关的驱动接口层l驱动程序层日程安排l嵌入式嵌入式Linux网卡驱动编写网卡驱动编写l网络设备驱动程序简介ldevice数据结构lsk_buff数据结构l内核的驱动程序接口l以太网控制器sk_buff结构l一个sk_buff代表着一个网络报文。既包含报文的数据,也包含报文的控制信息。lstruct sk_buff struct net_device*dev;/接
3、收和发送sk_buff的设备 union h;/h,nh,mac等指向sk_buff中各层报文头 unsigned char*head,*data,*tail,*end;/head和tail指向已分配空间的开头和结尾,data和tail分别是有效数据的开头与结尾。lsk_buff分配与释放l分配:struct sk_buff*alloc_skb(unsigned int size,int gfp_mask)l克隆:struct sk_buff*skb_clone(struct sk_buff*skb,int gfp_mask)l释放:void kfree_skb(struct sk_buff*
4、skb)sk_buff的操作函数l在sk_buff缓冲区的尾部添加数据。unsigned char*skb_put(struct sk_buff*skb,unsigned int len)l在sk_buff缓冲区的头部添加数据。unsigned char*skb_push(struct sk_buff*skb,unsigned int len)l在填充sk_buff缓冲区前保留报文头空间。void skb_reserve(struct sk_buff*skb,unsigned int len)l从数据包头中删除数据。如剥离报文硬件头部。unsigned char*skb_pull(struct
5、 sk_buff*skb,int len)编写网络驱动程序发送和接收发送和接收 这是一个网络设备最基本的功能l如一块网卡所做的无非就是收发工作。所以驱动程序里要告诉系统发送函数在哪里,系统在有数据要发送时就会调用发送程序。l驱动程序由于是直接操纵硬件的,所以网络硬件有数据收到,最先能得到这个数据的也就是驱动程序,它负责把这些原始数据进行必要的处理,然后送给系统。l这里,操作系统必须要提供两个机制:找到驱动程序的发送函数驱动程序把收到的数据送给系统net_device结构成员l一个net_device,表示一个网络设备。lstruct net_devicechar nameIFNAMSIZE;/
6、设备名称 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常用方法成员l初始化:int(*init)(struct net_device*dev)l打开接口:int(*open)(struct net_device*);l停止接口:
7、int(*stop)(struct net_device*);l 数据发送:int(*hard_start_xmit)(struct sk_buff*skb,struct net_device*);l建立硬件头:int(*hard_header)(.)l获取统计信息:网络设备驱动注册l分配net_device:struct net_device*alloc_netdevalloc_netdev(int sizeof_priv,char*name,void(*setup)(struct net_device*);lnet_device初始化给net_device结构的成员赋值l注册net_dev
8、ice:register_netdev(struct net_device*)网络驱动程序的网络驱动程序的-初始化(初始化(initinit)l驱动程序必须有一个初始化方法l在把驱动程序载入系统的时候会调用这个初始化程序。它做以下几方面的工作:检测设备检测设备:在初始化程序里你可以根据硬件的特征检查硬件是否存在,然后决定是否启动这个驱动程序。配置和初始化硬件配置和初始化硬件:在初始化程序里可以完成对硬件资源的配置,比如即插即用的硬件就可以在这个时候进行配置(Linux内核对PnP功能没有很好的支持,可以在驱动程序里完成这个功能)。配置或协商好硬件占用的资源以后,就可以向系统申请这些资源。有些资
9、源是可以和别的设备共享的,如中断。有些是不能共享的,如IO、DMA。初始化初始化devicedevice结构中的变量结构中的变量让硬件正式开始工作让硬件正式开始工作 网络驱动程序网络驱动程序打开打开打开打开(open)(open)open这个方法在网络设备驱动程序里是在网络设备被激活的时候被调用(即设备状态由down-up)l实际上很多在initialize中的工作可以放到这里来做。比如资源的申请、硬件的激活。l如果dev-open返回非0(error),则硬件的状态还是down lopen方法另一个作用是如果驱动程序做为一个模块被装入,则要防止模块卸载时设备处于打开状态。l使能队列netif
10、_start_queue(dev);网络驱动程序网络驱动程序关闭关闭关闭关闭(stop)(stop)close方法做和open相反的工作。可以释放某些资源以减少系统负担。lclose是在设备状态由up转为down时被调用的lclose方法必须返回成功(0=success)l禁止队列netif_stop_queue(dev);网络驱动程序网络驱动程序发送发送发送发送(hard_start_xmit)(hard_start_xmit)所有的网络设备驱动程序都必须有这个发送方法。l在系统调用驱动程序的xmit时,发送的数据放在一个sk_buff结构中。l一般的驱动程序把数据传给硬件发出去。也有一些特
展开阅读全文