安卓底层也是 linux 内核,有运行 docker 的潜力,只是他的内核缺少了一些 docker 所需的组件。
我们需要做的是,解锁安卓手机的 BL,刷入自定义的 linux 内核。
至于 docker engine 本身的适配,已经有大佬做好了。
参考资料 https://gist.github.com/FreddieOliveira/efe850df7ff3951cb62d74bd770dce27
就像参考资料里所说,我们需要找到一个开源的 rom 并刷入。
不经修改,手动编译它得开源内核,刷入确认没有异常。
修改内核,刷入后开搞 docker。
设备
红米 note8,代号 ginkgo
刷机
Recovery
这里用的是 pitchblack,并非常用的 twrp
twrp 好像不区分 红米 note8 和 红米 note8T, 这导致刷机的时候设备型号识别错误,刷不进去。
https://pitchblackrecovery.com/
ROM
这里选择的是 crDroid,目前有人积极维护这个 rom 的 ginkgo 适配,能跑安卓 14。
刷入此时最新的 crDroid 10.5 Android 14
https://crdroid.net/ginkgo/10
提示: 不要试图刷回 miui,某些版本的硬件会变砖,救转还得拆机
linux kernel
去 github crdroidandroid 的主页搜 ginkgo,就能轻松收到他的内核。
进一步对比内核的 hash 可以完全确定这个就是固件用的内核。
https://github.com/crdroidandroid/android_kernel_xiaomi_ginkgo
构建内核
构建未修改的内核
克隆代码的时候要注意,分支应该选用 14.0,与 rom 保持一致。
使用 docker 创建干净的 ubuntu
docker run -it ubuntu:20.04
apt update
apt install build-essential libssl-dev git wget bc zip libncurses-dev
# 作者也没说该怎么编译,看了看 build.sh, 连猜带蒙搞了三个编译器
cd ~
mkdir tc
cd tc
wget https://android.googlesource.com/platform/prebuilts/clang/host/linux-x86/+archive/refs/heads/android13-release/clang-r450784d.tar.gz
mkdir clang-r450784d
tar -xzvf clang-r450784d.tar.gz -C clang-r450784d
git clone --depth=1 https://github.com/LineageOS/android_prebuilts_gcc_linux-x86_arm_arm-linux-androideabi-4.9.git arm-linux-androideabi-4.9
git clone --depth=1 https://github.com/LineageOS/android_prebuilts_gcc_linux-x86_aarch64_aarch64-linux-android-4.9.git aarch64-linux-android-4.9
cd ~
git clone https://github.com/ghostrider-reborn/AnyKernel3
git -C AnyKernel3 checkout 126e0eee0d63aeff74c9bb3d22a53b2fa41ddd7f
sed -i 's/supported.versions=11.0-13.0/supported.versions=14.0/' AnyKernel3/anykernel.sh
git clone -b 14.0 --depth=1 https://github.com/crdroidandroid/android_kernel_xiaomi_ginkgo.git
cd android_kernel_xiaomi_ginkgo
./build.sh