RK: rk3288 以太网mac 地址 生成

一.先上一份日志 

1.1.eth_mac_idb

 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

 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:K_R32X_RK3288_ANDROID5.1K_R32X_RK3288_ANDROID5.1kerneldrivers etethernet ockchipgmacstmmac_main.c

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))
               //rk 烧写工具 eth_mac_idb(priv->dev->dev_addr); if (!is_valid_ether_addr(priv->dev->dev_addr))
              //cpuid 计算 lan Mac 地址 etherm_addr_from_cpuid(priv->dev->dev_addr); if(!is_valid_ether_addr(priv->dev->dev_addr))
              //随机生成 eth_hw_addr_random(priv->dev); } pr_warn("%s: device MAC address %pM ", priv->dev->name, priv->dev->dev_addr); }

2.2. Z:K_R32X_RK3288_ANDROID5.1K_R32X_RK3288_ANDROID5.1kerneldrivers etethernet ockchipeth_mac.c 

2.2.1.eth_mac_idb  

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
", eth_mac[i]);

	return 0;
}

2.2.2.etherm_addr_from_cpuid md5 加密

 // Apply md5 process to system_serial_mac  

  

  

原文地址:https://www.cnblogs.com/crushgirl/p/14592652.html