新闻中心

EEPW首页>嵌入式系统>设计应用> 一种在U-BOOT中嵌入千兆网络功能的方法

一种在U-BOOT中嵌入千兆网络功能的方法

作者: 时间:2013-04-06 来源:网络 收藏

硬件平台结构图


驱动程序

中嵌入需要设计千兆网卡驱动程序,并在U—BOOT中进行移植,在相应的硬件平台上实现通过千兆网口下载等功能。网卡驱动程序主要由初始化程序eth_init(bd_t*bd)、关闭网络设备程序eth_halt(void)、发送数据包程序eth_send(volatilevoid*packet,intlength)、接收数据包程序inteth_rx(void)等组成。初始化程序的工作主要是配置和初始化硬件,在初始化程序里可以完成对网络控制芯片和PHY芯片的配置,比如将接口设置为1000Mbps、全双工模式等。数据发送就是将上层协议打包好的数据放在发送数据缓冲区,然后由网卡发送到网络上;数据接收就是在网卡接收到网络传来的数据包产生中断后,从缓冲区将数据取出交给上层协议程序进行解包处理。中断服务程序处理网卡发送数据包后、接收到数据包后产生的中断以及PHY产生的中断等。



网卡初始化程序如下:

int eth_init(bd_t*bd)
{
memset(axlocal,0,sizeof(_PRIVATE));
RESET_MAC;
DISABLE_INTERRUPT;
WRITE_
MACREG(CMD,WAKEMOD);
tmp16=bd->bi_enetaddr[1];
macid0_val=(tmp168) │ bd>bi_enetaddr[0];
tmp16=bd->bi_enetaddr[3];
macid1_val=(tmp168)│ bd>bi_enetaddr[2];
tmp16=bd->bi_enetaddr[5];
macid2_val=(tmpl68)│ bd>bi_enetaddr[4];
WRITE_MACREG(MACID0,macid0_val);
WRITE_MACREG(MACID1,macid1_val);
WRITE_MACREG(MACID2,macid2_val);
ax88180_PHY_initial();
ax88180_meida_config();
WRITE_MACREG(RXFILTER,DEFAULT_RXFILTER);
INT TXRX VARIABLES;
READ_MACREG(ISR,tmp_regval);
PRINTK(INIT_MSG,”ax88180;The interrupt status="0x"%081x\n”.tmp_regval);
if(tmp_regval)
WRITE_MACREG(ISR,tmp_regval);
WRITE_MACREO(CMD,RXEN │ TXEN │ WAKEMOD);
return0;}

驱动移植

驱动移植是在基于硬件平台的U—BooT中添加驱动程序代码和相关配置,具体如下:

bsp; 1.在drivers/目录中添加网口设备驱动程序ax88180.c和ax88180.h。

2.在lib_arm/board.C中相应位置(参考CS8900)添加如下代码:

#ifdef CONFIG_DRIVER_
extern Void ax88180_get_enetaddr(uchar*addr);
#endif
#ifdef CONFIG_DRIVER_AX88180
ax88180_get_enetaddr(gd一>bd>bi_enetaddr);
n

bsp; #endif

3.在include/configs/smdk2440.h中相应位置(参考CS8900)添加如下代码:

#define CONFIG_DRIVER_AX88180 1 #define AX88180_BASE
Ox08000000

4.最后在drivers/Makefile中加入ax88180.o,重新编译生成U—BooT即可。

结语

广泛应用在嵌入式系统中,本文阐述的方法可以使功能更强大、使用更方便,文中介绍的硬件平台给嵌入式系统的设计提供了一定的指导。本设计虽然基于平台,对其它类似的系统也有很好的借鉴作用,本文介绍的方法已经在产品中得到应用,效果良好。


上一页 1 2 下一页

评论


相关推荐

技术专区

关闭