背景

Y927 原厂 Android 4.4 的 tz/hyp 是 32 位,无法启动 ARM64 内核。lk2nd 也受限于此。必须同时替换 tz、hyp、aboot 三个分区。

最终启动链

1
PBL → SBL1 → DB410c tz → qhypstub (EL2) → lk1st (EL1, aarch32) → Linux (EL1, aarch64) ✅

核心组件

组件 作用
DB410c tz DragonBoard 410c 的 TrustZone(与 qhypstub 兼容)
qhypstub 开源 hyp stub,替代原厂 hyp,支持 ARM64 EL2 启动
lk1st 从 lk2nd 仓库构建的主引导程序(aboot 替换),提供 Fastboot

备份关键分区

本章操作只替换 tz/hyp/aboot,这三个分区的原厂镜像在线刷包中都有,即使变砖也能 EDL 刷回。
modemfsg 存着每台手机唯一的 IMEI,线刷包的 modem 镜像是通用的,覆盖前务必先备份。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
fastboot oem reboot-edl
cp Y927\(PD1410V)升级软件_an/prog_emmc_firehose_8916.mbn ~/y927/

alias edl='uvx --from git+https://github.com/bkerler/edl.git edl --loader=~/y927/prog_emmc_firehose_8916.mbn'


edl r modem ~/y927/backup/modem.img # IMEI 主存储 ⚠️ 必须备份
edl r fsg ~/y927/backup/fsg.img # IMEI 备份 ⚠️ 必须备份

# 以下分区线刷包中都有,备份只是节省恢复时间
edl r sbl1 ~/y927/backup/sbl1.img
edl r tz ~/y927/backup/tz.img
edl r hyp ~/y927/backup/hyp.img
edl r aboot ~/y927/backup/aboot.img
edl r rpm ~/y927/backup/rpm.img

获取 DB410c 固件

从 Linaro 下载 DragonBoard 410c 固件:

1
2
3
https://releases.linaro.org/96boards/dragonboard410c/linaro/rescue/17.09/
→ dragonboard410c_bootloader_emmc_android-88.zip
→ 提取 tz.mbn

只需 tz.mbn,sbl1 保留原厂即可。

1
2
3
4
5
cd ~/y927
mkdir
wget https://releases.linaro.org/96boards/dragonboard410c/linaro/rescue/17.09/dragonboard410c_bootloader_emmc_android-88.zip
unzip dragonboard410c_bootloader_emmc_android-88.zip tz.mbn
rm dragonboard410c_bootloader_emmc_android-88.zip

编译 qhypstub

1
2
3
4
5
cd ~/y927
git clone https://github.com/msm8916-mainline/qhypstub.git
cd qhypstub
git clone https://github.com/msm8916-mainline/qtestsign.git
make CROSS_COMPILE=aarch64-linux-gnu-

产物
qhypstub.bin: 二进制版本
qhypstub-test-signed.mbn: 测试签名版本(刷入 hyp 分区)

编译 lk1st

1
2
3
4
cd ~/y927/lk2nd
make -j$(nproc) TOOLCHAIN_PREFIX=arm-none-eabi- lk1st-msm8916 \
LK2ND_BUNDLE_DTB=msm8916-vivo-y927.dtb \
LK2ND_COMPATIBLE=vivo,y927

签名 lk1st

1
~/y927/qhypstub/qtestsign/qtestsign.py aboot ~/y927/lk2nd/build-lk1st-msm8916/emmc_appsboot.mbn

刷入固件(EDL)

⚠️ 关键:必须同时替换 tz!只换 hyp+aboot 不换 tz 会导致深度变砖。

1
2
3
4
5
6
7
8
9
10
11
12
# 进入 EDL
fastboot oem reboot-edl

alias edl="uvx --from git+https://github.com/bkerler/edl.git edl --loader=$HOME/y927/prog_emmc_firehose_8916.mbn"

# 刷入三个分区(sbl1 保留原厂)
edl w tz $HOME/y927/tz.mbn
edl w hyp $HOME/y927/qhypstub/qhypstub-test-signed.mbn
edl w aboot $HOME/y927/lk2nd/build-lk1st-msm8916/emmc_appsboot-test-signed.mbn

# 重启
edl reset

lk1st 启动

此时lk1st启动,但是手机屏幕并不会亮,因为屏幕驱动暂时还未调通,但是可以使用以下命令看到进入 lk1st 并输出一些日志。

1
2
3
fastboot oem log
fastboot get_staged lk1st.log
cat lk1st.log

修复lk1st的屏幕显示

TODO