news 2026/8/7 11:20:15

rk3506 cpuinfo两个板卡一致问题

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
rk3506 cpuinfo两个板卡一致问题

cat /proc/cpuinfo两个板卡一致

1.原因分析

先说结论:这个 Serial 不是芯片真实 ID,是 U-Boot 塞进设备树的一个固定值;内核里真正按芯片唯一 ID 计算序列号的代码被一个永远不成立的宏编译掉了。 原因分析/proc/cpuinfo 的 Serial 有两个来源,优先级如下: 设备树根节点的 serial-number 属性(U-Boot 启动时注入)—— setup.c#L959-L970 优先使用它。你们的 U-Boot 是预编译的 uboot.img,它读不到有效的每芯片 ID 时会用固定回退值生成 serial#,于是两块板都是437255c32d0716be。 内核从 OTP 芯片唯一 ID 算出的 CRC 序列号 —— rockchip-cpuinfo.c 会读 OTP 里16字节的芯片 ID(每颗芯片出厂唯一)并算出序列号,但这段代码被 #ifdef CONFIG_NO_GKI 包住,而整个内核树里根本不存在 NO_GKI 这个 Kconfig 符号,所以从未生效。 前提条件其实都齐了:rk3506_emmc_defconfig 已有 CONFIG_ROCKCHIP_CPUINFO=y、CONFIG_NVMEM_ROCKCHIP_OTP=y,rk3502.dtsi 里也有 otp 和 cpuinfo 节点(otp_id:id@a)。 已做的修改 rockchip-cpuinfo.c:去掉 #ifdef CONFIG_NO_GKI 保护,让驱动始终从 OTP 芯片 ID 计算 system_serial_high/low。 setup.c:/proc/cpuinfo 输出时优先使用 OTP 派生的序列号,仅当其为0时才回退到 U-Boot 注入的 serial-number(这样也不受驱动 probe 时序影响)。

2.修改patch

modified:SMH-STD3506/sdk_linux/linux-6.1/arch/arm/kernel/setup.c modified:SMH-STD3506/sdk_linux/linux-6.1/drivers/soc/rockchip/rockchip-cpuinfo.c no changes added tocommit(use"git add"and/or"git commit -a")root@a4694c04b1a9:/home/cyzhangep/workspace/3506_130version/std_v3_0319/code/device/board/hhwl# git diff SMH-STD3506/sdk_linux/linux-6.1/arch/arm/kernel/setup.c diff--git a/SMH-STD3506/sdk_linux/linux-6.1/arch/arm/kernel/setup.c b/SMH-STD3506/sdk_linux/linux-6.1/arch/arm/kernel/setup.c index cb88c6e69..d6dca0a7e100644---a/SMH-STD3506/sdk_linux/linux-6.1/arch/arm/kernel/setup.c+++b/SMH-STD3506/sdk_linux/linux-6.1/arch/arm/kernel/setup.c @@-1322,7+1322,15@@staticintc_show(structseq_file*m,void*v)seq_printf(m,"Hardware\t: %s\n",machine_name);seq_printf(m,"Revision\t: %04x\n",system_rev);-seq_printf(m,"Serial\t\t: %s\n",system_serial);+/* prefer the serial derived from the SoC unique chip id over the + * bootloader-provided serial-number DT property, which may be a + * fixed fallback value identical across boards + */+if(system_serial_high||system_serial_low)+seq_printf(m,"Serial\t\t: %08x%08x\n",+system_serial_high,system_serial_low);+else+seq_printf(m,"Serial\t\t: %s\n",system_serial);return0;}root@a4694c04b1a9:/home/cyzhangep/workspace/3506_130version/std_v3_0319/code/device/board/hhwl# root@a4694c04b1a9:/home/cyzhangep/workspace/3506_130version/std_v3_0319/code/device/board/hhwl# root@a4694c04b1a9:/home/cyzhangep/workspace/3506_130version/std_v3_0319/code/device/board/hhwl# git diff SMH-STD3506/sdk_linux/linux-6.1/drivers/soc/rockchip/rockchip-cpuinfo.c diff--git a/SMH-STD3506/sdk_linux/linux-6.1/drivers/soc/rockchip/rockchip-cpuinfo.c b/SMH-STD3506/sdk_linux/linux-6.1/drivers/soc/rockchip/rockchip-cpuinfo.c index02befb165..74f19902c100644---a/SMH-STD3506/sdk_linux/linux-6.1/drivers/soc/rockchip/rockchip-cpuinfo.c+++b/SMH-STD3506/sdk_linux/linux-6.1/drivers/soc/rockchip/rockchip-cpuinfo.c @@-80,13+80,12@@staticintrockchip_cpuinfo_probe(structplatform_device*pdev)dev_info(dev,"SoC\t\t: %lx\n",rockchip_soc_id);-#ifdef CONFIG_NO_GKI+/* derive a per-chip serial from the OTP chip id (unique per die) */system_serial_low=crc32(0,buf,8);system_serial_high=crc32(system_serial_low,buf+8,8);dev_info(dev,"Serial\t\t: %08x%08x\n",system_serial_high,system_serial_low);-#endifreturn0;}
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/8/7 11:18:32

浏览器缓存迁移实战:符号链接与启动参数优化系统盘空间

1. 项目概述:为什么我们需要移动浏览器缓存? 作为一名长期与各种浏览器打交道的IT从业者,我几乎每天都要处理浏览器相关的性能优化和磁盘空间告急问题。无论是开发调试、日常办公还是个人娱乐,浏览器缓存都是一个既爱又恨的存在。…

作者头像 李华
网站建设 2026/8/7 11:18:21

DLSS Swapper:游戏性能优化的智能管家,让每一帧都更流畅

DLSS Swapper:游戏性能优化的智能管家,让每一帧都更流畅 【免费下载链接】dlss-swapper 项目地址: https://gitcode.com/GitHub_Trending/dl/dlss-swapper 还在为游戏卡顿而烦恼吗?想象一下,当你投入心爱的游戏世界时&…

作者头像 李华
网站建设 2026/8/7 11:10:52

Umi-OCR:彻底改变离线文字识别的开源利器

Umi-OCR:彻底改变离线文字识别的开源利器 【免费下载链接】Umi-OCR OCR software, free and offline. 开源、免费的离线OCR软件。支持截屏/批量导入图片,PDF文档识别,排除水印/页眉页脚,扫描/生成二维码。内置多国语言库。 项目…

作者头像 李华