|
|
本帖最后由 xusheng 于 2025-10-28 19:53 编辑
【问题现象】
客户反馈,使用原厂的写序列号工具写入序列号后,无法正确获取。
写序列号工具界面如下:
获取序列号的方式如下:
- Hi3751V350:/ # getprop |grep serial
- [ro.boot.serialno]: [0123456789]
- [ro.serialno]: [0123456789]
复制代码
【问题分析】
1. 客户获取的序列号是从哪里得到的?
答案:内核启动参数
- 在设备启动时,Bootloader通过内核命令行参数(如 androidboot.serialno=XXX)将序列号传递给内核;
- 内核启动后,Android 的 init进程会解析这些参数,并将 androidboot.serialno的值赋给 ro.serialno属性
uboot环境变量中的bootargs参数如下:
- 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信息如下:
- Hi3751V350:/ # cat /proc/cmdline
- 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
复制代码- Hi3751V350:/ # cat /proc/device-tree/chosen/bootargs
- 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参数并保存环境变量
- 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'
复制代码- fastboot# env save
- Saving Environment to MMC... Writing to MMC(0)... OK
复制代码 2.2 通过HiBurn工具读取修改前后的bootargs分区,并对比
对比bootargs分区如下:
2.3 Android系统启动后,再次读取bootargs传递的序列号如下:
从上述验证过程可以确认,bootargs参数中保存的序列号,存储在EMMC的bootargs分区中。
|
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有账号?立即注册
×
|