手机运行Docker: 从修改内核到刷入原生Linux

原文地址:https://yzddmr6.com/posts/android-run-docker/

背景

最近收拾东西翻出了抽屉里吃灰的小米6。小米6当年可以说是神机一部,最好的835遇到了最好的MIUI9。如今放在抽屉里吃灰实在可惜,想着拿来做点什么让它继续发挥余热。

随后就萌生了一个想法:在手机上跑Docker,这样的话就可以用到很多打包好的Docker应用了。后来发现有这个想法的人不止我一个,有很多大佬已经实现了。原生安卓无法直接运行Docker的原因是:安卓虽然基于Linux,但是内核阉割了很多东西,很多Docker相关的的内核选项没有开启,所以需要通过刷机来进行修改。

本人总共尝试了两种方案:一种是重新编译安卓内核,开启对应选项。不过在本人的小米6,Linux内核4.4版本,LineageOS 19.1上失败了;另一种是直接刷入原生的Linux系统,成功启动了Docker。在这里跟大家分享一下刷机的过程。

方案一:重新编译安卓内核

如果可以通过修改安卓内核来开启Docker应该是最理想的方案:这样可以在保留手机原有功能架构的基础上来提高我们的可玩性。老外写过一篇详细的教程,可以按照这个来:https://gist.github.com/FreddieOliveira/efe850df7ff3951cb62d74bd770dce27

不过很遗憾,最后这种方案失败了,一直出现报错。找了半天也没有找到解决办法,希望知道原因的小伙伴告知我一下。

准备工作

首先要找一份第三方维护的你的手机内核的源码,如lineageOS,PixelExperience等。这些内核代码热度较高,更新频繁,有什么bug马上就被修复了,编译的时候成功率较大。

另外注意,如果是小米手机,最好不要用小米官方github上的内核。本人亲身体会,编译过程不仅一堆BUG,刷入系统后还开不了机。后来看到看雪的帖子,很多人也遇到了同样的情况:https://bbs.pediy.com/thread-262263.htm

经过一番查找对比,最后选择以lineageOS维护的小米6(sagit)的内核源码作为基础:https://github.com/LineageOS/android_kernel_xiaomi_msm8998

git clone https://github.com/LineageOS/android_kernel_xiaomi_msm8998 --depth=1

sagit是小米6的手机代号,这个代号独一无二,可以百度搜一下自己手机的对应代号。

修改内核

我们首先不做修改,编译一次看报不报错。

cd ./android_kernel_xiaomi_msm8998
sudo apt install build-essential openssl pkg-config libssl-dev libncurses5-dev pkg-config minizip libelf-dev flex bison  libc6-dev libidn11-dev rsync bc liblz4-tool  
sudo apt install gcc-aarch64-linux-gnu dpkg-dev dpkg git

export ARCH=arm64
export SUBARCH=arm64
export CROSS_COMPILE=aarch64-linux-gnu-

make O=out sagit_defconfig
make O=out -j$(nproc)
error:CROSS_COMPILE_ARM32 not defined or empty
img

kernel config 里面删掉 CONFIG_COMPAT_VDSO

error: statement with no effect [-Werror=unused-value]
../drivers/staging/qcacld-3.0/core/hdd/src/wlan_hdd_cfg.c: In function ‘hdd_cfg_print’:
../drivers/staging/qcacld-3.0/core/hdd/src/wlan_hdd_cfg.c:6896:43: error: statement with no effect [-Werror=unused-value]


 error: ‘staid’ may be used uninitialized in this function [-Werror=maybe-uninitialized]
  911 |         hdd_dhcp_indication(pAdapter, staid, skb, QDF_RX);
      |         ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  CC      drivers/soc/qcom/early_random.o
  CC      drivers/video/fbdev/msm/mdss_mdp_ctl.o
  CC      drivers/video/fbdev/msm/mdss_mdp_pipe.o

临时解决办法: 增加 -Wno-error=unused-value -Wno-error=maybe-uninitialized,见一种加一种。最后觉得太麻烦了,直接Makefile里增加-w选项,屏蔽所有警告。

开启内核支持

安装termux。这里为了控制方便我开启了ssh,用电脑连接上去操作。然后下载check脚本看缺少哪些内核选项。

pkg install tsu
pkg install wget
wget https://raw.githubusercontent.com/moby/moby/master/contrib/check-config.sh
chmod +x check-config.sh
sed -i '1s_.*_#!/data/data/com.termux/files/usr/bin/bash_' 
  • 5
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值