Linux下讀取預設MAC位址

2021-07-14 08:57:04 字數 2428 閱讀 7741

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

一、適用範圍

這裡主要介紹讀取網絡卡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選項,如下圖1所示。

圖1核心配置

按回車鍵,進入chracter devices選項。如下圖2所示。

圖2核心配置

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

圖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指令碼檔案

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

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

執行後,檢視網路裝置,mac如圖5所示。

圖5網路裝置圖

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

圖6 otp讀取圖

免費提供最新

linux

Linux下讀取預設MAC位址

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

Linux下讀取預設MAC位址

一 適用範圍 這裡主要介紹讀取網絡卡mac位址的方法,適用於easyarm i.mx287a開發套件,其應用原理及配套示例也適用於下表1.1所列出的產品型號。二 原理介紹 mac media access control,介質訪問控制 是用來定義網路裝置的位置。用來表示網際網路上每乙個站點的識別符號...

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...