EDN China > 技术文章 > 嵌入式系统 > 操作系统 > 正文
? 2016博客大赛-不限主题,寻找电子导师,大奖升级??

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

北京信息科技大学 路冉冉 郝静如 李天剑?? 2009年06月30日 ?? 收藏0

  3.3 打开设备和关闭设备

  open方法在网络设备被激活的时被调用,具体DM9000A的硬件初始化工作放到这里来做。对于DMOOOOA需要完成的初始化包括:对DM9000A内部上电,软件复位,通过NCR寄存器设置网络工作模式,可以选择设置内部或者外部PHY、全双工或者半双工模式、使能唤醒事件等网络操作,对RX/TX中断使能,使能数据接收功能。调用request_jrq()申请中断号登记中断处理函数,调用netif_carrier_on侦测连接状态。启动定时器,调用netif_start_queue激活设备发送队列。

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

  3.4 数据包发送

  数据包的发送和接收是实现Linux网络驱动程序中两个最关键的过程,对这两个过程处理的好坏将直接影响到驱动程序的整体运行质量。

  数据传输通过hard_start_xmit函数实现,首先把存放在套接字缓冲区中的数据发送到网络芯片DM9000A内部的TX FIFO SRAM中,该缓冲区是由数据结构sk buff表示,把要传送的数据长度写入DM9000A中的传输包长度寄存器TXPLL和TXPLH中。然后使能传输。如果数据发送成功,则会触发一次中断。实际中会出现多个数据帧传输,需要考虑做并发处理。在发送时检测传输队例暂时满载时就要通过netif_stop_queue来暂停,当发送完成触发中断处理时,调用netif_wake_queue函数来重新启动传输队例。网络传输由于系统忙或硬件的问题发生延迟,则会调用传送超时处理函数tx_timeout,对硬件复位操作。

  3.5 数据包接收

  数据包的接收是通过中断处理,当有数据到达时,就产生中断信号,网络设备驱动功能层就调用数据包接收程序来处理数据包的接收,然后网络协议接口层调用netif_rx函数把接收到的数据包传输到网络协议的上层进行处理。

  DM9000A接收缓存区中的每帧数据由4字节长的首部、有效数据和CRC校验序列构成。首部4字节依次是01H、以太网帧状态、以太网帧长度低字节和长度高字节,数据包接收程序首先检测如果第一个字节是01H,则说明有数据;如果是00H,则说明无数据,需要进行复位。然后调用函数dev_alloc_skb申请一块sK_buff结构缓冲区,从DM9000A读出数据放置到缓冲区里,根据获取的长度信息,判断是否读完一帧。如果读完,接着读下一帧,直到遇到首字节是00H的帧,说明接收数据已读完。接下来填充sK_buff中的一些信息,使之成为规范的sk_buff结构,最后调用netif_rx()函数将接收到的数据传输到网络协议的上层。

  最后,可通过两种方法加载网络设备驱动程序:系统内核加载和模块加载。

  4 网络的应用及测试

  通过读取/proc/net中的信息得到当前系统中的网络设备,通过它来测试:

  #cat/proc/net/dev

  Linux网络配置可在应用程序中通过ifconfig和router两个命令实现,它们都可以在busybox软件包中找到。可用以下命令来配置ip、网关、子网掩码和域名解析服务器:

  # ifconfig eth0 192.168.0.11O

  # route add -net default gw 192.168.0.254 netmask 255.255.255.0

  # nameserver 202.106.196.115

  最后,通过Ping命令,来测试一下和主机的通信是否联通。在本系统中通过。

  在嵌入式应用程序开发及调试中,NFS起着非常重要的应用。不但可以通过NFS文件系统共享远程硬盘的文件,我们还可以mount远程文件系统直接作为嵌入式的根文件系统。

  5 结论

  本文完成了Linux下扩展以太网接口及测试网络接口的研究,采用了以太网芯片DM9000,围绕太分析了嵌入式Linux 网络的基本原理。最后我的嵌入式设备顺利连上网络。同时本文为移植2.6内核的网络部分提供了移植方法。


上一页12下一页
?? ?? ??


打开微信“扫一扫”,打开网页后点击屏幕右上角分享按钮

1.扫描左侧二维码
2.点击右上角的分享按钮
3.选择分享给朋友
?? ??

嵌入式? 以太网? 接口? linux?

相关文章

我来评论
美国的游客
美国的游客 ??? (您将以游客身份发表,请登录 | 注册)
?
有问题请反馈