全球旧事资料 分类
故本系统中,设计DM9000A中断源与AT91RM9200外部IO口PD8引脚相连。一个PIO端口的32个引脚共享一个中断ID,只需要在中断状态寄存器中区分具体哪个引脚引起中断,然后转向特定的中断处理函数执行操作,就可以实现中断处理。close所做的工作和ope
相反,主要释放ope
获得的资源,以减少系统负担。34数据包发送数据包的发送和接收是实现Li
ux网络驱动程序中两个最关键的过程,对这两个过程处理的好坏将直接影响到驱动程序的整体运行质量。数据传输通过hard_start_xmit函数实现,首先把存放在套接字缓冲区中的数据发送到网络芯片DM9000A内部的TXFIFOSRAM中,该缓冲区是由数据结构skbuff表示,把要传送的数据长度写入DM9000A中的传输包长度寄存器TXPLL和TXPLH中。然后使能传输。如果数据发送成功,则会触发一次中断。实际中会出现多个数据帧传输,需要考虑做并发处理。在发送时检测传输队例暂时满载时就要通过
etif_stop_queue来暂停,当发送完成触发中断处理时,调用
etif_wake_queue函数来重新启动传输队例。网络传输由于系统忙或硬件的问题发生延迟,则会调用传送超时处理函数tx_timeout,对硬件复位操作。35数据包接收数据包的接收是通过中断处理,当有数据到达时,就产生中断信号,网络设备驱动功能层就调用数据包接收程序来处理数据包的接收,然后网络协议接口层调用
etif_rx函数把接收到的数据包传输到网络协议的上层进行处理。DM9000A接收缓存区中的每帧数据由4字节长的首部、有效数据和CRC校验序列构成。首部4字节依次是01H、以太网帧状态、以太网帧长度低字节和长度高字节,数据包接收程序首先检测如果第一个字节是01H,则说明有数据;如果是00H,则说明无数据,需要进行复位。然后调用函数dev_alloc_skb申请一块sK_buff结构缓冲区,从DM9000A读出数据放置到缓冲区里,根据获取的长度信息,判断是否读完一帧。如果读完,接着读下一帧,直到遇到首字节是00H的帧,说明接收数据已读完。接下来填充sK_buff中的一些信息,使之成为规范的sk_buff结构,最后调用
etif_rx函数将接收到的数据传输到网络协议的上层。最后,可通过两种方法加载网络设备驱动程序:系统内核加载和模块加载。4网络的应用及测试通过读取/proc/
et中的信息得到当前系统中的网络设备,通过它来测试:
fcat/proc/
et/devLi
ux网络配置可在应用程序中通过ifco
fig和router两个命令实现,它们都可以在busybox软件包中找到。可用以下命令来配置ip、网关、子网掩码和域名解析服务器:ifco
figeth0r
好听全球资料 返回顶部