安卓手机刷自编译内核支持Docker

记录一个大致流程


  1. TWRP
  2. orangefox, xda 上找一个自个儿手机的第三方包, 但必须公开了其内核源码. 刷 Magisk, Magisk.apk 改为 magisk.zip 即可刷
  3. 安装 Termux, 设置文件存储访问权限并运行 termux-setup-storage, 换源 termux-change-repo 并更新: pkg update
  4. 使用 check-config.sh, 查看该包内核需要开启什么选项
  5. git clone ROM 的内核源码
  6. 安装配置交叉编译工具链 (需要合适的 gcc/clang 版本, 只能尝试, 或者如果 ROM 作者有提示更好)
  7. 在内核源码目录运行 make clean && make mrproper && make ttifany_defconfig (我的一个旧手机代号: 小米 5X) && make menuconfig 将第 4 步显示的 missing项 勾选上, 应配置为星号 *, 而不是 M, 表示模块编译进内核与内核一体, 而不是可”插拔”的模块.
  8. make -j4
  9. 在 TWRP 的 Terminal 中执行 dd if=/dev/block/bootdevice/by-name/boot of=/sdcard/stockboot.img
  10. 下载 Android Image Kitchen Linux 版本, 解压, 将 stockboot.img 拷贝道 AIK 目录下
  11. 在 AIK 目录下执行 sudo ./unpackimg.sh stockboot.img
  12. 将第 8 步编译好的内核 arch/arm64/boot/Image.gz-dtb 替换 [AIK]/split_img/image.gz-kernel
  13. 在 AIK 目录执行 sudo ./repacking.sh
  14. image-new.img 拷贝到手机 /sdcard/
  15. 在 TWRP 中选中 boot 分区刷入 image-new.img
  16. 手机开机后, 在 Termux 中再次运行 check-config.sh 检查相关配置是否已经满足
  17. (可设置开机启动)运行 sudo mount -t tmpfs -o uid=0,gid=0,mode=0755 cgroup /sys/fs/cgroup
  18. pkg install root-repo
  19. pkg install docker
  20. (可设置开机启动)运行 sudo DOCKER_RAMDISK=true dockerd --iptables=false
  21. sudo docker run hello-world
  22. 然后就能看到是否成功的提示了

一些说明

这是以前记录在为知笔记里头的, 这次转录过来做个备忘, 省略了很多细节. 第 8 步可能会出现很多问题, 比如头文件

什么的找不到之类, 需要找到错误提示对应的文件所在目录的 Makefile 里面加上能找到相关头的路径.