lk2nd移植教程

lk2nd是一个用于高通MSM设备的bootloader,提供可定制化的fastboot环境,常用于主线kernel启动的Linux系统,如PostmarketOS和Mobian。由于官方lk1st的限制和secureboot机制,lk2nd作为辅助引导加载程序加载,不直接替换lk1st。文章介绍了lk2nd的工作原理,以及如何在17年前的高通设备上动手移植和配置lk2nd。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

<0>几个lk2nd仓库

1.官方的:https://github.com/msm8916-mainline/lk2nd

2.我自己适配的:GitHub - bzy-080408/lk2nd_unofficial: lk2nd fork,主要为中国手机

<1>lk2nd是个神马东西?

  lk2nd是一个在高通MSM设备上面运行的bootloader, 基于 CodeAurora Little Kernel fork. 它提供了一个可定制化fastboot环境(你可以在里面为所欲为比如输出' flash success,fuck you Qualcomm').

  lk2nd不会替换原始bootloader(lk1st)。它被打包到Android中引导映像,然后由股票引导加载程序作为“辅助”引导加载程序加载。真正的Android引导映像被放置在具有1MB偏移的引导分区中,然后用lk2nd加载。

   由于官方lk1st有很多限制,很多用主线kernel启动的linux系统都用lk2nd作为引导e.g.Postmarketos,Mobian.

FAQ:

1.为啥不直接替换了官方的lk1st? 

高通在很多设备上开启了secureboot这会导致lk1st编译完刷上去设备拒绝启动造成黑砖,而且设备初始化(如屏幕初始化)不是每个人都会写的

<2>lk2nd的原理

现说说高通的启动,lk1st启动kernel时候会加载一个东西叫做设备树,同时通过设备树确定是不是可以加载的boot镜像。众所周知kernel是二进制可执行文件,emmc_appboots.mbn也是可执行文件,所以我们就可以“狸猫换太子”把kernel换成lk,并且用设备树骗过lk1st让lk1st引导lk2nd启动。

<3>开始动手

0.你要有一个手机,一个电脑,一根数据线(这不废话),注意是高通Soc,17年以前的,17年以后的直接移植edk2去弄lk2nd干神?

1.解锁bl是肯定的,不然你咋刷进去

然后是几个方案

方案一(官方方案):

把qcom,msm-id 和qcom,board-id从/proc/device-tree/里面dd出来

(在手机上面执行):

dd if=/proc/device-tree/qcom,msm-id of=/sdcard/msm-id

dd if=/proc/device-tree/qcom,board-id of=/sdcard/board-id

然后通过mtp拷到电脑上,以16进制打开,得到文本形式的16进制数值

方案二:

找到手机对应的内核代码

然后在里面找到手机对应的设备树

然后从设备树里面找到board-id和msm-id

// ========================================================

然后就开始移植了

先写个设备树



/dts-v1/;

/include/ "msm8953.dtsi" //只是针对msm8953设备,其他设备找对应的头文件

/ {
	model = "这里填设备型号,自己随便编";
	compatible = "qcom,msm8953", "qcom,msm8953", "lk2nd,device";
    qcom,msm-id= <这里输入刚才得到的数值>;
	qcom,board-id= <这里输入刚才得到的数值>;
};

保存到lk2nd项目的dts/里面,文件名自定,后缀.dts

然后把设备树加入rules.mk

在里面加入

$(LOCAL_DIR)/文件名.dtb \ 

然后代码就改完了,安装依赖,然后编译就行了,

评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值