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

基于S3C2440的嵌入式Liux开发实例.ppt

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

  Linux驱动分为字符设备、块设备和网络设备三种。硬盘就是典型的块设备驱动。   在Linux中,字符设备和块设备都是通过文件系统节点被访问的,块驱动程序除了向内核提供与字符驱动程序相同的接口外,还提供了专门面向块驱动设备的接口。   网络驱动程序同时必须支持大量的管理任务,网络驱动程序的API反映了这种需求。此外,网络驱动程序与内核其余部分每次进行交互处理的是一个网络数据包,因此,驱动程序无需关心协议问题。   Linux网络驱动程序的体系结构可以划分为四层(见图11-1),从上到下分别为网络协议接口层、网络设备接口层、提供实际功能的设备驱动功能层,以及网络设备和网络媒介层。   设计网络驱动程序时,最主要的工作就是完成设备驱动功能层,使其满足我们所需的功能。在Linux中所有网络设备都抽象为一个接口,这个接口提供了对所有网络设备的操作集合。由数据结构struct device来表示网络设备在内核中的运行情况,即网络设备接口。 网络驱动系统体系结构如图11-1所示。 11.2.1 数据结构struct net_device   网络设备接口层的主要功能是为网络设备定义了统一、抽象的数据结构。   struct net_device主要数据域有全局信息、硬件信息、接口信息、设备操作函数和辅助成员。   (1) 全局信息:   char name[IFNAMESIZE];   name:网络设备的名称。 (2) 硬件信息: unsigned long mem_end/ unsigned long mem_start: mem_end 和mem_start:设备所使用的共享内存的起始和结束地址。 unsigned long base_addr:网络设备的I/O基地址。 unsigned char irq:irq为设备使用的网络中断号。   (3) 接口信息:   unsigned short hard_header_len:网络设备硬件头长度,在以太网设备初始化函数中,该成员函数被赋值为ETH_HLEN,即为14。   unsigned mtu:mtu最大传输单元,在包传输时,这个域由网络层使用。以太网的mtu最大的位是1500个字节。   unsigned short type:指硬件类型,这个域被ARP用来判断接口支持的硬件地址类型。以太网接口把它设为ARPHRD_ETHER,eth_setup会自动设置。   (4) 设备操作函数:   int (*open)(struct net_device *dev):打开网络接口设备,获得需要的I/O地址、IRQ、DMA等。   int (*stop)(struct net_device *dev):停止网络接口设备。   (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编号。 数据结构struct net_device的代码描述如下: struct net_device {  char name[IFNAMSIZ];  unsigned long mem_end; /* shared mem end */  unsigned long mem_start; /* shared mem start */  unsigned long base_addr; /* device I/O address*/  unsigned int irq; /* device IRQ number*/ unsigned char if_port; /* Selectable AUI, TP,..*/ unsigned char dma; /* DMA channel*/ unsigned long state; struct net_device *next; struct net_device *next_sched; /* Interface index. Unique device identifier */ int ifindex; int iflink; struct net_device_stats* (*get_stats)(struct net_device *dev); struct iw_statistics* (*get_wire

文档评论(0)

qiwqpu54 + 关注
实名认证
内容提供者

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

1亿VIP精品文档

相关文档