高通平台LK传递参数给kernel参考serialno的方式实现

该需求主要是为了能够获取自定义的版本号,或者需要bootloader里,定制代码的执行结果需要传递到bootloader从而控制启动等。

首先可以从shell里查看LK传入的值。

cat proc/cmdline

得知androidboot.serialno=xxxxx 那么可以再源码树里查找serialno关键字并依葫芦画瓢即可

bootable/bootloader/lk/app/aboot/aboot.c

1、同样和serialno增加一个属性名。

 static const char *usb_sn_cmdline = " androidboot.serialno=";
+static const char *bootloader_version = " bootloader.version=";

2、和serialno增加一个存储的buf

 char sn_buf[13];
+char lkversion_buf[32];

3、和serialno类似,进行buf赋值,并且更新cmdline的长度

unsigned char *update_cmdline(const char * cmdline) {

………………………………

        cmdline_len += strlen(usb_sn_cmdline);
        cmdline_len += strlen(sn_buf);
+       cmdline_len += strlen(bootloader_version);
+       snprintf((char *)lkversion_buf, 32, "%s", "20171026");
+       cmdline_len += strlen(lkversion_buf);

………………………………

}

4、将写入的值赋值到传入kernel参数的缓冲区里。

unsigned char *update_cmdline(const char * cmdline) {

………………………………

+               
+               //bootloader version
+               src = bootloader_version;
+               if (have_cmdline) --dst;
+               have_cmdline = 1;
+               while ((*dst++ = *src++));
+               src = lkversion_buf;
+               if (have_cmdline) --dst;
+               have_cmdline = 1;
+               while ((*dst++ = *src++));
+

………………………………

以上为LK部分的修改,对于kernel层,我们可以将获取到的cmdline参数解析后设置到Android系统的systemprop里

system/core/init/init.c

static void import_kernel_nv(char *name, int for_emulator){

 ………………………………
+
+       if (!strncmp(name, "bootloader.version", 18) && name_len > 18) {
+               property_set("ro.bootloader.version",value);
+       }

………………………………
 }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值