linux网络 mac地址设置流程

mac设置流程

背景:设备不同的mac地址,防止多设备同mac地址影响网络通信。

一.uboot的mac设置

系统启动的必要两个文件:cis.bin,boot.bin来用于配置设备信息和启动系统。 烧录cis.bin,boot.bin也叫烧录空片。
boot.bin引导加载时,对ethaddr的值进行判断,第一次ethaddr的为空,使用数组MY_MAC的mac地址,且将mac地址存入变量ethaddr

  s = getenv ("ethaddr");
    if (s)
    {
        for (i = 0; i < 6; ++i)
        {
            ThisBCE.sa1[i] = s ? simple_strtoul (s, &e, 16) : 0;
            if (s)
            {
                s = (*e) ? e + 1 : e;
            }
        }
    }
    else
    {
        ThisBCE.sa1[0]      = MY_MAC[0];
        ThisBCE.sa1[1]      = MY_MAC[1];
        ThisBCE.sa1[2]      = MY_MAC[2];
        ThisBCE.sa1[3]      = MY_MAC[3];
        ThisBCE.sa1[4]      = MY_MAC[4];
        ThisBCE.sa1[5]      = MY_MAC[5];
    }

烧录image,boot在初始化emac时,会先获取环境变量参数 ethaddr的值,根据值是否有效来判断使用数组的mac地址还是环境变量的mac地址。
按照代码逻辑第二次加载uboot,从而使用ethaddr的地址。

二.kernel的mac设置

  • boot下向kernel传递mac地址
    bootloader后会将mac地址写入emac的寄存器,通过获取emac特定寄存器的值,来获取boot下设置的mac地址。
 // Check if bootloader set address in Specific-Address 1 //
    HiAddr = MHal_EMAC_get_SA1H_addr(hemac->hal);
    LoAddr = MHal_EMAC_get_SA1L_addr(hemac->hal);

    addr[0] = (LoAddr & 0xffUL);
    addr[1] = (LoAddr & 0xff00UL) >> 8;
    addr[2] = (LoAddr & 0xff0000UL) >> 16;
    addr[3] = (LoAddr & 0xff000000UL) >> 24;
    addr[4] = (HiAddr & 0xffUL);
    addr[5] = (HiAddr & 0xff00UL) >> 8;

    memcpy (dev->dev_addr, &addr, 6);

  • 26
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值