OpenHarmony如何在/proc/cpuinfo中获取rk3568 SN
·
瑞芯微硬件识别码
OTP全称为一次性编程存储器(One-Time Programmable),是一种可以只写入一次数据,并且不能再被重复写入的固态存储器。由于otp的数据只能写入一次,因此它可以在生产过程中被用作生产标识、产品序列号或其他关键信息的存储。OTP还可以用于存储敏感数据,例如加密密钥等。
当前瑞芯微RK3568A使用OTP,瑞芯微的CPUID使用OTP存储,硬件识别码考虑用CPUID。
读取CPUID需要适配几点:
1 修改内核驱动,支持驱动与设备树的匹配
1.1 文件 kernel/linux/linux-5.10/drivers/nvmem/rockchip-otp.c 202行参数,修改为rk3568-otp
static const struct of_device_id rockchip_otp_match[] = {
{
.compatible = "rockchip,px30-otp",
.data = (void *)&px30_data,
},
{
.compatible = "rockchip,rk3568-otp", // 改成这里的内容
.data = (void *)&px30_data,
},
{ /* sentinel */ },
};
1.2 修改OTP实现
修改文件 kernel/linux/linux-5.10/drivers/nvmem/rockchip-otp.c 246行 参数phy修改为otp_phy
static int rockchip_otp_probe(struct platform_device *pdev)
{
....
otp->rst = devm_reset_control_get(dev, "otp_phy"); // 改成这里的内容
....
}
2 修改设备树,确保clock-names一致
使用vi 修改补丁文件:kernel/linux/patch/rk3568/kernel.patch 102150行clock-names。
注:不能直接vscode修改,会出现格式错误而报错
otp: otp@fe38c000 {
compatible = "rockchip,rk3568-otp";
reg = <0x0 0xfe38c000 0x0 0x4000>;
#address-cells = <1>;
#size-cells = <1>;
clocks = <&cru CLK_OTPC_NS_USR>, <&cru CLK_OTPC_NS_SBPI>,
<&cru PCLK_OTPC_NS>, <&cru PCLK_OTPPHY>;
clock-names = "otp", "apb_pclk", "phy"; // 改成这里的内容
resets = <&cru SRST_OTPPHY>;
reset-names = "otp_phy";
3 修改c_show,在cat /proc/cpuinfo时输出CPU Serial
修改文件kernel/linux/linux-5.10/arch/arm64/kernel/cpuinfo.c
函数c_show的倒数第二行,添加seq_printf(m, "CPU Serial\t: %08x%08x\n\n", system_serial_high, system_serial_low);
static int c_show(struct seq_file *m, void *v)
{
....
seq_printf(m, "CPU revision\t: %d\n\n", MIDR_REVISION(midr));
}
seq_printf(m, "CPU Serial\t: %08x%08x\n\n", system_serial_high, system_serial_low);
return 0;
}
验证:

更多推荐
所有评论(0)