OpenWrt19.07设置mac地址为芯片内置出厂地址

最近发现所使用的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 是在什么时候执行的呢?待续

  • 2
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值