linux直接读取物理地址(Linux下读取默认MAC地址的方法)
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配置内核 。配置步骤如下:
按回车键 ,进入Device Drivers选项 ,如下图1所示。
图1内核配置
按回车键 ,进入Chracter devices选项 。如下图2所示 。
图2内核配置
按空格键 ,选择<*> Freescale On-Chip OTP Memory Support选项 ,如图3 内核配置图3所示 。
图3内核配置
按回车键 ,保存退出 。
2.编译内核
在当前目录下执行如下命令编译内核 ,参考命令如下:
内核固件位于“arch/arm/boot/uImage ” ,将生成的内核固件通过TF卡烧写到NANDFlash 。
四 、读取MAC实操
下面介绍读取网卡MAC操作过程 ,其实质是操作OTP设备文件 。
执行MAC脚本文件
将本文档目录下MAC.sh文件通过U盘或TF卡拷贝到EasyARM-i.MX287A开发套件 ,修改文件权限为可执行权限,参考命令如下:
执行后 ,查看网络设备 ,MAC如图5所示 。
图5网络设备图
查看“/sys/fsl_otp/HW_OCOTP_SRK1 ”和“/sys/fsl_otp/HW_OCOTP_SRK0 ”设备 。可以发现,网卡MAC低4位其实就是保存在OTP中的值 ,如图6所示 。
图6 OTP读取图
创心域SEO版权声明:以上内容作者已申请原创保护,未经允许不得转载,侵权必究!授权事宜、对本内容有异议或投诉,敬请联系网站管理员,我们将尽快回复您,谢谢合作!