OpenWRT 下以太网MAC地址的写入


近期在为朋友制定OpenWRT系统下产测解决方案时,遇到了MAC地址的写入问题。产测使用Qualcomm Atheros的ART软件,只能写入无线的MAC地址,无法写入以太网的MAC地址, 笔者花了一些时间终于研究清楚,在这里做个记录,以便后续查阅。注:本文以AR9344无线AP为例进行说明,这种方法仅适用于采用Qualcomm Atheros AR93xx/AR94xx系列芯片的AP设备。

首先,必须清楚一点,AP类设备与无线相关的校准数据都是保存在Flash的ART分区的,熟悉OpenWRT的读者肯定都知道。例如 笔者所用的OpenWRT固件版本,其Flash分区如下图。可以看到,Flash中的0x7F0000-0x80000这一段是划分给ART分区的。

ART-MTD

然后,Qualcomm Atheros官方说明文档中对于ART分区的内容有进一步的说明,如下图。可以看到MAC0也就是ETH0的MAC地址保存在0x0-0x5偏移地址中,MAC1也就是ETH1的MAC地址保存在0x6-0xB偏移地址中,无线的MAC地址分别保存在0x1000-0x4FFF与0x5000-0x8FFF偏移地址中。这里需要指出的是,如果是单Radio设备,那么只有First Radio Calibration Data,如果是双Radio设备,会同时有First/Second Radio Calibration Data。

ART-Block-Diagram

接下来,可以根据这些已有的信息尝试写入MAC地址,以下是全部过程。

1. 为主板加电,当串口中出现Hit any key to stop autoboot:字样时,敲击回车键,待测板会停留在u-boot阶段。

Stop-u-boot

2. 敲入printenv命令,不难看出Flash的地址空间映射为0x9F000000-0x9F7FFFFF,则推断出ART分区的地址为0x9F7F0000-0x9F7FFFF。由此,可以得知,ETH0的MAC地址存放于0x9F7F0000-0x9F7F0005,ETH1的MAC地址存放于0x9F7F0006-0x9F7F000B。

Printenv

3. 写入以太网MAC地址不能破坏原有校准数据,因此需要先将ART分区的内容复制到内存中,输入以下命令

cp.b 0x9f7f0000 0x80060000 10000

4. 假设欲写入的ETH0,ETH1 MAC分别为“00-03-7f-01-01-02”,“00-03-7f-01-01-03”,则修改内存中的MAC地址,依次输入以下命令

mw 0x80060000 00037f01
mw 0x80060004 01020003
mw 0x80060008 7f010103

5. 查看内存中的MAC地址是否准确,输入以下命令

md 0x80060000

串口中的打印信息应为

80060000: 00037f01 01020003 7f010103 ffffffff

即80060000存放的数据为ETH0与ETH1 MAC地址的结合。

6. 确认无误后,将Flash中的原有校准数据擦除,在串口中输入以下命令

erase 0x9f7f0000 +10000
cp.b 0x80060000 0x9f7f0000 10000

串口中的打印信息应为

Copy to Flash... write addr: 9f7f0000
done

7. 以上完整操作过程下图所示。

Operation-Process

8. 最后检验MAC地址是否已准确写入,在串口中输入以下命令

md 0x9f7f0000

串口中的打印信息应为

9f7f0000: 00037f01 01020003 7f010103 ffffffff

此时可确认ETH0及ETH1 MAC地址已准确写入。



本文章由作者:佐须之男 整理编辑,原文地址: OpenWRT 下以太网MAC地址的写入
本站的文章和资源来自互联网或者站长的原创,按照 CC BY -NC -SA 3.0 CN协议发布和共享,转载或引用本站文章应遵循相同协议。如果有侵犯版权的资 源请尽快联系站长,我们会在24h内删除有争议的资源。欢迎大家多多交流,期待共同学习进步。

相关推荐