imx6ull 双网口设置mac地址

   本人在调试imx6ull的时候,需要烧写mac地址,和imx6ul一样,我们使用的是烧写fuse的方式烧写mac地址,也就是fsl_otp/HW_OCOTP_MAC0 1 2三个地方对应了双网口的mac地址,具体的我就不仔细说了,这个网上都有,但是注意这种方式烧写mac地址之后,比较难更改,只能0写1 不能1写0,所以尽量不要烧写错误。

   但是在imx6ull,也是freescale4.1.15的代码中,也是如此做,但是发现后期读出来的mac地址是重复的,当然我很快就去校验了fuse之中的mac地址,发现烧写没问题,然后暂时就用开机脚本的方式来设置mac地址,这个也比较简单,就手动去读fuse,启动设置两个网卡的mac地址,但是这终究不是办法,于是就趁着放假前来探究了一下内核源码中如何读写这个mac地址。。。。

   首先在drivers/net/ethernet/freescale/fec_main.c 这个文件中我和3.14比较了一下发现没有啥区别,但是有个fec_get_mac()函数,相信肯定是在这里面设置了mac地址,

如图写了4个方案1是从kernel command读取经过debug发现,macaddr是空的,所以没有读取到,然后2是从devicetree读取,感觉不像,3是从flash or fuse里面读取看上去比较像,4是从uboot里读取。

!!!然后果然不是从3里设置的,因为在devicetree里就读取到了,所以就没进3,然后我就很好奇,devicetree没有设置mac地址啊,然后跟了一下这个of_get_mac_address()函数,发现他找了一下local-mac-address 这个关键字样,然后觉得很奇怪,就在整个内核源码里 grep了一下,发现这玩意设备树里没有,但是找到了另一个函数,arch/arm/mach-imx/common.c 这个文件。于是找到了这个函数 imx6_enet_mac_init()

这里看上去很像是从fuse里读取了

但是经过打印发现双网口只调用了一次,循环第一次还没读就跳出去了,于是把上面的注释掉了,然后找了半天也没找到这个local-mac-address在哪,于是自己在自己的imx6ull-14x14-evk.dts里面加了这个,默认写成0,然后终于能正确读取mac地址了,然后找了块没烧写的板子发现就是随机的mac地址,看样子问题是解决了,但是不懂为啥会这样,然后把上面这个注释打开又变成了相同的mac地址,感觉还是有些问题,继续研究中...

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值