目录
- 7628芯片的mac地址
- openwrt源码修改
- 验证
- 关联问题
- 随机地址在何处生成
- mac地址生成时机
最近发现所使用的openwrt19.07
系统在htlk7628
核心板上运行时,一旦恢复出厂设置或者重刷固件后对应的mac地址就会改变,猜测系统生成mac地址方式并非使用了芯片内部的mac地址,而是随机生成,而我需要固定mac地址,最好是使用芯片内部的mac地址,那么7628芯片的mac地址在哪里呢?
7628芯片的mac地址
查看MT7628_EEPROM_Guideline_v2_00.pdf
手册,得知mac地址在e2prom中的偏移位置
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 是在什么时候执行的呢?待续