日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

启明云端分享|SSD20X_烧录mac地址文档参考

發布時間:2024/10/14 编程问答 44 豆豆
生活随笔 收集整理的這篇文章主要介紹了 启明云端分享|SSD20X_烧录mac地址文档参考 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

注:以下是針對單網口且MAC地址連續(一般批量MAC都是連續的)的情況,如果是雙網口,請參考最后雙網口的配置。
燒錄原理
1、SSD20X平臺的MAC地址保存于”ethaddr”這個環境變量中,我們可以通過在Uboot中設置該環境變量,從而設置MAC地址。

2、看起來,通過串口輸入命令可以實現燒錄MAC地址,但是操作比較繁瑣(每次都要輸入,還要MAC地址遞增)。因此,我們可以使用文件來保存MAC地址,文件可以保存到SD卡或者U盤中。
3、大概的邏輯是:Uboot啟動后,去讀取SD卡/U盤中的特定文件(保存著這次要燒錄的MAC地址信息),獲得MAC地址信息后,調用setenv -f ethaddr命令來設置設備MAC地址,同時,將文件中的MAC地址信息更新(遞增1,比如由88:A9:A7:00:00:01更新為88:A9:A7:00:00:02,這樣下一個設備就燒錄88:A9:A7:00:00:02,如此循環)。
4、使用fatread/fatwrite可以在Uboot下讀寫文件。
5、代碼中的實現在common/cmd_mster.c中:


6、燒錄的操作是在common/autoboot.c中調用的:

燒錄辦法
有2種燒錄辦法,一種是通過SD卡燒錄,另一種是通過U盤燒錄。要求SD卡和U盤都是FAT32格式:

打補丁
燒錄MAC地址的操作是在uboot階段完成的,補丁針對uboot:

cd u-boot-2015.01

patch -p1 < …/ssd20x_add_mac_burn.patch

打開MAC燒錄功能:

ARCH=arm make menuconfig

Device Drivers —>
[] MStar drivers —>
[] MSTAR SDMMC
[*] MSTAR MAC BRUN
這樣uboot就添加了燒錄MAC功能。
制作MAC數據
通過mac_split.sh來制作,mac_split.sh制作數據時,規定了前面4個字節時固定的,后面從開始數據遞增。每次最多制作0xFFFF個MAC數據,這里假設我們要要燒錄的mac地址為11:22:33:44:55:66(0x5566=21862)開始的1200個,則操作如下:

./mac_split.sh -h 11:22:33:44 -s 21862 -e 23061

這樣就會產生MAC_INDEX和MAC_21862 - MAC_23061的一系列文件:

把上面這些文件拷貝到SD卡或U盤中。
燒錄MAC
如果使用的是U盤燒錄,則需要先設置MacReadDev這個環境變量(SD卡則不需要):

setenv MacReadDev usb

saveenv

按住回車鍵再上電,進入uboot命令行之前,mac地址會燒錄完畢。
一些建議
?通過設置環境變量MacReadDev 來設置是通過U盤還是SD卡讀取MAC信息。這個環境變量可以在project/image/configs/i2m/script_nand.mk(nor flash 的話就是script_nor.mk)中設置:

如果不想按回車才執行燒錄,而是直接開機即燒錄,可以修改bootargs:

雙網口的情況
由于平臺的MAC地址只針對eth0,因此eth1需要在系統起來后使用ifconfig命令設置,例如:

ifconfig eth1 hw ether 00:70:27:00:00:03

一般情況下,eth0和eth1的MAC地址應該是連續的,所以我們可以在eth0的MAC地址上遞增1,比如eth0的MAC地址是00:70:27:00:00:01,那eth1的MAC地址應該設置為00:70:27:00:00:02。
上面的邏輯,可以通過以下腳本set_eth1_mac.sh來實現:
#!/bin/sh
ETH0_ADDR=ifconfig eth0 | grep eth0 | awk '{print $5}' | sed 's/:/ /g'
echo $ETH0_ADDR
BYTE1=16#echo $ETH0_ADDR | awk '{print $1}'
BYTE2=16#echo $ETH0_ADDR | awk '{print $2}'
BYTE3=16#echo $ETH0_ADDR | awk '{print $3}'
BYTE4=16#echo $ETH0_ADDR | awk '{print $4}'
BYTE5=16#echo $ETH0_ADDR | awk '{print $5}'
BYTE6=16#echo $ETH0_ADDR | awk '{print $6}'
echo " $BYTE1 $BYTE2 $BYTE3 $BYTE4 $BYTE5 $BYTE6"
VALUE=0x00
let “VALUE=(BYTE1<<40)+(BYTE2<<32)+(BYTE3<<24)+(BYTE4<<16)+(BYTE5<<8)+(BYTE6<<0)”
printf “0X%X\n” $VALUE
let “VALUE=VALUE+1”
printf “0X%X\n” $VALUE
NEW_BYTE1=16#0x00
NEW_BYTE2=16#0x00
NEW_BYTE3=16#0x00
NEW_BYTE4=16#0x00
NEW_BYTE5=16#0x00
NEW_BYTE6=16#0x00
let “NEW_BYTE1=(VALUE>>40)&0xFF”
let “NEW_BYTE2=(VALUE>>32)&0xFF”
let “NEW_BYTE3=(VALUE>>24)&0xFF”
let “NEW_BYTE4=(VALUE>>16)&0xFF”
let “NEW_BYTE5=(VALUE>>8)&0xFF”
let “NEW_BYTE6=(VALUE>>0)&0xFF”
#printf “new value: %0.2X:%0.2X:%0.2X:%0.2X:%0.2X:%0.2X\n” $NEW_BYTE1 $NEW_BYTE2 $NEW_BYTE3 $NEW_BYTE4 $NEW_BYTE5 $NEW_BYTE6
ETH1_ADDR=printf "%0.2X:%0.2X:%0.2X:%0.2X:%0.2X:%0.2X" $NEW_BYTE1 $NEW_BYTE2 $NEW_BYTE3 $NEW_BYTE4 $NEW_BYTE5 $NEW_BYTE6
echo set eth1_addr:$ETH1_ADDR
ifconfig eth1 hw ether $ETH1_ADDR up
我們將set_eth1_mac.sh放到project/image/rootfs/rootfs.tar.gz的etc/init.d中。接著修改project/image/configs/i2m/rootfs.mk,把set_eth1_mac.sh的執行放到etc/profile中:

這樣,每次系統啟動后,就會自動地去設置eth1的MAC地址了。
當然,有了2個網口后,MAC地址的更新不再是遞增1了,而是遞增2,所以我們需要修改common/cmd_mster.c:

總結

以上是生活随笔為你收集整理的启明云端分享|SSD20X_烧录mac地址文档参考的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。