据长度等信息填充到DM9000A的相应寄存器内,使能发送。当DM9000A接收到外部网络送来的以太网数据时,首先检测数据帧的合法性,如果帧头标志有误或存在CRC校验错误,则将该帧数据丢弃。否则将数据帧缓存到内部RAM,并通过中断标志位通知AT91RM9200,由AT91RM9200对DM9000A接收到的数据进行处理。3li
ux网络驱动程序31Li
ux网络驱动程序体系结构Li
ux的网络系统主要是基于BSDUNIX的套接字socket机制。在系统和驱动程序之间定义有专门的数据结构sk_buff进行数据传输。系统支持对发送数据缓存,提供流量控制机制,提供对多协议的支持。Li
ux网络驱动程序的体系结构可划分为图2所示的4个层次Li
ux内核中提供了网络设备接口及以上层次的代码,所以移植或编写特定网络硬件的驱动程序最主要的工作就是完成设备驱动功能层,主要是包括数据的接收,发送等控制。
fLi
ux中所有的网络设备都抽象为一个接口,有结构体struct
et_device来表示网络设备在内核中的运行情况,即网络设备接口,此结构体位于网络驱动层的核心地位。
et_device中有很多供系访问和协议层调用的设备方法。网络驱动就是要实现这些具体的设备方法。32网络设备的初始化由结构体
et_device中的i
it函数指针所指向的初始化函数来完成。网络的初始化是设备工作的第一步。当系统加载网络驱动模块的时候,就会调用初始化过程。首先利用函数:request_mem_regio
映射DM9000A的数据、地址端口,通过dmfe_probe函数检测网络物理设备是否存在,检测DM9000A内部串行NIC的值是否正确,然后再对设备进行资源配置,构造设备的
et_device数据结构。包括一些低层硬件信息:base_addr网络接口的IO基地址,irq安排的中断号等。33打开设备和关闭设备ope
方法在网络设备被激活的时被调用,具体DM9000A的硬件初始化工作放到这里来做。对于DMOOOOA需要完成的初始化包括:对DM9000A内部上电,软件复位,通过NCR寄存器设置网络工作模式,可以选择设置内部或者外部PHY、全双工或者半双工模式、使能唤醒事件等网络操作,对RXTX中断使能,使能数据接收功能。调用request_jrq申请中断号登记中断处理函数,调用
etif_carrier_o
侦测连接状态。启动定时器,调用
etif_start_queue激活设备发送队列。这里对DM9000A的中断设计做了一个特殊处理:通常AT91RM9200提供最多
f32个中断源,默认提供7个外部中断源,但对于较复杂的嵌入式系统,可能会面临中断源不够用的情况。由于AT9lRM9200的PIO可以实现功能复用,因此可以把多余的IO引脚配置为可用的中断源。r