嵌入式系统的以太网接口设计及linux内核网络设备驱动

上传人:jin****ng 文档编号:64273063 上传时间:2022-03-21 格式:DOC 页数:13 大小:237KB
收藏 版权申诉 举报 下载
嵌入式系统的以太网接口设计及linux内核网络设备驱动_第1页
第1页 / 共13页
嵌入式系统的以太网接口设计及linux内核网络设备驱动_第2页
第2页 / 共13页
嵌入式系统的以太网接口设计及linux内核网络设备驱动_第3页
第3页 / 共13页
资源描述:

《嵌入式系统的以太网接口设计及linux内核网络设备驱动》由会员分享,可在线阅读,更多相关《嵌入式系统的以太网接口设计及linux内核网络设备驱动(13页珍藏版)》请在装配图网上搜索。

1、嵌入式系统的以太网接口设计及linux驱动1以太网概述以太网(Ethernet)是当今局域网采用的最通用的通信协议标准。在以太网 中,所有计算机被连接在一条电缆上,采用带冲突检测的载波侦听多路访问 (CSMA/CD方法,采用竞争机制和总线拓扑结构。基本上,以太网由共享传输媒 体,如双绞线电缆或同轴电缆、多端口集线器、网桥或交换机构成。按照 OSI(Open System Interconnection Referenee Model ,开放式系统互 联参考模型)7层参考模型,以太网定义的是物理层(PHY)和数据链路层(对应以 太网的MACg)的标准。2嵌入式处理器上扩展以太网接口以太网接口控制

2、器主要包括 MAC乘PHYS部分,如图1所示为嵌入式处理器 集成MAC!控制器。MACg控制器和PHY的连接是通过 Mil、RMII等接口实现的。在IEEE802的 标准系列中,数据链路层包括LLC和MACS个子层。其中MAC负责完成数据帧的 圭寸装、解圭寸、发送和接受功能。PHY层的结构随着传输速率的不同而有一定的差 异。对于lOBaseT等网络,从以太网PHY芯片输出的就是传输所需的差分信号。 但是还需要一个网络隔离变压器组成图2的结构。网络隔离变压器可起到抑制共 模干扰、隔离线路以及阻抗匹配等作用。本文介绍一种新款网络接口芯片 DM9000A它可以很方便的实现与嵌入式 CPU勺接口,实现

3、扩展以太网口的功能。DM9000A!中国台湾DAVICOI公司推出的一款高速以太网接口芯片,其基本特征是:集成10/100M物理层接口;内部带 有16K字节SRAMS作接收发送的FIFO缓存;支持8/16bit两种主机工作模式: 通过HP认证的AUTO-Mdix支持直接互连自动翻转)功能;支持TCP/IP加速,减 轻CPU负担,提高整机效能;10ns I/O读写时间。DM9000A以太网控制器遵循 IEEE颁布的802.3以太网传输协议。该电路还集成了 EEPRO接口,自举时通过 EEPRO接口输入到芯片中,从而实现自动初始化。芯片和处理器的连接原理图就不列图表示了, 处理器这里选择 AT91

4、RM920,0DM9000AT处理器连接时要注意:总线宽度读/写等待周期、时序匹配问题 CS8900A芯片复位后,在总线上的默认地址如何配置与保存默认的中断号及中断触发模式问题 (上升沿,还是下降沿;低电平,还是 高电平触发)系统上电时,AT91RM920通过总线配置DM9000A内部网络控制寄存器(NCR)、 中断寄存器(ISR)等,完成DM9000A勺初始化。随后,DM9000A进入数据收发等 待状态。当AT91RM920向以太网发送数据时,先将数据打包成UDP或 IP数据包, 并通过16 bit总线发送到DM9000A勺数据发送缓存中,然后将数据长度等信息 填充到DM9000A勺相应寄存

5、器内,使能发送。当DM9000A!收到外部网络送来的 以太网数据时,首先检测数据帧的合法性,如果帧头标志有误或存在CRC校验错 误,则将该帧数据丢弃。否则将数据帧缓存到内部RAM并通过中断标志位通知AT91RM9200由AT91RM920对DM9000A!收到的数据进行处理。3 linux 网络驱动程序3.1 Linux 网络驱动程序体系结构Linux的网络系统主要是基于 BSD UNIX勺套接字(socket)机制。在系统和 驱动程序之间定义有专门的数据结构 (sk_buff) 进行数据传输。系统支持对发送 数据缓存,提供流量控制机制,提供对多协议的支持。 Linux 网络驱动程序的体 系结

6、构可划分为图2所示的4个层次.Linux内核中提供了网络设备接口及以上 层次的代码,所以移植(或编写 )特定网络硬件的驱动程序最主要的工作就是完成 设备驱动功能层,主要是包括数据的接收,发送等控制。dev qitcuc xmiH)initdli/c cpcn、ck)!ic- bard_xmi resources-別血 等方法网络设毎接口层发送敷据包到硕件 hard. $tart 5m rt()中虧处理 从饋件摟收数据包设备食动功能层备媒弁圏2 Linux网堵设务张功程序的定探Linux中所有的网络设备都抽象为一个接口,有结构体struct net_device来表示网络设备在内核中的运行情况,

7、即网络设备接口,此结构体位于网络驱动层的核心地位。net_device中有很多供系访问和协议层调用的设备方法。网络 驱动就是要实现这些具体的设备方法。3.2网络设备的初始化由结构体net_device中的init函数指针所指向的初始化函数来完成。网络 的初始化是设备工作的第一步。当系统加载网络驱动模块的时候,就会调用初始 化过程。首先利用函数:request_mem_region映射DM9000A勺数据、地址端口, 通过dmfe_probe函数检测网络物理设备是否存在,检测 DM9000/内部串行NIC 的值是否正确,然后再对设备进行资源配置,构造设备的net_device数据结构。 包括一些

8、低层硬件信息:base_addr(网络接口的I/O基地址),irq(安排的中断3.3打开设备和关闭设备open方法在网络设备被激活的时被调用,具体DM9000A勺硬件初始化工作放到这里来做。对于DMOO0需要完成的初始化包括:对DM9000A内部上电,软 件复位,通过NCR寄存器设置网络工作模式,可以选择设置内部或者外部PHY全双工或者半双工模式、使能唤醒事件等网络操作,对RX/TX中断使能,使能数 据接收功能。调用request_jrq()申请中断号登记中断处理函数,调用n etif_carrier_o n侦测连接状态。启动定时器,调用 n etif_start_queue激活设备发送队列。

9、这里对DM9000A勺中断设计做了一个特殊处理:通常 AT91RM920提供最多32 个中断源,默认提供 7个外部中断源,但对于较复杂的嵌入式系统,可能会 面临中断源不够用的情况。由于 AT9IRM92O0勺PIO可以实现功能复用,因此可 以把多余的IO引脚配置为可用的中断源。故本系统中,设计DM9000冲断源与AT91RM920外部I/O 口 PD8引脚相连。一个PIO端口的32个引脚共享一个中断 I D ,只需要在中断状态寄存器中区分具体哪个引脚引起中断,然后转向特定的中断处理函数执行操作,就可以实现中断处理。close所做的工作和open相反,主要释放 open 获得的资源,以减少系统负

10、担。3.4 数据包发送数据包的发送和接收是实现 Linux 网络驱动程序中两个最关键的过程, 对这 两个过程处理的好坏将直接影响到驱动程序的整体运行质量。数据传输通过 hard_start_xmit 函数实现,首先把存放在套接字缓冲区中的 数据发送到网络芯片DM9000A内部的TX FIFO SRAM中,该缓冲区是由数据结 构sk buff表示,把要传送的数据长度写入 DM9000A中的传输包长度寄存器 TXPLL和 TXPLH中。然后使能传输。如果数据发送成功,贝U会触发一次中断。实 际中会出现多个数据帧传输, 需要考虑做并发处理。 在发送时检测传输队例暂时 满载时就要通过 netif_st

11、op_queue 来暂停,当发送完成触发中断处理时,调用 netif_wake_queue 函数来重新启动传输队例。网络传输由于系统忙或硬件的问 题发生延迟,贝会调用传送超时处理函数 tx_timeout ,对硬件复位操作。3.5 数据包接收数据包的接收是通过中断处理, 当有数据到达时, 就产生中断信号, 网络设 备驱动功能层就调用数据包接收程序来处理数据包的接收, 然后网络协议接口层 调用 netif_rx 函数把接收到的数据包传输到网络协议的上层进行处理。DM9000A接收缓存区中的每帧数据由4字节长的首部、有效数据和CRC校验 序列构成。首部4字节依次是01H以太网帧状态、以太网帧长度低

12、字节和长度 高字节,数据包接收程序首先检测如果第一个字节是01H,则说明有数据;如果是00H,则说明无数据,需要进行复位。然后调用函数dev_alloc_skb申请一块sK_buff结构缓冲区,从DM9000触出数据放置到缓冲区里,根据获取的长度信 息,判断是否读完一帧。如果读完,接着读下一帧,直到遇到首字节是00H的帧, 说明接收数据已读完。接下来填充 sK_buff 中的一些信息,使之成为规范的 sk_buff 结构,最后调用 netif_rx() 函数将接收到的数据传输到网络协议的上最后,可通过两种方法加载网络设备驱动程序:系统内核加载和模块加载。4 网络的应用及测试通过读取 procn

13、et 中的信息得到当前系统中的网络设备,通过它来测 试:#cat / proc / net /devLinux网络配置可在应用程序中通过ifconfig 和router两个命令实现,它 们都可以在busybox软件包中找到。可用以下命令来配置ip、网关、子网掩码 和域名解析服务器:# .0#最后,通过Ping命令,来测试一下和主机的通信是否联通。在本系统中通 过。在嵌入式应用程序开发及调试中,NFS起着非常重要的应用。不但可以通过 NFS文件系统共享远程硬盘的文件, 我们还可以mount远程文件系统直接作为嵌 入式的根文件系统。5结论本文完成了 Linux下扩展以太网接口及测试网络接口的研究,

14、 采用了以太网 芯片DM9000围绕太分析了嵌入式Linux 网络的基本原理。最后我的嵌入式设 备顺利连上网络。同时本文为移植 2.6内核的网络部分提供了移植方法。浅谈Linux内核开发之网络设备驱动赵 昊翔,软件工程师,Cisco Systems简介:本文介绍了网络设备的基本概念,并从Linux内核的角度出发,介绍了网络设备驱动的开发方法和开发中的注意事项。网络设备介绍网络设备是计算机体系结构中必不可少的一部分,处理器如果想与外界通信,通常都会选择网络设备作为通信接口。众所周知,在OSI ( Open Systems Interconnection,开放网际互连)中,网络被划分为七个层次,从

15、下到上分别是物理层、数据链路层、网络层、传输层、会话层、表示层和应用层。我们所讲的网络设备也包括两个层次,一层叫做MAC( Media Access Control )层,对应于 OSI的数据链路层;另一层叫做 PHY( Physical Layer )层,对应于物理层。常用的网络设备有很多,比如PPC85XX 的 TSEC、AMCC 440GX 的 EMAC、INTEL 的82559 等,它们的工作原理基本相同。DMA介绍网络设备的核心处理模块是一个被称作DMA( Direct Memory Access )的控制器,DMA模块能够协助处理器处理数据收发。对于数据发送来说,它能够将组织好的数

16、据自动发岀,无需处理器干预;对于数据接 收来说,它能够将收到的数据以一定的格式组织起来,通知处理器,并等待处理器来取。DMA模块收发数据的单元被称为BD (Buffer Description ,缓存描述符),每个包都会被分成若干个帧,而每个帧则被保存在一个BD中。BD结构通常包含有以下字段:typedef struct void *bufptr; /*保存当前BD对应缓存的起始地址*/int length; /*保存缓存中存储的数据包长度*/int sc;/*保存当前BD的状态信息*/ BD_STRUCT;所有的BD就组成了一张 BD表,如图1所示,一般来说发送方向和接收方向的BD表是各自独

17、立的。图1. BD表结构数据发送流程网络设备通过 DMA进行数据发送的流程如 图2所示。图2.数据发送流程图中各步骤的具体含义描述如下:(1) 协议层通知处理器开始发送数据;BD的(2 )处理器从BD表中取岀一个 BD,将需要发送的数据拷贝至当前BD对应的缓存内,并设置好状态;(3 )处理器通知网络设备开始发送数据;(4) MAC模块通知DMA单元开始发送数据;(5) DMA 模块操作 BD 表,取出当前有效 BD ;(6) DMA模块将当前BD对应缓存内的数据发送至 MAC模块;(7) MAC模块将这些数据发送到网络中;(8 )网络设备通知处理器数据发送完毕;(9)处理器通知协议层发送下面一

18、帧数据。其中步骤(4) ( 8)是硬件自动完成的,不需要软件的干预,如此可以节省处理器的工作量。数据接收流程网络设备通过 DMA进行数据接收的流程如图3所示。图3.数据接收流程图中各步骤的具体含义描述如下:(1 )处理器初始化 BD表;(2)处理器初始化网络设备;(3)MAC模块从网络中接收数据;(4)MAC模块通知 DMA模块来取数据;(5)DMA模块从 BD表中取出合适的 BD ;(6) MAC模块将数据发送至当前BD对应的缓存内;(7)网络设备通知处理器开始接收数据(以中断方式或轮询方式);(8 )协议层从当前的 BD缓存内取走数据。其中步骤(3)( 6)是硬件自动完成的,不需要软件的干

19、预,如此可以节省处理器的工作量。回页首Lin ux网络设备驱动模型数据结构数据结构Linux内核中对网络设备进行描述的核心结构类型叫做net_device ,net_device 结构定义在include/linux/netdevice.h文件中。该结构的字段可以分为以下几类。全局信息该类中包含了设备名(name字段)、设备状态(state字段)、设备初始化函数(init字段)等。硬件信息该类中包含了设备内存使用情况(mem_end和mem_start字段)、中断号(irq字段)、10基地址(base_addr 字段)等。接口信息该类中包含了 MAC地址(dev_addr字段)、设备属性(fl

20、ag字段)、最大传输单元(mtu字段)等。 设备接口函数该类中包含了当前设备所提供的所有接口函数,比如设备打开函数(open字段),该函数负责打开设备接口,当用户使用ifconfig命令配置网络时,该函数默认被调用;设备停止函数( stop字段),该函数负责关闭设备接口;数据发送函数(hard_start_xmit字段),当用户调用 socket开始写数据时,该函数被 调用,并负责往网络设备中发送数据。函数接口设备初始化函数网络设备驱动在 Linux内核中是以内核模块的形式存在的,对应于模块的初始化,需要提供一个初始化函数来初始化网络设备的硬件寄存器、配置DMA以及初始化相关内核变量等。设备初

21、始化函数在内核模块被加载时调用,它的函数形式如下:static int _init xx_init (void) module_init(xx_init); /这句话表明模块加载时自动调用xx_init 函数设备初始化函数主要完成以下功能:1. 硬件初始化因为网络设备主要分为PHY、MAC和DMA三个硬件模块,开发者需要分别对这三个模块进行初始化。1. 初始化PHY模块,包括设置双工/半双工运行模式、设备运行速率和自协商模式等。2. 初始化MAC模块,包括设置设备接口模式等。3. 初始化DMA模块,包括建立BD表、设置BD属性以及给 BD分配缓存等。2. 内核变量初始化初始化并注册内核设备。内

22、核设备是属性为net_device的一个变量,开发者需要申请该变量对应的空间(通过alloc_netdev函数)、设置变量参数、挂接接口函数以及注册设备(通过register_netdev 函数) 常用的挂接接口函数如下:net_device *dev_p;dev_p-open= xx_open; /设备打开函数dev_p-stop= xx_stop; /设备停止函数dev_p-hard_start_xmit = xx_tx; /数据发送函数dev_p-do_ioctl= xx_ioctl; /其它的控制函数数据收发函数数据的接收和发送是网络设备驱动最重要的部分,对于用户来说,他们无需了解当前

23、系统使用了什么网络 设备、网络设备收发如何进行等,所有的这些细节对于用户都是屏蔽的。Linux使用socket做为连接用户和网络设备的一个桥梁。用户可以通过 read / write 等函数操作socket,然后通过socket与具体的网 络设备进行交互,从而进行实际的数据收发工作。Linux提供了一个被称为 sk_buff的数据接口类型,用户传给 socket的数据首先会保存在sk_buff对应的缓冲区中,sk_buff的结构定义在include/linux/skbuff.h文件中。它保存数据包的结构示意图如下所示。图4. sk buff数据结构图Jft 1. 数据发送流程当用户调用sock

24、et开始发送数据时,数据被储存到了sk_buff类型的缓存中,网络设备的发送函数(设备初始化函数中注册的hard_start_xmit )也随之被调用,流程图如下所示。图5.数据发送流程图a. 用户首先创建一个socket,然后调用write之类的写函数通过socket访问网络设备,同时将数据保存在sk_buff类型的缓冲区中。b. socket接口调用网络设备发送函数( hard_start_xmit ), hard_start_xmit已经在初始化过程中被挂接成类似于xx_tx的具体的发送函数,xx_tx主要实现如下步骤。1. 从发送BD表中取出一个空闲的BD。2. 根据sk_buff中保

25、存的数据修改BD的属性,一个是数据长度,另一个是数据包缓存指针。值得注意的是,数据包缓存指针对应的必须是物理地址,这是因为DMA在获取BD中对应的数据时只能识别储存该数据缓存的物理地址。bd_p-length = skb_p-len;bd_p-bufptr = virt_to_phys(skb_p-data);3. 修改该BD的状态为就绪态,DMA模块将自动发送处于就绪态BD中所对应的数据。4. 移动发送BD表的指针指向下一个 BD。c. DMA模块开始将处于就绪态 BD缓存内的数据发送至网络中,当发送完成后自动恢复 该BD为空闲态。2. 数据接收流程当网络设备接收到数据时,DMA模块会自动将

26、数据保存起来并通知处理器来取,处理器通过中断或者轮询方式发现有数据接收进来后,再将数据保存到sk_buff缓冲区中,并通过 socket接口读出来。流程图如下所示。图6.数据接收流程图旳瑕ma. 网络设备接收到数据后,DMA模块搜索接收 BD表,取出空闲的 BD,并将数据自动 保存到该BD的缓存中,修改 BD为就绪态,并同时触发中断(该步骤可选)。b. 处理器可以通过中断或者轮询的方式检查接收BD表的状态,无论采用哪种方式,它们都需要实现以下步骤。1. 从接收BD表中取出一个空闲的BD。2. 如果当前BD为就绪态,检查当前 BD的数据状态,更新数据接收统计。3. 从BD中取出数据保存在 sk_

27、buff的缓冲区中。4. 更新BD的状态为空闲态。5. 移动接收BD表的指针指向下一个BD。c. 用户调用read之类的读函数,从 sk_buff缓冲区中读出数据,同时释放该缓冲区。中断和轮询Linux内核在接收数据时有两种方式可供选择,一种是中断方式,另外一种是轮询方式。中断方式如果选择中断方式,首先在使用该驱动之前,需要将该中断对应的中断类型号和中断处理程序注册进去。网络设备驱动在初始化时会将具体的xx_open函数挂接在驱动的 open接口上,xx_open函数挂接中断的步骤如下。request_irq(rx_irq, xx_isr_rx,);request_irq(tx_irq, xx

28、_isr_tx,);网络设备的中断一般会分为两种,一种是发送中断,另一种是接收中断。内核需要分别对这两种中断类型 号进行注册。1. 发送中断处理程序(xx_isr_tx )的工作主要是监控数据发送状态、更新数据发送统计等。2. 接收中断处理程序(xx_isr_rx )的工作主要是接收数据并传递给协议层、监控数据接收状态、更 新数据接收统计等。对于中断方式来说,由于每收到一个包都会产生一个中断,而处理器会迅速跳到中断服务程序中去处理收包,因此中断接收方式的实时性高,但如果遇到数据包流量很大的情况时,过多的中断会增加系统的负荷。轮询方式如果采用轮询方式,就不需要使能网络设备的中断状态,也不需要注册

29、中断处理程序。操作系统会专门开启一个任务去定时检查BD表,如果发现当前指针指向的BD非空闲,则将该 BD对应的数据取岀来,并恢复BD的空闲状态。由于是采用任务定时检查的原理,从而轮询接收方式的实时性较差,但它没有中断那种系统上下文切换的 开销,因此轮询方式在处理大流量数据包时会显得更加高效。回页首Lin ux网络设备驱动优化随着科技的不断发展,网络设备所能承载的速率在不断提升,当前流行的网络设备普遍都能支持10Mbps /100Mbps / IGbps 这三种速率。虽然网络设备的硬件性能在不断的提升,但是实际在Linux系统中其运行性能(收发包速率)真能达到多达IGbps的水平吗?这和处理器的

30、性能有关,一般来说我们运行的系统中报文的收发速率是达不到IGbps的(因为我们不可能将所有处理器的资源都贡献给报文的收发),但是我们可以在有限的条件下尽可能的采取一些优化手段提高网络设备的运行性能。Cache的应用Cache位于存储系统金字塔的顶层(下面一层是内存),Cache的容量不大(一级Cache 一般是几十 KB, 二级Cache 一般是几 MB),但是它的访问速率却是内存的几十倍。因此如果处理器通过Cache来访问内存,将会极大的提高访问速率。在网络设备的数据收发中,恰当的应用Cache可以优化驱动的性能。下面列举几点 Cache的优化措施。合理设置内存属性内存的页表有多种属性,其中

31、有一项就是是否通过Cache访问。在给BD表配置内存时,这些被分配的内存属性需要支持 Cache访问。Cache的访问还有两种方式:一种是写回操作( Write Back ),处理器更新内存数据时,该数据首先保存 在Cache中,Cache并不及时将数据更新进内存,而是等到Cache需要再次更新时才会将数据写回到内存中。另一种是写穿操作( Write Through ),处理器更新内存数据时,该数据首先保存在Cache中,Cache随即将数据立刻更新进内存。显而易见,写回操作的性能比写穿操作更高,通常我们设置内存页表 属性为写回方式。数据收发时的 Cache操作在内存支持 Cache且采用写回

32、方式的情况下,当发送数据时,处理器先将数据写进 Cache,如果DMA模 块直接从内存中取出数据发送的话, 该数据将与Cache并不一致,因此在驱动程序中,需要将Cache中 的数据更新到内存,然后再通知 DMA进行发送。当接收数据时,DMA模块会将数据收到内存中,如果这时候处理器从该内存接收数据的话,处理器会从Cache中取数据,但是 Cache并不知道内存已经被更新,这就会导致接收到的数据与实际不符,因此在 驱动程序中,需要在接收数据之前刷新一下该Cache,以保证 Cache与内存的一致性。需要说明的是,并不是所有处理器都需要以上操作,有的处理器所带的DMA控制器是能感知 Cache(I

33、O-Cache Coherence )的,它们能够自动进行上述的Cache操作,因此对于这类处理器,驱动程序中无需关注Cache。中断还是轮询?前面曾经介绍过,网络设备驱动支持两种接收数据的方式,一种是中断,另一种是轮询,在数据流量比较 大的情况下,可以考虑采用轮询的方式以达到更高的效率。当采用轮询方式时,还有一个不得不考虑的问题,那就是轮询任务优先级的选择,众所周知,当任务优先 级高时,该任务不会被其他的低优先级任务所打断,从而可以保证处理器能够专心完成数据接收工作;但 如果任务优先级低时,一旦发生了其他高优先级的任务,处理器会将当前的数据接收工作暂停,转而执行 别的任务,如此会影响网络设备

34、驱动的效率。因此驱动设计者需要结合实际情况,恰当的选择任务的优先 级。设备接口模式有时候我们会发现虽然网络设备号称有100Mbps的速率,但是实际数据收发却非常慢,遇到这种情况,我们首先需要检查网络设备接口模式是否设置正确。PHY模块接口模式PHY模块的接口模式有两种,强制模式(强制 10M / 100M / 1G 等)和自协商模式。究竟选择哪种模式 需要看当前 PHY模块所连接的对端 PHY状态才行,如果对端设置的是自协商模式,本端的 PHY模块 也需要相应设置成自协商,如此就能够保证协商岀来的结果是当前链路所能支持的最大速率。反之,如果 对端设置成强制模式,本端也需要设置成强制,且强制速率

35、要与对端设置的强制速率相同。MAC 模块接口模式MAC模块对于不同的速率(10M / 100M / 1G 等)也会有不同的接口模式选择,如果设置的模式与PHY模块所运行的速率不匹配的话,会极大的影响网络设备数据收发的速度。因此在初始化MAC模块时,需要检查PHY模块的运行速率,从而选择恰当的接口模式。每个PHY / MAC模块设备的接口模式选择都不尽相同,因此在开发网络设备驱动时,需要明确所使用的 设备,并在该设备初始化时正确配置其接口模式。回页首结束语结束语Linux网络设备驱动与具体的设备关联很大,因此在实际编程中需要结合具体设备来写驱动代码,我们在 开发过程中要格外注意驱动的优化,因为网

36、络设备驱动的好坏将直接影响到整个系统的性能。参考资料 Linux Device Drivers ,Jonathan Corbet 、Alessandro Rubini 、Greg Kroah-Hartman 著,东南大 学出版社。* 参考 MPC8548E PowerQUICC III Integrated Processor Family Reference Manual,FreeScale,* 在developerWorks Linux 专区寻找为Linux开发人员(包括Linux新手入门)准备的更多参考 资料,查阅我们最受欢迎的文章和教程。* 在developerWorks 上查阅所有 Linux 技巧和Linux 教程。关于作者Linux内核和赵昊翔,南京大学计算机系硕士毕业,目前从事嵌入式方面的开发工作,对 计算机体系结构颇有兴趣。

展开阅读全文
温馨提示:
1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
2: 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
3.本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!