u-boot与linux下网卡MAC地址的更改

本文介绍了嵌入式系统中如何保证网卡MAC地址不被轻易更改,通常通过u-boot环境变量或网卡芯片的EEPROM存储。在u-boot中,MAC地址可以通过环境变量ethaddr获取或从硬件芯片读取。为了防止MAC地址被覆盖,可以设置环境变量保护。同时,文章也提供了在u-boot和Linux中更改MAC地址的方法,包括销毁或重新编译u-boot,以及使用ifconfig命令和sysV-init脚本。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

前言

①假设有许多开发板,连接到了同一个路由器中,而路由器的dhcpd是根据MAC地址来分配一个固定的IP地址,那么就需要为每一个开发板设定一个不同的MAC地址从而获取不同的IP地址。

②MAC地址是需要购买的(参考点1),在产品出厂之前,都需要给板子一个MAC地址(如果有对应的设备,例如网卡,Wifi)。且这个MAC地址在出厂后,我们并不期望被更改。

下面简述了嵌入式产品中如何保证IP地址不被更改的、以及开发过程或者生产过程如何更改MAC地址。

不被更改的方法

嵌入式中对于期望不被更改的数据,一般都是存放在无法被直接擦除或者修改的存储设备中,例如nand、eMMC、EEPROM、带保护的Nor Flash、甚至是直接写在程序中。这里说的无法被直接修改是相对内存而言的,并不是无法被修改。例如nand在修改之前,一般是需要去保护、擦除。

具体的,对于嵌入式产品而言,一般都是使用u-boot来作为bootloader,u-boot将需要的一些参数放在环境变量中,例如MAC地址就是从环境变量ethaddr中获取的。因此要保证MAC地址能够不被直接修改,那么可以将u-boot中的环境变量放在一个带有保护措施的存储器中,在需要改写的时候去除保护,改写完成后再进行保护。

u-boot启动后,在板极硬件初始化的过程中,会去初始化网卡,并获取MAC地址,这有两种情况:

  1. 在初始化的过程中会去读取MAC地址相关的环境变量
  2. 也有可能是从网卡芯片中的内置EEPROM获取MAC地址(例如SMC911x,就会有一个EEPROM存储MAC地址,上电后,会将此IP地址加载到用户可以访问的寄存器中)

调用的路径如下,具体详细的关于u-boot中eth driver的说明参考u-boot中的文档doc/drivers.net.eth:

board_init()
eth_initialize()
board_eth_init() / cpu_eth_init()
driver_register()
initialize eth_device
eth_register()

从环境变量ethaddr获取MAC地址的实例

具体到瑞萨的Cortex-A15芯片而言,如果使用的是SoC自带的ether,那么在board_eth_init中会从环境变量中读取ethaddr环境变量,来获取MAC地址。代码文件sh-net.c

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值