高通平台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);
+       }

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

  • 3
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
对于高通8155单安卓基线SD卡启动,root参数可以通过修改cmdline来传递。具体方法如下: 1. 在SD卡的根目录下新建一个名为"cmdline"的文件。 2. 在cmdline文件中添加以下内容: androidboot.selinux=permissive androidboot.hardware=qcom androidboot.console=ttyMSM0 console=ttyMSM0,115200n8 androidboot.serialno=android12345678 androidboot.baseband=msm androidboot.bootdevice=msm_sdcc.1 androidboot.ddr_type=lpddr4 androidboot.boottime=9999999999 androidboot.memcg=1 lpm_levels.sleep_disabled=1 androidboot.verifiedbootstate=orange androidboot.oemandroidver=8.1.0 androidboot.keymaster=1 androidboot.avb_version=1.0 androidboot.fmp_config=1 androidboot.hlos=0x07 kernel.memcg=1 androidboot.boot_recovery=1 androidboot.bootreason=kernel_panic androidboot.slot_suffix=_a androidboot.hardware.revision=8300 androidboot.bootloader=unknown androidboot.secure_hardware=1 androidboot.cid=0x0 androidboot.ab_update=1 androidboot.dtbo_idx=0 androidboot.vbmeta.device_state=unlocked androidboot.bootloader_version=unknown androidboot.bootimage.build.date=Fri Mar 26 11:07:52 UTC 2021 androidboot.bootimage.build.date.utc=1616741272 androidboot.bootimage.build.fingerprint=google/coral/coral:11/RQ2A.210305.006/7119741:user/release-keys 其中,需要添加的root参数为"androidboot.selinux=permissive",添加到最前面即可。 3. 保存文件并将SD卡插入设备中,重新启动设备。 这样,设备就会以permissive模式启动,并且root权限已经被授予。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值