Linux下讀取預設MAC位址

2021-09-22 07:27:36 字數 1832 閱讀 8663

一、適用範圍

這裡主要介紹讀取網絡卡mac位址的方法,適用於easyarm-i.mx287a開發套件,其應用原理及配套示例也適用於下表1.1所列出的產品型號。

二、原理介紹

mac(media access control,介質訪問控制)是用來定義網路裝置的位置。用來表示網際網路上每乙個站點的識別符號,採用十六進製制數表示,共六個位元組(48位)。其中,前三個位元組是由ieee的註冊管理機構ra負責給不同廠家分配的**(高位24位),也稱為「編制上唯一的識別符號」(organizationally unique identifier),後三個位元組(低位24位)由各廠家自行指派給生產的介面卡介面,稱為擴充套件識別符號(唯一性)。乙個位址塊可以生成2^24個不同的位址。mac位址實際上就是介面卡位址或介面卡識別符號。mac具有全球唯一性。

「網絡卡的預設mac」是廣州致遠電子股份****針對awork開發套件和m283、m287工控核心板開發的一項功能,通過晶元的otp來儲存網絡卡mac位址,我公司出廠的核心板和開發套件的mac位址的前兩個位元組固定為「0x00」,「0x04」,後四個位元組儲存在otp中,本文件主要描述了如何通過操作otp來讀取網絡卡mac位址。

在核心配置otp選項,編譯出的核心啟動後,在檔案系統中會匯出otp裝置檔案,通過操作這些裝置檔案來讀取資訊。可以將已經註冊的網絡卡mac資訊首先固化到otp中,在應用層就可以讀取。mac0位址的低4位可以通過裝置檔案「/sys/fsl_otg/sbk0」讀取,mac1位址的低4位可以通過裝置檔案「/sys/fsl_otg/sbk1」讀取。

注意:如果使用的是m287、m283工控板,不需要配置核心。

三、技術實現

核心編譯

1.配置核心

進入linux-2.6.35.3目錄。執行make menuconfig配置核心。配置步驟如下:

sok@zlgmcu:~$ cd linux-2.6.35.3/

sok@zlgmcu:~/linux-2.6.35.3$ make menuconfig

按回車鍵,進入device drivers選項,

按回車鍵,進入chracter devices選項。

按空格鍵,選擇 freescale on-chip otp memory support選項,如圖3 核心配置。

按回車鍵,儲存退出。

2.編譯核心

在當前目錄下執行如下命令編譯核心,參考命令如下:

vmuser@linux-host:~/ linux-2.6.35.3$ make clean

vmuser@linux-host:~/ linux-2.6.35.3$ make uimage

核心韌體位於「arch/arm/boot/uimage」,將生成的核心韌體通過tf卡燒寫到nandflash。

四、讀取mac實操

下面介紹讀取網絡卡mac操作過程,其實質是操作otp裝置檔案。

執行mac指令碼檔案

將本文件目錄下mac.s**件通過u盤或tf卡拷貝到easyarm-i.mx287a開發套件,修改檔案許可權為可執行許可權,參考命令如下:

root@easyarm-imx28x ~# chmod 777 mac.sh

root@easyarm-imx28x ~# ./mac.sh

執行後,檢視網路裝置,mac

檢視「/sys/fsl_otp/hw_ocotp_srk1」和「/sys/fsl_otp/hw_ocotp_srk0」裝置。可以發現,網絡卡mac低4位其實就是儲存在otp中的值。

Linux下讀取預設MAC位址

mac media access control,介質訪問控制 計算機通過它來定義並識別網路裝置的位置。在嵌入式linux學習中不可避免也會遇到mac,本文主要描述了如何通過操作otp來讀取嵌入式linux裝置網絡卡中的mac位址!一 適用範圍 這裡主要介紹讀取網絡卡mac位址的方法,適用於easy...

Linux下讀取預設MAC位址

mac media access control,介質訪問控制 計算機通過它來定義並識別網路裝置的位置。在嵌入式linux學習中不可避免也會遇到mac,本文主要描述了如何通過操作otp來讀取嵌入式linux裝置網絡卡中的mac位址!一 適用範圍 這裡主要介紹讀取網絡卡mac位址的方法,適用於easy...

LINUX下獲取IP位址和MAC位址

include include include include include include include include ifdef solaris include endif define maxinte ces 16 main argc,argv register int argc reg...