项目中用了mac地址MD5后的字符做设备的唯一标识符。
目前发现小批量试产200套的设备中大概有20多台,发现其MAC地址每次开机都会变化,随机生成的一个mac地址,但是其它100多台的mac地址是固定不会变化的,看起来也是唯一mac地址。(uboot kernel rootfs等一切程序都是完全一样的)
uboot跟kernel用的是荔枝派的
uboot版本是U-Boot 2017.01-rc2-00057-g32ab1804cd-dirty (Apr 16 2021 - 20:14:05 +0800) Allwinner Technology
kernel版本是Linux version 4.14.14-59834-gcda44c146b9b-dirty (kupeiot@kupeiot-server) (gcc version 4.9.4 (Linaro GCC 4.9-2017.01)) #6 SMP Wed Jun 23 09:03:57 UTC 2021
在此求助大佬们,请教下这种现象是什么情况。为什么同固件会有不同的现象,还有就是如何获取CPU ID? 想用CPU ID去设置mac地址。
离线
用sunxi-fel 读出来的sid是 v3s的id, 还是芯片的id?
https://whycan.com/t_324.html#p2445
全志v3s 运行主线linux 4.13-y 以太网口的 MAC地址是不是固定的 我每次重启 MAC地址都会变化, 应该如何固定?
https://whycan.com/t_427.html#p1093
两个帖子一起看,然后做一个启动脚本: /etc/init.d/S91initmac
#解析 /proc/cpuinfo serial
#设置 mac 地址
离线
u-boot 会根据芯片 id 生成 mac 地址(实现代码在 board/sunxi/board.c 中的 setup_environment 函数里),并传递给 Linux 内核(实现代码在 common/fdt_support.c 中的 fdt_fixup_ethernet 函数里)。前提是 dts 要配置。
在 u-boot 的 dts 中的 aliases 里加上 ethernet0 = &emac; 这样 u-boot 就会自动生成 ethaddr 环境变量。在 Linux 的 dts 中除了加上 aliases 的那句,还要在 emac 里加上 mac-address = [ 00 00 00 00 00 00 ]; 这么一个占位符,那么 u-boot 在启动 Linux 内核的时候,会将环境变量里的 ethaddr 环境变量里的内容覆盖写入 Linux 的 dts 里,这样 Linux 就能得到由芯片 id 生成的 mac 地址了。
所以检查一下 dts 的相关配置
离线
@benlypan
您好,因为这个问题是很小一批出现,刚开始出现这个问题我都是让他们直接更换v3s芯片,然后它就好了,mac地址也是固定的了。。。。
我的设备树中的确加了eth的相关信息
aliases {
serial0 = &uart0;
ethernet0 = &emac;
};
&emac {
phy-handle = <&int_mii_phy>;
phy-mode = "mii";
allwinner,leds-active-low;
status = "okay";
};
但是为什么只有部分芯片才会这样 我还是没搞清楚
离线