Firefly开源社区

打印 上一主题 下一主题

[技术讨论] 关于ubuntu每次启动MAC地址都发生变化的问题

31

积分

0

威望

0

贡献

技术小白

积分
31

关于ubuntu每次启动MAC地址都发生变化的问题

发表于 2022-8-10 09:50:25      浏览:3132 | 回复:2        打印      只看该作者   [复制链接] 楼主
问题描述及复现步骤:
刷了ubuntu18.04,每次启动MAC地址都会变化,下载了论坛里介绍的UpgradeDllTool和WNpctool,读写MAC地址都失败,不知道有什么办法没有。
2 n6 F2 n" m' z8 g: T! f* T

Log2022-08-05.zip

452 Bytes, 下载次数: 1, 下载积分: 灯泡 -1 , 经验 -1

回复

使用道具 举报

31

积分

0

威望

0

贡献

技术小白

积分
31
发表于 2022-8-10 15:10:28        只看该作者  沙发
问题没解决,我加您QQ了,请通过一下!
- P) y0 A1 T! j, r4 U) d
回复

使用道具 举报

31

积分

0

威望

0

贡献

技术小白

积分
31
发表于 2022-8-11 11:37:08        只看该作者  板凳
好啦,我自己搞定了:
, N2 E( T7 E6 Q4 P. K) K1、小板子上执行 dmesg | grep mac,找到大致下面信息,发现mac地址的获取是通过rk_get_eth_addr这个函数。) i/ @* V# i7 ]' B
rk_get_eth_addr: rk_vendor_read eth mac address failed (-1)
, V$ a! |! d2 h+ K( s, V) I- lrk_get_eth_addr: rk_vendor_write eth mac address failed (-1)
) ], ~2 ]1 p# k3 O& T* X3 ]3 j- \, w2 drk_get_eth_addr: mac address: cc:10:ad:eb:70:556 L" J4 f& ~& n4 d9 b) e  _
2、执行grep rk_get_eth_addr -r ./  定位rk_get_eth_addr函数在kernel/drivers/net/ethernet/stmicro/stmmac/dwmac-rk.c文件里, V1 J3 v" Z5 k4 e) a* w
3、找到这个函数,在if (ret != 6 || is_zero_ether_addr(addr)) {这段代码的后面加上这些内容:
; B  f% t- `1 a/*modified by woodrow*/
- [6 G% ^2 m1 K* m                union {0 l: X" ]% M) \# J
                        unsigned long ul;
" Z: |9 E0 X9 c' N4 Q, K: f                        unsigned char uc[8];
' h, D9 a4 N1 g                } cc;! Q, p: P" L, f  k- R  h8 u
                //random_ether_addr(addr);
/ t% b7 |& R5 ~. n. A8 y                // dev_err(dev, "%s: generate random eth mac address: %02x:%02x:%02x:%02x:%02x:%02x",) q8 v, y* ?/ G3 W
                //                         __func__, addr[0], addr[1], addr[2]," z. m$ q8 W6 g
                //                         addr[3], addr[4], addr[5]);, o, f, T9 D( Z8 [1 y  D
                unsigned long system_low = (unsigned long)system_serial_low;
5 Q# e" t% N6 M- g* T4 B8 Q                unsigned long system_high = (unsigned long)system_serial_high;
9 B9 R* ]5 s9 ?8 W- }! r                dev_err(dev, "%s: rk_vendor_read eth mac address failed (%d)", __func__, ret);+ e! M" G& B' ~* o
                dev_err(dev, "%s: system_serial_low (%lu), system_serial_high (%lu).\n", __func__, system_low, system_high);
% Q! c% o, @7 p( |; y+ L                cc.ul = system_low;
! Q8 i7 L5 w" Z4 ^$ v  g                addr[0] = 0xcc;+ c8 M1 T$ [/ H% Q: j0 U
                addr[1] = 0x10;4 c9 s# I: `# t+ B  a
                addr[2] = cc.uc[3];* ?9 k( Q9 b1 w/ W
                addr[3] = cc.uc[2];9 q0 F0 q. h* S- z
                addr[4] = cc.uc[1];
; C1 s7 s! @* P" K8 m8 r/ e                addr[5] = cc.uc[0];
0 ?1 {9 Q' P7 b, M9 U1 J/*modified by woodrow*/
; K6 x. K8 A; ]! E1 |这段代码的用途是,当没有在vendor_storage里读到mac地址的时候,不是随机产生一个mac地址,而是将cpu序列号作为mac地址的一部分。cpu序列号:system_serial_low和system_serial_high是2个全局变量,需要引入头文件:#include <asm/system_info.h>才能使用。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

友情链接 : 爱板网 电子发烧友论坛 云汉电子社区 粤ICP备14022046号-2
快速回复 返回顶部 返回列表