Firefly开源社区
标题:
关于ubuntu每次启动MAC地址都发生变化的问题
[打印本页]
作者:
woodrow_wang
时间:
2022-8-10 09:50
标题:
关于ubuntu每次启动MAC地址都发生变化的问题
刷了ubuntu18.04,每次启动MAC地址都会变化,下载了论坛里介绍的UpgradeDllTool和WNpctool,读写MAC地址都失败,不知道有什么办法没有。
1 q; n( F2 G# b a3 ]
tchip_askquestions
Log2022-08-05.zip
2022-8-10 09:50 上传
点击文件名下载附件
下载积分: 灯泡 -1 , 经验 -1
452 Bytes, 下载次数: 1, 下载积分: 灯泡 -1 , 经验 -1
作者:
woodrow_wang
时间:
2022-8-10 15:10
问题没解决,我加您QQ了,请通过一下!
' u- s3 g1 ?2 y8 i
作者:
woodrow_wang
时间:
2022-8-11 11:37
好啦,我自己搞定了:
* u6 e: \5 u3 p# G
1、小板子上执行 dmesg | grep mac,找到大致下面信息,发现mac地址的获取是通过rk_get_eth_addr这个函数。
+ s P; N, {& K! k) o% i2 k, i
rk_get_eth_addr: rk_vendor_read eth mac address failed (-1)
$ @7 P; V. U6 G7 A7 z
rk_get_eth_addr: rk_vendor_write eth mac address failed (-1)
$ F! k! d8 P3 D: K, N
rk_get_eth_addr: mac address: cc:10:ad:eb:70:55
/ o+ T( h" L- X" [+ ^7 r6 ~
2、执行grep rk_get_eth_addr -r ./ 定位rk_get_eth_addr函数在kernel/drivers/net/ethernet/stmicro/stmmac/dwmac-rk.c文件里
2 L! X$ T/ F; K& C1 q3 R
3、找到这个函数,在if (ret != 6 || is_zero_ether_addr(addr)) {这段代码的后面加上这些内容:
- U+ d0 z( O$ n! \1 N" r7 Y
/*modified by woodrow*/
% Z$ J1 I9 A. J# _
union {
+ s; f" @( X) A- l4 ?6 j
unsigned long ul;
8 q# y7 P5 J* w. |
unsigned char uc[8];
8 z+ A+ B4 k$ u' j# \: }
} cc;
" t4 r4 Z' B) m% }0 B& i5 I# D: p
//random_ether_addr(addr);
! B$ O. p- J) f/ T6 S9 q! Y
// dev_err(dev, "%s: generate random eth mac address: %02x:%02x:%02x:%02x:%02x:%02x",
; q' X% ^( i* p, m
// __func__, addr[0], addr[1], addr[2],
) k2 o! a; L' _# J6 [' U* k
// addr[3], addr[4], addr[5]);
6 g% f- M- ?& N% e
unsigned long system_low = (unsigned long)system_serial_low;
6 `$ W# Y+ y% Q) H. t$ ?
unsigned long system_high = (unsigned long)system_serial_high;
& W" C$ ^' O V8 y" Z
dev_err(dev, "%s: rk_vendor_read eth mac address failed (%d)", __func__, ret);
+ X: o9 A- v7 N
dev_err(dev, "%s: system_serial_low (%lu), system_serial_high (%lu).\n", __func__, system_low, system_high);
5 o+ O, k9 E- p( H% a
cc.ul = system_low;
; e; L9 ?# _. r$ M2 t
addr[0] = 0xcc;
* q4 V& m2 f+ R7 h( x0 `
addr[1] = 0x10;
- d7 p- }' x: ]2 p
addr[2] = cc.uc[3];
4 k' p4 X7 H! D. Y
addr[3] = cc.uc[2];
* F6 y( Q& K: A$ _8 U) ^
addr[4] = cc.uc[1];
5 `2 w/ ?. z1 N' b6 p; A3 [
addr[5] = cc.uc[0];
3 P# z9 A9 W! _
/*modified by woodrow*/
& a+ R0 q) N9 J+ }! k/ S
这段代码的用途是,当没有在vendor_storage里读到mac地址的时候,不是随机产生一个mac地址,而是将cpu序列号作为mac地址的一部分。cpu序列号:system_serial_low和system_serial_high是2个全局变量,需要引入头文件:#include <asm/system_info.h>才能使用。
欢迎光临 Firefly开源社区 (https://dev.t-firefly.com/)
Powered by Discuz! X3.1