uboot下批量烧写mac


1. Uboot下打开MAC烧写功能

以spinand板为例

$ cd boot
$ make pioneer3_spinand_defconfig
$ make menuconfig

将如下选项设置为true:

->Device Drivers
->MStar drivers
    ->MSTAR MAC BURN    #使能烧写mac功能
    ->MSTAR SDMMC       #使能SD驱动
$ make clean;make

重新编译uboot,并将boot/u-boot_spinand.xz.img.bin拷贝到project/board/p3/boot/spinand/uboot下,在project下打包images时就会更新uboot.bin

uboot patch:P3-boot-support-batch-mac-address-burning.patch


2. 制作MAC烧写文件

对于mac地址是连续的情况,可使用脚本自动生成烧写文件,将脚本文件mac_split.sh拷贝到在SD卡(SD卡需要格式化为fat32格式),在linux下按如下说明运行脚本批量生成MAC烧写文件。

$ sh mac_split.sh –h ab:cd:ef:hi:jk –s 0 –e 99

参数说明:

-h : mac地址头部分

-s : mac地址起始值

-e : mac地址结束值

生成文件MAC_INDEX记录当前要烧写的mac文件的编号,四位表示法左边不足以0补充,最大到9999,如:0001表示1,对应的mac文件为MAC_1. MAC_0~MAC_99保存要烧写的mac的实际地址值,如:MAC_0内容为ab:cd:ef:hi:jk:00,MAC_99内容为ab:cd:ef:hi:jk:63。

手动制作烧写文件,同样按照上述规则,新建MAX_INDEX文件以及一系列MAC_0~MAC_99文件,内容根据实际情况修改即可。


3. 烧写MAC原理说明

开发板上电,uboot起来后首先会检测SD卡是否插入,然后从SD卡读MAC_INDEX文件内容,拿到当前要烧写的MAC文件编号,再根据文件编号读取指定MAC文件拿到实际的mac地址值,通过setenv将mac地址写到环境变量ethaddr保存起来。最后将当前MAC文件编号加1,重新写到MAC_INDEX文件,下次烧录将通过MAC_INDEX找到新的MAC烧写文件。

由于环境变量ethaddr是写到flash中,掉电不会丢失,用户通过getenv就能读到mac地址了。