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  

  

  

posted @   CrushGirl  阅读(1341)  评论(0编辑  收藏  举报
(评论功能已被禁用)
编辑推荐:
· 如何编写易于单元测试的代码
· 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】
点击右上角即可分享
微信分享提示