- 论坛徽章:
- 0
|
http://blog.chinaunix.net/u2/89580/showart_1863411.html
环境:u-boot1.3.2;montavista linux 2.6.10 ; dm6446
1.解决uboot命令行中不能设置ethaddr的问题,经常会提示Can't overwrite "ethaddr":common/cmd_nvedit.c中函数_do_setenv中找到
189 #ifndef CONFIG_ENV_OVERWRITE
190
191 /*
192 * Ethernet Address and serial# can be set only once,
193 * ver is readonly.
194 */
195 #ifdef CONFIG_HAS_UID
196 /* Allow serial# forced overwrite with 0xdeaf4add flag */
197 if ( ((strcmp (name, "serial#") == 0) && (flag != 0xdeaf4add)) ||
198 #else
199 if ( (strcmp (name, "serial#") == 0) ||
200 #endif
201 ((strcmp (name, "ethaddr") == 0)
202
203 #if defined(CONFIG_OVERWRITE_ETHADDR_ONCE) && defined(CONFIG_ETHADDR)
204 && (strcmp ((char *)env_get_addr(oldval),MK_STR(CONFIG_ETHADDR)) != 0)
205 #endif /* CONFIG_OVERWRITE_ETHADDR_ONCE && CONFIG_ETHADDR */
206 ) ) {
207 printf ("Can't overwrite \"%s\"\n", name);
208 return 1;
209 }
210 #endif
把201行替换成 (0 即可;
2.为了让uboot命令行中设置的参数ethaddr传递到内核,必须修改uboot和linux内核两个地方: (1)uboot修改 : lib_arm/armlinux.c 在 247 #ifdef CONFIG_CMDLINE_TAG 248 setup_commandline_tag (bd, commandline); 下面添加如下语句: char *buf1 = malloc(1024); sprintf(buf1, "%s mac=%s", getenv ("bootargs"), getenv ("ethaddr")); setup_commandline_tag (bd, buf1);(2)linux内核修改:drivers/net/davinci_emac.cstatic int emac_eth_setup(void) 1899 {前面添加:static char davinci_mac_addr_uboot[20] = ""; 1887 static int __init param_mac_setup(char *str) 1888 { 1889 strncpy(davinci_mac_addr_uboot, str, sizeof(davinci_mac_addr_uboot)); 1890 } 1891 __setup("mac=", param_mac_setup);并在函数emac_eth_setup内部语句printk("TI DaVinci EMAC: MAC address is %s\n", emac_eth_string);前面添加:strncpy(emac_eth_string, davinci_mac_addr_uboot, sizeof(emac_eth_string));
添加完毕,重新编译uboot和内核,测试通过。
本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/u/15674/showart_1891479.html |
|