本文檔介紹如何簡易修改迅為- iMX6 開發(fā)板 Android4.4 系統(tǒng)的 MAC 地址,在網(wǎng)絡(luò)通信中, 會(huì)用到 MAC 地址,開發(fā)板源碼中默認(rèn)的 MAC 地址全部一樣,這樣會(huì)引起沖突,導(dǎo)致網(wǎng)絡(luò)通 信故障。 iMX6 的 uboot 和 kernel 源碼中默認(rèn)帶有通過環(huán)境變量設(shè)置 MAC 地址的源碼,只需要 簡單修改,即可添加上設(shè)置 MAC 地址功能。另外請注意,如果 MAC 地址不合法,在內(nèi)核代碼中會(huì)糾正,導(dǎo)致設(shè)置的 MAC 地址和系 統(tǒng)啟動(dòng)之后的 MAC 地址不一樣。 1.uboot 源碼修改uboot uboot 源碼在源碼包解壓得到文件夾“bootable/bootloader/uboot-imx”下,進(jìn)入目 錄使用命令“vim lib_arm/board.c”打開文件。 uboot 在“stdio_init (); /* get the devices list going. */”這一行代碼下添加調(diào)用獲取 MAC 地址的環(huán)境變量的函數(shù),如下圖所示。 ![]() 修改之后的源碼如下: //add by rty 20180724 eth_initialize(gd->bd); //add end 保存“l(fā)ib_arm/board.c”退出。 然后使用命令“vim drivers/net/mxc_fec.c”打開文件,如下圖所示,將“static int fec_get_hwaddr(struct eth_device *dev, unsigned char *mac)”修改。 ![]() 修改之后的代碼如下: ![]() 保存退出,uboot 就可以獲取環(huán)境變量中的 ethaddr 參數(shù)。 2.kernel 源碼修改 kernel 源碼在源碼包解壓得到文件夾“kernel_imx”下,進(jìn)入目錄使用命令“vim arch/arm/mach-mx6/mx6_fec.c”打開文件。 如下圖所示,將“void __init imx6_init_fec(struct fec_platform_data fec_data)”函 數(shù)修改。 ![]() 修改之后的源碼如下: ![]() 3.測試 編譯代碼,燒寫鏡像,進(jìn)入 uboot 模式,如下圖所示,使用命令“printenv”,可以查 閱到環(huán)境變量“ethaddr=22:33:56:18:89:67”,默認(rèn)的 MAC 地址是“22:33:56:18:89:67”。 ![]() 重啟之后,進(jìn)入 android,在控制臺(tái)使用命令“ip link show”,如下圖所示。這個(gè) MAC 地址和 uboot 設(shè)置的地址相同。 ![]() 重啟開發(fā)板,進(jìn)入 uboot 模式,然后使用命令“setenv ethaddr 00:11:22:33:44:55”重 新設(shè)置 MAC 地址,接著使用“saveenv”命令保存環(huán)境變量,如下圖所示。 ![]() 如下圖所示,在 uboot 中使用命令“printenv”,MAC 地址在 uboot 環(huán)境變量中設(shè)置 為“ethaddr=00:11:22:33:44:55” ![]() 重啟開發(fā)板,進(jìn)入 android 系統(tǒng),再次使用“ip link show”命令查閱 MAC 地址,如下 圖所示,MAC 地址已經(jīng)修改過來了。
![]() |