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地址,imx6ull 双网口设置mac地址_第1张图片

如图写了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()imx6ull 双网口设置mac地址_第2张图片

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

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

你可能感兴趣的:(imx6ull 双网口设置mac地址)