type
status
date
slug
summary
tags
category
icon
password
🤓 基本原理
在uboot启动阶段通过I2C接口读取EEPROM中提前设置好的MAC地址,并将该MAC地址设置到
ethaddr
、eth1addr
环境变量后,uboot在common/fdt_support.c
中会将环境变量设置ethernet@fe010000
、ethernet@fe2a0000
设备树节点下的local-mac-address
属性中,之后在内核启动后gmac驱动中会获取网卡相应节点下该属性值,并设置到mac中。uboot相关代码
驱动:kernel/drivers/net/ethernet/stmicro/stmmac/dwmac-rk.c
参考:
📝 相关配置
- 增加ID_EPPROM支持
将
u-boot/board/freescale/common
下的sys_eeprom.c
和eeprom.h
拷贝到board/rockchip/evb_rk3568/evb_rk3568.c
目录下,并修改Kconfig,增加以下内容并在该文件夹下的Makefile中加入
- 修改uboot内容
- 修改uboot下的config文件
- 修改设备树文件
eeprom的型号为AT24C512,地址长度为2个字节。I2C总线为5,设备地址为0x51。
设备树文件目录:
arch/arm/dts/rk3568-nanopi-r5s.dtsi
在I2C5节点下增加eeprom节点
- 修改相关驱动
- sys_eeprom.c
- cmd/i2c.c
- drivers/i2c/i2c-uclass.c
修改eeprom结构体SN号数组长度为13位
在
prog_eeprom
函数中修改每次写入页大小为128字节,写入时间为10ms在
mac_read_from_eeprom
函数中注释以下语句,改为强制设置mac地址修改i2c默认字长为2
修改
do_i2c_read
函数下强制offest_len为2修改
i2c_set_chip_offset_len
函数下强制offest_len为2- Author:INvain
- URL:https://invain.xyz/article/18663689-12f0-4757-b6b0-6388b29e4d4c
- Copyright:All articles in this blog, except for special statements, adopt BY-NC-SA agreement. Please indicate the source!