uboot网卡移植

Uboot移植--支持DM9000网卡驱动 - ARM爱好者 - ARM爱好者的博客

1、u-boot-2010.06默认的网卡是CS8900,所以要先把它屏蔽掉

gedit include/configs/apple2440.h

/*

#define CONFIG_NET_MULTI
#define CONFIG_CS8900  /* we have a CS8900 on-board */
#define CONFIG_CS8900_BASE 0x19000300
#define CONFIG_CS8900_BUS16 /* the Linux driver does accesses as shorts */

*/

//添加u-boot对DM9000X网卡的支持

#define CONFIG_DRIVER_DM9000  1
#define CONFIG_NET_MULTI      1
#define CONFIG_DM9000_NO_SROM 1
#define CONFIG_DM9000_BASE 0x20000300 //网卡片选地址
#define DM9000_IO CONFIG_DM9000_BASE
#define DM9000_DATA (CONFIG_DM9000_BASE + 4) //网卡数据地址

 

//在102行处添加命令,下面红色部分

#define CONFIG_CMD_CACHE
#define CONFIG_CMD_DATE
#define CONFIG_CMD_ELF
//给uboot加上ping命令,用来测试网络通不通
#define CONFIG_CMD_PING

//添加网卡支持命令

#define CONFIG_CMD_NET

//恢复被注释掉的网卡MAC地址

#define CONFIG_ETHADDR     08:00:3e:26:0a:5b//TQ2440dm9000xmac地址
(注:我在apple2440.h中遗漏了如下定义,所以要在uboot中通过setenv及saveenv来设置。)
#define CONFIG_NETMASK      255.255.255.0//子网掩码
#define CONFIG_IPADDR  192.168.0.106//TQ2440IP地址
#define CONFIG_SERVERIP  192.168.0.107//主机(PC)IP地址

 

2、修改板载DM9000网卡初始化代码

gedit board/sumsung/apple2440/apple2440.c

#ifdef CONFIG_CMD_NET
int board_eth_init(bd_t *bis)
{
 int rc = 0;
#ifdef CONFIG_DRIVER_DM9000
 rc = dm9000_initialize(bis);

#endif
 return rc;
}

 

3、修改网卡驱动bug

gedit drivers/net/dm9000x.c

<1>//屏蔽掉dm9000_init函数中的这一部分,不然使用网卡的时候会报“could not establish link”的错误

#if 0
 i = 0;
 while (!(phy_read(1) & 0x20))
 { /* autonegation complete bit */
  udelay(1000);
  i++;
  if (i == 10000)
  {
   printf("could not establish link\n");
   return 0;
  }
 }
#endif

<2>//屏蔽掉dm9000_halt函数中的内容

static void dm9000_halt(struct eth_device *netdev)
{
#if 0
 DM9000_DBG("%s\n", __func__);

 /* RESET devie */
 phy_write(0, 0x8000); /* PHY RESET */
 DM9000_iow(DM9000_GPR, 0x01); /* Power-Down PHY */
 DM9000_iow(DM9000_IMR, 0x80); /* Disable all interrupt */
 DM9000_iow(DM9000_RCR, 0x00); /* Disable RX */
#endif
}


### U-Boot环境下双网卡移植方法及配置 #### 1. 准备工作 为了实现U-Boot环境下的双网卡移植,首先要确认所使用的开发板及其硬件特性。对于多网卡的支持,通常需要确保U-Boot源码树中已经包含了目标CPU架构以及对应网络控制器驱动程序的相关文件[^2]。 #### 2. 配置内核选项 进入U-Boot源代码目录后,可以通过`make menuconfig`命令来打开图形化配置界面,在这里可以找到并启用多个以太网接口支持的选项。具体路径可能是 `Device Drivers -> Network device support -> Ethernet driver options (MII)` 下面勾选所有适用的目标设备型号对应的子项[^1]。 ```bash $ make menuconfig ``` #### 3. 修改Board文件 针对特定平台(如STM32系列),还需要编辑位于`board/<vendor>/<board>/`中的C语言源文件,调整初始化过程中对两个不同MAC地址和PHY ID的操作逻辑,保证两者都能被正确识别与设置。这一步骤涉及到修改或增加如下函数: - `ethernet_init()`: 初始化第一个以太网端口; - `ethernet1_init()`: 如果存在第二个独立于主控芯片之外管理的物理层,则需单独定义此函数完成次级网口激活; 这些改动应当基于现有单网卡工作的基础上扩展而来,并保持原有功能不变。 #### 4. 更新配置脚本 最后要更新顶层Makefile以及其他任何涉及编译参数设定的地方,使得新加入的部分能够顺利参与到整个构建流程当中去。特别是当引入外部库或者更改了某些全局变量时更要注意这一点。此外还需注意检查`.config`文件里有关网络部分的宏定义是否恰当设置了所需的资源分配情况,例如IRQ中断号、内存映射区域等。 #### 5. 测试验证 完成上述步骤之后就可以尝试编译生成新的固件镜像,并将其刷入到实际硬件上进行测试。此时应该能看到控制台输出显示出了两组不同的MAC地址信息,分别代表各自的工作状态良好。也可以利用ping命令或其他工具进一步检验连通性和性能表现如何。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值