RK: rk3288 以太网mac 地址 生成
一.先上一份日志
1.1.eth_mac_idb
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | lowmemorykiller: lowmem_shrink: convert oom_adj to oom_score_adj: lowmemorykiller: oom_adj 0 => oom_score_adj 0 lowmemorykiller: oom_adj 1 => oom_score_adj 58 lowmemorykiller: oom_adj 2 => oom_score_adj 117 lowmemorykiller: oom_adj 3 => oom_score_adj 176 lowmemorykiller: oom_adj 9 => oom_score_adj 529 lowmemorykiller: oom_adj 15 => oom_score_adj 1000 acc_open acc_release phy_power_on: enable = 1 11111111 err = 0 Read the Ethernet MAC address from IDB:e2: 76 :1e: 08 : 31 : 07 eth0: device MAC address e2: 76 :1e: 08 : 31 : 07 phy_rtl8201f_led_fixup in libphy: stmmac: probed eth0: PHY ID 001cc816 at 0 IRQ 0 (stmmac- 0 : 00 ) active |
1.2.etherm_addr_from_cpuid
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | lowmemorykiller: lowmem_shrink: convert oom_adj to oom_score_adj: lowmemorykiller: oom_adj 0 => oom_score_adj 0 lowmemorykiller: oom_adj 1 => oom_score_adj 58 lowmemorykiller: oom_adj 2 => oom_score_adj 117 lowmemorykiller: oom_adj 3 => oom_score_adj 176 lowmemorykiller: oom_adj 9 => oom_score_adj 529 lowmemorykiller: oom_adj 15 => oom_score_adj 1000 acc_open acc_release phy_power_on: enable = 1 11111111 err = 0 Read the Ethernet MAC address from IDB: 00 : 00 : 00 : 00 : 00 : 00 etherm_addr_from_cpuid system_serial_low=75cef2b1,system_serial_high=4666831a the vendor enable_mac= 0x1 use mac from vendor! the vendor mac e2: 76 :1e: 08 : 31 : 23 eth0: device MAC address e2: 76 :1e: 08 : 31 : 23 phy_rtl8201f_led_fixup in libphy: stmmac: probed eth0: PHY ID 001cc816 at 0 IRQ 0 (stmmac- 0 : 00 ) active |
二.分析一下源码 驱动读取MAC address流程
stmmac_check_ether_addr
eth_mac_idb
etherm_addr_from_cpuid
eth_hw_addr_random
2.1.Z:\ZK_R32X_RK3288_ANDROID5.1\ZK_R32X_RK3288_ANDROID5.1\kernel\drivers\net\ethernet\rockchip\gmac\stmmac_main.c
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | static void stmmac_check_ether_addr(struct stmmac_priv *priv) { if (!is_valid_ether_addr(priv->dev->dev_addr)) { priv->hw->mac->get_umac_addr(( void __iomem *) priv->dev->base_addr, priv->dev->dev_addr, 0 ); if (!is_valid_ether_addr(priv->dev->dev_addr))<br> //rk 烧写工具 eth_mac_idb(priv->dev->dev_addr); if (!is_valid_ether_addr(priv->dev->dev_addr))<br> //cpuid 计算 lan Mac 地址 etherm_addr_from_cpuid(priv->dev->dev_addr); if (!is_valid_ether_addr(priv->dev->dev_addr))<br> //随机生成 eth_hw_addr_random(priv->dev); } pr_warn( "%s: device MAC address %pM\n" , priv->dev->name, priv->dev->dev_addr); } |
2.2. Z:\ZK_R32X_RK3288_ANDROID5.1\ZK_R32X_RK3288_ANDROID5.1\kernel\drivers\net\ethernet\rockchip\eth_mac.c
2.2.1.eth_mac_idb
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | int eth_mac_idb(u8 *eth_mac) { int i; int err = 0 ; memset(eth_mac, 0 , 6 ); err = eth_mac_read_from_IDB(eth_mac); if (err) return - 1 ; printk( "Read the Ethernet MAC address from IDB:" ); for (i = 0 ; i < 5 ; i++) printk( "%2.2x:" , eth_mac[i]); printk( "%2.2x\n" , eth_mac[i]); return 0 ; } |
2.2.2.etherm_addr_from_cpuid md5 加密
// Apply md5 process to system_serial_mac
分类:
RockChip
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】