Linux下读取网卡默认MAC地址的方法

来源:
导读 大家好,我是本期栏目编辑小友,现在为大家讲解Linux下读取网卡默认MAC地址的方法问题。 媒体访问控制用于定义网络设备的位置。MAC是嵌入式

大家好,我是本期栏目编辑小友,现在为大家讲解Linux下读取网卡默认MAC地址的方法问题。

媒体访问控制用于定义网络设备的位置。MAC是嵌入式linux学习中不可避免的。本文主要描述如何通过操作OTP读取嵌入式linux设备网卡中的MAC地址。

1.1适用范围。

主要介绍了网卡MAC地址的读取方法,适用于EasyARM-i.MX287A开发套件,其应用原理和支持实例也适用于下表1.1所列的产品型号。

表1.1适用的产品型号。

1.2原理介绍。

媒体访问控制用于定义网络设备的位置。用于表示互联网上每个站点的标识符,以十六进制数表示,共有六个字节(48位)。其中,前三个字节是由IEEE注册机构RA分配给不同厂商的代码(高阶24位),也称为“组织唯一标识符”,后三个字节(低阶24位)分配给各厂商生产的适配器接口,称为扩展标识符(唯一性)。一个地址块可以生成2 24个不同的地址。媒体访问控制地址实际上是适配器地址或适配器标识符。MAC是全球独一无二的。

“网卡默认MAC”是广州致远电子有限公司为Awork开发套件和M283、M287工控核心板开发的功能。网卡的MAC地址通过芯片的OTP存储。我公司生产的核心板和开发套件的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.3技术实现。

内核编译。

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

按回车键进入设备驱动程序选项,如下图3.1所示。

图3.1内核配置。

通过按回车键进入Chracter设备选项。如图3.2所示。

图3.2内核配置。

按空格键,选择选项*飞思卡尔片上OTP内存支持,如图3.3内核配置图3.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/uiimage”中,生成的内核固件通过TF卡烧录到NANDFlash中。

1.4阅读MAC练习。

下面介绍读取网卡MAC的操作过程,其本质是操作OTP设备文件。

1.4.1执行MAC脚本文件。

将本文档目录下的MAC.sh文件通过u盘或TF卡复制到EasyARM-i.MX287A开发工具包中,将文件权限改为可执行权限。请参考以下命令:

root @ EasyArm-IMx28x ~ # chmod 777 MAC . sh

p>   root@EasyARM-iMX28x ~# ./MAC.sh

  执行后,查看网络设备,MAC如图4.1所示。

图4.1 网络设备图

  查看“/sys/fsl_otp/HW_OCOTP_SRK1”和“/sys/fsl_otp/HW_OCOTP_SRK0”设备。可以发现,网卡MAC低4位其实就是保存在OTP中的值,如图4.2所示。

图4.2 OTP读取图

  MAC(Media Access Control,介质访问控制)是用来定义网络设备的位置。在嵌入式linux学习中无可避免也会遇到MAC,本文主要描述了如何通过操作OTP来读取嵌入式linux设备网卡中的MAC地址

  1.1 适用范围

  这里主要介绍读取网卡MAC地址的方法,适用于EasyARM-i.MX287A开发套件,其应用原理及配套示例也适用于下表1.1所列出的产品型号。

表1.1 适用产品型号

  1.2 原理介绍

  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.3 技术实现

  1.3.1 内核编译

  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选项,如下图3.1所示。

图3.1 内核配置

  按回车键,进入Chracter devices选项。如图3.2所示。

图3.2 内核配置

  按空格键,选择<*> Freescale On-Chip OTP Memory Support选项,如图3.3 内核配置图3.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。

  1.4 读取MAC实操

  下面介绍读取网卡MAC操作过程,其实质是操作OTP设备文件。

  1.4.1 执行MAC脚本文件

  将本文档目录下MAC.sh文件通过U盘或TF卡拷贝到EasyARM-i.MX287A开发套件,修改文件权限为可执行权限,参考命令如下:

  root@EasyARM-iMX28x ~# chmod 777 MAC.sh

  root@EasyARM-iMX28x ~# ./MAC.sh

  执行后,查看网络设备,MAC如图4.1所示。

图4.1 网络设备图

  查看“/sys/fsl_otp/HW_OCOTP_SRK1”和“/sys/fsl_otp/HW_OCOTP_SRK0”设备。可以发现,网卡MAC低4位其实就是保存在OTP中的值,如图4.2所示。

图4.2 OTP读取图

技术专区 低成本开发系统现在正处于物联网期望膨胀峰值期 因特尔Cyclone 10 LP FPGA评估板电路图集及PCB装配图 采用32位MCU系列对新型无磁水表设计 一个嵌入式或者X86的工业控制板上,少不了CAN口! 以MSP432主机微控制器的软件与硬件集成解决方案

标签:

版权声明:转载此文是出于传递更多信息之目的。若有来源标注错误或侵犯了您的合法权益,请作者持权属证明与本网联系,我们将及时更正、删除,谢谢您的支持与理解。