a.之前我们2440超详细uboot移植笔记(九)------修改错误设置的CONFIG_DM9000_BASE等的值是参考别人的配置文件修改的,
现在我们要修改成适应我们开发板的参数.
b. 将
#define CONFIG_DM9000_BASE 0x2c000000
修改为:
#define CONFIG_DM9000_BASE 0x20000000
c. 解决Net: No ethernet found问题:
在smdk2440.c文件中,修改board_eth_init函数:
int board_eth_init(bd_t *bis) { int rc = 0; #ifdef CONFIG_CS8900 rc = cs8900_initialize(0, CONFIG_CS8900_BASE); #endif #ifdef CONFIG_DRIVER_DM9000 rc = dm9000_initialize(bis); #endif return rc; }
d.在smdk2440.h文件里修改默认环境参数:
#define CONFIG_NETMASK 255.255.255.0 #define CONFIG_IPADDR 192.168.1.104 #define CONFIG_SERVERIP 192.168.1.102 #define CONFIG_ETHADDR 00:0c:29:f1:28:2f
/*ip和路由器ip同一个网段即可*/
/*表示内核打印信息从串口0输出,文件系统在mtdblock3*/ #define CONFIG_BOOTARGS "console=ttySAC0,115200 root=/dev/mtdblock3 rootfstype=yaffs2 " #define CONFIG_BOOTCOMMAND "nand read 30000000 kernel;bootm 30000000"
uboot通过这两条命令来启动内核.其中,设置了CONFIG_BOOTCOMMAND就会使得uboot倒数5s后进入内核,表示从30000000读取到kernel这个分区,当然,kernel分区我们现在还没设置。其中,在smdk2440_defconfig文件(路径:configs\smdk2440_defconfig)中可以修改进入系统的倒计时时间.
d. 在env_default.h(路径:include\env_default.h)文件中,
在default_environment数组中添加:
#ifdef CONFIG_ETHADDR "ethaddr=" __stringify(CONFIG_ETHADDR) "\0" #endif
f.至此,uboot已经可以识别我们的网卡了,而且可以ping通我们的虚拟机:
注意:如果设置了参数,此时还不能用save命令保存设置的参数,因为还未设置参数保存的地址,如果使用可能会破坏nand上的重要数据。
g.在新版uboot中,使用tftp下载时会出现一个提示:could not establish link
h. 执行
grep "could not establish link" * -nR
命令,会发现:
drivers/net/dm9000x.c:371: printf("could not establish link\n");
可知我们需要修改下dm9000x.c这个文件.
i. 注释掉以下语句:
i = 0; while (!(dm9000_phy_read(1) & 0x20)) { /* autonegation complete bit */ udelay(1000); i++; if (i == 10000) { printf("could not establish link\n"); return 0; } }