免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1320 | 回复: 0
打印 上一主题 下一主题

u-boot中MAC地址设置及往内核中传递 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2009-04-06 18:05 |只看该作者 |倒序浏览
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
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP