最近发现所使用的openwrt19.07系统在htlk7628核心板上运行时,一旦恢复出厂设置或者重刷固件后对应的mac地址就会改变,猜测系统生成mac地址方式并非使用了芯片内部的mac地址,而是随机生成,而我需要固定mac地址,最好是使用芯片内部的mac地址,那么7628芯片的mac地址在哪里呢?

7628芯片的mac地址

查看MT7628_EEPROM_Guideline_v2_00.pdf手册,得知mac地址在e2prom中的偏移位置

20221231112350337

在这里插入图片描述
在这里插入图片描述

lan和wan的偏移量0x28和0x2E

openwrt系统中中执行命令验证查看

hexdump -v -s 0x28 -n 6 -e '2/1 "%02x:"' /dev/mtd2
hexdump -v -s 0x2e -n 6 -e '2/1 "%02x:"' /dev/mtd2

在这里插入图片描述

openwrt源码修改

openwrt系统初始化启动时生成写入/etc/config/network文件来确定实际使用的mac地址,那么我们需要在源码中中岛生成mac地址随机数的位置,将随机数替换为上一步获取芯片mac地址的方式。

修改文件:

/home/luke/openwrt/openwrt_19.07/target/linux/ramips/base-files/etc/board.d/02_network

如下:
在这里插入图片描述

e2prom存储区对应系统的facory分区

该函数是设置板子的mac地址的函数,找到对应板子的处理分支,读取factory中的mac地址然后放置到待生成的mac地址中。

其他板子的修改方式也类似,找到对应板子的case,修改即可。

验证

编译下载测试,查看系统启动后的mac地址,与上一步读取的一致,说明修改有效。
在这里插入图片描述

查阅资料发现除利用hexdump方式还可以使用 mtd_get_mac_binary命令,暂未测试。

    lan_mac=$(mtd_get_mac_binary factory 40)
    wan_mac=$(mtd_get_mac_binary factory 46)
  • 40和46对应的十六进制数就是lan和wan的偏移量0x28和0x2E,

关联问题

随机地址在何处生成

通过源码也可得知原先lan mac地址是从sys/class/net/eth0/address 文件中获取的,wan在此基础上加1.

sys/class/net/eth0/address文件内容是在系统初始化启动是随机生成的,可查看内核日志得知。

在这里插入图片描述
在这里插入图片描述

两者一致。

mac地址生成时机

02_network 是在什么时候执行的呢?待续

Logo

DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。

更多推荐