文章详情

  • 游戏榜单
  • 软件榜单
关闭导航
热搜榜
热门下载
热门标签
php爱好者> php文档>u-boot中MAC地址设置及往内核中传递

u-boot中MAC地址设置及往内核中传递

时间:2009-04-06  来源:dqwjack

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.c static 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和内核,测试通过。
相关阅读 更多 +
排行榜 更多 +
tagoo

tagoo

聊天通讯 下载
黑头清洁诊所

黑头清洁诊所

休闲益智 下载
史莱姆幸存者

史莱姆幸存者

动作格斗 下载