zynq-7000系列解决部分用户反映MAC地址每次启动都变化的问题

zynq-7000系列解决部分用户反映MAC地址每次启动都变化的问题

                             

     作者:卢浩  

                                     时间:2017.2.20

                                    转载请注明出处

部分用户提出zynq-7000的linux系统下,原生的以太网mac地址,每次启动linux系统,mac都会发生变化,这个主要是驱动里关于mac的处理机制导致的,我们来看源代码:

驱动文件位置:drivers/net/ethernet/cadence/macb.c

   187 static void macb_get_hwaddr(struct macb *bp)
   188 {
   189         struct macb_platform_data *pdata;
   190         u32 bottom;
   191         u16 top;
   192         u8 addr[6];
   193         int i;
   194 
   195         pdata = dev_get_platdata(&bp->pdev->dev);
   196 
   197         /* Check all 4 address register for vaild address */
   198         for (i = 0; i < 4; i++) {
   199                 bottom = macb_or_gem_readl(bp, SA1B + i * 8);
   200                 top = macb_or_gem_readl(bp, SA1T + i * 8);
   201   
   202                 if (pdata && pdata->rev_eth_addr) {
   203                         addr[5] = bottom & 0xff;
   204                         addr[4] = (bottom >> 8) & 0xff;
   205                         addr[3] = (bottom >> 16) & 0xff;
   206                         addr[2] = (bottom >> 24) & 0xff;
   207                         addr[1] = top & 0xff;
   208                         addr[0] = (top & 0xff00) >> 8;
   209                 } else {
   210                         addr[0] = bottom & 0xff;
   211                         addr[1] = (bottom >> 8) & 0xff;
   212                         addr[2] = (bottom >> 16) & 0xff;
   213                         addr[3] = (bottom >> 24) & 0xff;
   214                         addr[4] = top & 0xff;
   215                         addr[5] = (top >> 8) & 0xff;
   216                 }
   217                 
   218                 if (is_valid_ether_addr(addr)) {
   219                         memcpy(bp->dev->dev_addr, addr, sizeof(addr));
   220                         return;
   221                 }
   222         }
   223         
   224         dev_info(&bp->pdev->dev, "invalid hw address, using random\n");
   225         eth_hw_addr_random(bp->dev);
   226 }
在没有可用的 hw address的时候,会调用这个函数
eth_hw_addr_random

随机生成一组mac地址。

我们把这个函数注释掉就可以了,mac地址就不会每次启动都变化了。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值