找回密码
 立即注册
搜索
热搜: 星闪 最新 活动
查看: 251|回复: 0

[Hi3751v352] 内核启动参数及扩展序列号的存取

[复制链接]

20

主题

0

回帖

180

积分

超级版主

积分
180
发表于 2025-10-28 19:53:58 | 显示全部楼层 |阅读模式
本帖最后由 xusheng 于 2025-10-28 19:53 编辑

【问题现象】

客户反馈,使用原厂的写序列号工具写入序列号后,无法正确获取。
写序列号工具界面如下:

获取序列号的方式如下:
  1. Hi3751V350:/ # getprop |grep serial
  2. [ro.boot.serialno]: [0123456789]
  3. [ro.serialno]: [0123456789]
复制代码

【问题分析】
1. 客户获取的序列号是从哪里得到的?
答案:内核启动参数
  • 在设备启动时,​Bootloader​通过内核命令行参数(如 androidboot.serialno=XXX)将序列号传递给内核;
  • 内核启动后,Android 的 init进程会解析这些参数,并将 androidboot.serialno的值赋给 ro.serialno属性


uboot环境变量中的bootargs参数如下:
  1. bootargs=androidboot.hardware=bigfish selinux=1 androidboot.selinux=enforcing <font color="#ff0000">androidboot.serialno=0123456789</font> firmware_class.path=/vendor/firmware/ console=ttyAMA0,115200 loglevel=4 no_console_suspend blkdevparts=mmcblk0:1M(fastboot),1M(bootargs),1M(bootargsbak),2M(slaveboot),40M(recovery),8M(panelparam),2M(deviceinfo),40M(logo),40M(boot),1M(dtbo),2M(atf),8M(trustedcore),10M(securestore),1M(versioninfo),1M(misc),10M(bootmusic),10M(bootmusicsec),80M(tconparam),4M(demura),1376M(system)ro,300M(vendor)ro,50M(atv),60M(log),100M(cache),1M(ramdisk),-(userdata) skip_initramfs init=/init root=/dev/mmcblk0p20 rootwait mtdparts=hi_sfc:-(hi_sfc) pci=nomsi mmz=ddr,0,0,8M vmalloc=400M irqflood=20000 cgroup.memory=nokmem swapaccount=0 earlycon=pl011,0xf8b00000 mem=1024M androidboot.mem.size=1024M hilog=on
复制代码
android系统启动后,相关的proc信息如下:
  1. Hi3751V350:/ # cat /proc/cmdline
  2. androidboot.hardware=bigfish selinux=1 androidboot.selinux=enforcing <font color="#ff0000">androidboot.serialno=0123456789</font> firmware_class.path=/vendor/firmware/ console=ttyAMA0,115200 loglevel=4 no_console_suspend blkdevparts=mmcblk0:1M(fastboot),1M(bootargs),1M(bootargsbak),2M(slaveboot),40M(recovery),8M(panelparam),2M(deviceinfo),40M(logo),40M(boot),1M(dtbo),2M(atf),8M(trustedcore),10M(securestore),1M(versioninfo),1M(misc),10M(bootmusic),10M(bootmusicsec),80M(tconparam),4M(demura),1376M(system)ro,300M(vendor)ro,50M(atv),60M(log),100M(cache),1M(ramdisk),-(userdata) skip_initramfs init=/init root=/dev/mmcblk0p20 rootwait mtdparts=hi_sfc:-(hi_sfc) pci=nomsi mmz=ddr,0,0,8M vmalloc=400M irqflood=20000 cgroup.memory=nokmem swapaccount=0 earlycon=pl011,0xf8b00000 mem=1024M androidboot.mem.size=1024M hilog=on initrd=0x20000000,0x13c0bc
复制代码
  1. Hi3751V350:/ # cat /proc/device-tree/chosen/bootargs
  2. androidboot.hardware=bigfish selinux=1 androidboot.selinux=enforcing androidboot.serialno=0123456789 firmware_class.path=/vendor/firmware/ console=ttyAMA0,115200 loglevel=4 no_console_suspend blkdevparts=mmcblk0:1M(fastboot),1M(bootargs),1M(bootargsbak),2M(slaveboot),40M(recovery),8M(panelparam),2M(deviceinfo),40M(logo),40M(boot),1M(dtbo),2M(atf),8M(trustedcore),10M(securestore),1M(versioninfo),1M(misc),10M(bootmusic),10M(bootmusicsec),80M(tconparam),4M(demura),1376M(system)ro,300M(vendor)ro,50M(atv),60M(log),100M(cache),1M(ramdisk),-(userdata) skip_initramfs init=/init root=/dev/mmcblk0p20 rootwait mtdparts=hi_sfc:-(hi_sfc) pci=nomsi mmz=ddr,0,0,8M vmalloc=400M irqflood=20000 cgroup.memory=nokmem swapaccount=0 earlycon=pl011,0xf8b00000 mem=1024M androidboot.mem.size=1024M hilog=on initrd=0x20000000,0x13c0bc
复制代码


2. bootargs参数存储在emmc中哪个位置?
答案:bootargs分区
验证流程:
2.1 在uboot下手动修改bootargs参数并保存环境变量
  1. fastboot# setenv bootargs 'androidboot.hardware=bigfish selinux=1 androidboot.selinux=enforcing androidboot.serialno=<font color="#ff0000">0123488888</font> firmware_class.path=/vendor/firmware/ console=ttyAMA0,115200 loglevel=7 no_console_suspend blkdevparts=mmcblk0:1M(fastboot),1M(bootargs),1M(bootargsbak),2M(slaveboot),40M(recovery),8M(panelparam),2M(deviceinfo),40M(logo),40M(boot),1M(dtbo),2M(atf),8M(trustedcore),10M(securestore),1M(versioninfo),1M(misc),10M(bootmusic),10M(bootmusicsec),80M(tconparam),4M(demura),1376M(system)ro,300M(vendor)ro,50M(atv),60M(log),100M(cache),-(userdata) skip_initramfs init=/init root=/dev/mmcblk0p20 rootwait mtdparts=hi_sfc:-(hi_sfc) pci=nomsi mmz=ddr,0,0,8M vmalloc=400M irqflood=20000 cgroup.memory=nokmem swapaccount=0 mem=1024M androidboot.mem.size=1024M hilog=on'
复制代码
  1. fastboot# env save
  2. Saving Environment to MMC... Writing to MMC(0)... OK
复制代码
2.2 通过HiBurn工具读取修改前后的bootargs分区,并对比


对比bootargs分区如下:


2.3 Android系统启动后,再次读取bootargs传递的序列号如下:

从上述验证过程可以确认,bootargs参数中保存的序列号,存储在EMMC的bootargs分区中


本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

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

本版积分规则

Archiver|手机版|小黑屋|【淇诺科技】技术论坛 ( 粤ICP备14010465号-1|粤ICP备14010465号-1 )

GMT+8, 2026-4-2 17:25 , Processed in 0.123891 second(s), 20 queries .

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表