自定义小米10pro(代号cmi)的kernel内核,并开启安卓支持docker

您所在的位置:网站首页 小米10pro的代号 自定义小米10pro(代号cmi)的kernel内核,并开启安卓支持docker

自定义小米10pro(代号cmi)的kernel内核,并开启安卓支持docker

2024-07-12 09:05| 来源: 网络整理| 查看: 265

0. 版本说明

本文提供了小米10pro手机的内核编译方法,小米10pro手机代号是cmi。

我这边基于P404开源项目,打了一个docker内核编译镜像(17380582683/wh:v.1.0),大家可以在容器里,手动修改配置这个project-404-5.0-20220813-104358-SHINKA-cmi.zip包的内核。想打出完整的rom包zip文件,目前还没搞通,有兴趣的同学可以继续深入研究研究。

背景:网上找了一圈,好多只提供了内核源码,但尝试了一下总是编译出错。少有能编译出来的,刷上手机里也没能正常开机。最后还是找到了一个可用的版本,是国外P404组织开源出来的。

开源项目总入口:https://github.com/P-404/android_manifest 

cmi手机的版本总入口:GitHub - P404-Devices/device_xiaomi_cmi 

官方原始成品卡刷包下载地址:https://github.com/P404-Devices/device_xiaomi_cmi/releases/download/5.0/project-404-5.0-20220813-104358-SHINKA-cmi.zip

1. 环境准备

需要一台磁盘容量至少300G,内存32G的x64机器,然后安装好dockerd。

2. 拉取docker容器

拉取命令:docker pull  17380582683/wh:v.1.0

拉取大小:35.52GB,解压镜像后大小:78GB

镜像id:c250097005b8

v.1.0: digest: sha256:57cc3e41436e523551a0855f3c3d755176578e6fc423ea8b36519e7905e14367

3. 启动docker容器,然后进入容器 ~:/ docker  run  -itd  --name cmi  17380582683/wh:v.1.0  bash WARNING: The requested image's platform (linux/arm64/v8) does not match the detected host platform      (linux/amd64) and no specific platform was requested 362b7cad732c9471350d697eb5137f00a8108ed7b69741bd0ba749764f0bfca3 ~:/ docker  exec  -it  cmi  bash

上面的warning,可以直接忽略。是因为我的镜像就是在小米10pro手机搭的环境上传的,所以把它认为是一个arm64平台的镜像。其实这个镜像只能在x64机器上跑。

4. 修改安卓内核参数的方法

不修改内核,可以直接跳过此步骤,直接开始编译安卓内核。

方法一、直接修改内核配置文件cmi_defconfig # 最好两个内核的配置文件同步一起修改 vi  /root/p-404/kernel/xiaomi/sm8250/arch/arm64/configs/cmi_defconfig vi  /root/p-404/kernel/xiaomi/sm8250-bak/arch/arm64/configs/cmi_defconfig 方法二、先在图形化下修改一个内核配置文件,然后同步覆盖到另一个内核

1. 修改内核配置文件,切换至/root/p-404/kernel/xiaomi/sm8250目录,以旧的cmi_defconfig产生.config

export ARCH=arm64 cd  /root/p-404/kernel/xiaomi/sm8250; make cmi_defconfig

2. 进入内核参数选单,开始修改内核配置文件。用上下键盘移动,选中下方Exit返回上一页(退出时记得选Save),Enter确认,空白键选取。找不到特定的CONFIG按/搜索,不然就问...谷歌。

make menuconfig

3. 修改完成后,用.config取代原本的cmi_defconfig。下一步make clean后.config会被删除。

cp .config arch/arm64/configs/cmi_defconfig make clean make mrproper

4. 同步cmi_defconfig覆盖到另一个内核。

cp cmi_defconfig /root/p-404/kernel/xiaomi/sm8250-bak/arch/arm64/configs/cmi_defconfig 5. 修改内核支持docker

现在容器中的内核已经是修改过了,支持docker的版本。我的修改内容记录如下:

diff --git a/arch/arm64/configs/cmi_defconfig b/arch/arm64/configs/cmi_defconfig index a0a7ffd4a906..d7efc88aedb9 100644 --- a/arch/arm64/configs/cmi_defconfig +++ b/arch/arm64/configs/cmi_defconfig @@ -1,3 +1,82 @@ +CONFIG_NAMESPACES=y +CONFIG_NET_NS=y +CONFIG_PID_NS=y +CONFIG_IPC_NS=y +CONFIG_UTS_NS=y +CONFIG_CGROUPS=y +CONFIG_CGROUP_CPUACCT=y +CONFIG_CGROUP_DEVICE=y +CONFIG_CGROUP_FREEZER=y +CONFIG_CGROUP_SCHED=y +CONFIG_CPUSETS=y +CONFIG_MEMCG=y +CONFIG_KEYS=y +CONFIG_VETH=y +CONFIG_BRIDGE=y +CONFIG_BRIDGE_NETFILTER=y +CONFIG_IP_NF_FILTER=y +CONFIG_IP_NF_TARGET_MASQUERADE=y +CONFIG_NETFILTER_XT_MATCH_ADDRTYPE=y +CONFIG_NETFILTER_XT_MATCH_CONNTRACK=y +CONFIG_NETFILTER_XT_MATCH_IPVS=y +CONFIG_NETFILTER_XT_MARK=y +CONFIG_NETFILTER_XT_SET=y +CONFIG_IP_NF_NAT=y +CONFIG_NF_NAT=y +CONFIG_POSIX_MQUEUE=y +CONFIG_NF_NAT_IPV4=y +CONFIG_NF_NAT_NEEDED=y +CONFIG_CGROUP_BPF=y +CONFIG_USER_NS=y +CONFIG_SECCOMP=y +CONFIG_SECCOMP_FILTER=y +CONFIG_CGROUP_PIDS=y +CONFIG_MEMCG_SWAP=y +CONFIG_MEMCG_SWAP_ENABLED=y +CONFIG_IOSCHED_CFQ=y +CONFIG_CFQ_GROUP_IOSCHED=y +CONFIG_BLK_CGROUP=y +CONFIG_BLK_DEV_THROTTLING=y +CONFIG_CGROUP_PERF=y +CONFIG_CGROUP_HUGETLB=y +CONFIG_NET_CLS_CGROUP=y +CONFIG_CGROUP_NET_PRIO=y +CONFIG_CFS_BANDWIDTH=y +CONFIG_FAIR_GROUP_SCHED=y +CONFIG_RT_GROUP_SCHED=y +CONFIG_IP_NF_TARGET_REDIRECT=y +CONFIG_IP_VS=y +CONFIG_IP_VS_NFCT=y +CONFIG_IP_VS_PROTO_TCP=y +CONFIG_IP_VS_PROTO_UDP=y +CONFIG_IP_VS_RR=y +CONFIG_SECURITY_SELINUX=y +CONFIG_SECURITY_APPARMOR=y +CONFIG_EXT4_FS=y +CONFIG_EXT4_FS_POSIX_ACL=y +CONFIG_EXT4_FS_SECURITY=y +CONFIG_VXLAN=y CONFIG_BRIDGE_VLAN_FILTERING=y +CONFIG_CRYPTO=y CONFIG_CRYPTO_AEAD=y +CONFIG_CRYPTO_GCM=y +CONFIG_CRYPTO_SEQIV=y +CONFIG_CRYPTO_GHASH=y CONFIG_XFRM=y +CONFIG_XFRM_USER=y +CONFIG_XFRM_ALGO=y +CONFIG_INET_ESP=y +CONFIG_INET_XFRM_MODE_TRANSPORT=y +CONFIG_IPVLAN=y +CONFIG_MACVLAN=y +CONFIG_DUMMY=y +CONFIG_NF_NAT_FTP=y +CONFIG_NF_CONNTRACK_FTP=y +CONFIG_NF_NAT_TFTP=y +CONFIG_NF_CONNTRACK_TFTP=y +CONFIG_AUFS_FS=y +CONFIG_BTRFS_FS=y +CONFIG_BTRFS_FS_POSIX_ACL=y +CONFIG_BLK_DEV_DM=y +CONFIG_DM_THIN_PROVISIONING=y +CONFIG_OVERLAY_FS=y CONFIG_LOCALVERSION="-perf" # CONFIG_LOCALVERSION_AUTO is not set CONFIG_AUDIT=y @@ -236,6 +315,24 @@ CONFIG_NETFILTER_XT_MATCH_STATISTIC=y CONFIG_NETFILTER_XT_MATCH_STRING=y CONFIG_NETFILTER_XT_MATCH_TIME=y CONFIG_NETFILTER_XT_MATCH_U32=y +CONFIG_IP_SET=y +CONFIG_IP_SET_MAX=256 +CONFIG_IP_SET_BITMAP_IP=y +CONFIG_IP_SET_BITMAP_IPMAC=y +CONFIG_IP_SET_BITMAP_PORT=y +CONFIG_IP_SET_HASH_IP=y +CONFIG_IP_SET_HASH_IPMARK=y +CONFIG_IP_SET_HASH_IPPORT=y +CONFIG_IP_SET_HASH_IPPORTIP=y +CONFIG_IP_SET_HASH_IPPORTNET=y +CONFIG_IP_SET_HASH_IPMAC=y +CONFIG_IP_SET_HASH_MAC=y +CONFIG_IP_SET_HASH_NETPORTNET=y +CONFIG_IP_SET_HASH_NET=y +CONFIG_IP_SET_HASH_NETNET=y +CONFIG_IP_SET_HASH_NETPORT=y +CONFIG_IP_SET_HASH_NETIFACE=y +CONFIG_IP_SET_LIST_SET=y CONFIG_IP_NF_IPTABLES=y CONFIG_IP_NF_MATCH_AH=y CONFIG_IP_NF_MATCH_ECN=y @@ -777,3 +874,5 @@ CONFIG_SCHEDSTATS=y CONFIG_DEBUG_LIST=y CONFIG_IPC_LOGGING=y CONFIG_DEBUG_ALIGN_RODATA=y +CONFIG_NAMESPACES=y +CONFIG_PID_NS=y 6. 开始编译内核

目前的这个编译内核的环境,稍微有点点问题,需要编译两次内核才行(这也是为啥上一步中,要求2个内核的配置文件一起同时修改)。但是编译后的内核已确认是可以在手机上正常运行的。后面有时间后,再做优化修复。

进入容器内部,执行如下命令进行内核编译。

cd  /root/p-404; ./mybuild.sh; # 然后等待编译失败,然后修改kernel目录 mv  /root/p-404/kernel/xiaomi/sm8250  /root/p-404/kernel/xiaomi/sm8250-bak2 mv  /root/p-404/kernel/xiaomi/sm8250-bak  /root/p-404/kernel/xiaomi/sm8250 # 上面的两个动作,就是将现在的LineageOS的内核,换为P404-Devices的内核 # 然后再次编译,即可编译成功 ./mybuild.sh;   补充:如何确认当前编译的内核是LineageOS的内核,还是P404-Devices的内核?

我们可以进入内核目录,执行命令 git  remote  -v,可以看到当前的内核分支来源。示例如下:

root@67ba4c3d3c19:~/p-404/kernel/xiaomi/sm8250# git remote -v origin https://github.com/P404-Devices/kernel_xiaomi_sm8250.git (fetch) origin https://github.com/P404-Devices/kernel_xiaomi_sm8250.git (push) 7. root新编译出的内核

使用 magisk面具 app来将新编译的boot.img植入开放root。方法网上有很多教程,大致是:

1. 将boot.img传入手机;

2. 打开magisk面具app,点击 Magisk 卡片中的“安装”按钮,接下来点击“选择并修补一个文件”。

3. 选择之前编译出来的 boot.img,然后等待生成修补文件。

4. 将生成的修补文件复制到电脑上(修补文件默认保存在手机内部存储 Download 目录)。

8. 刷入自己编译的内核

0. 小米10pro手机最好提前刷入好了这个rom:project-404-5.0-20220813-104358-SHINKA-cmi.zip 。

1. 重启手机,进入fastboot模式。有两种方法进入fastboot模式:

        方法一.  手机连上电脑adb,然后再adb里输入reboot recovery,手机自动重启进入recovery模式。

        方法二.  正常关机,然后同时按住开机键和音量上键,手机开机进入recovery模式。

2. 手机连接电脑,执行命令fastboot.exe flash boot new-boot.img,刷入刚编译出来的新内核文件new-boot.img。

3. 执行命令fastboot.exe  reboot,手机重启正常开机。

9. 再次重新编译内核

因为一般修改内核会频繁的进行重编、刷机、测试、再重编的反复过程。所以想再次重编内核可以删除此目录,即可清理掉之前的编译中间文件。命令为:

rm -rf /root/p-404/out 10. 已经改造好的,支持docker功能的卡刷包

考虑到有些同学只需要最终结果包就行了,也不会去折腾编内核。这边贴上,我已改造好,支持docker的rom包:(github请给个Star,谢谢)

https://github.com/hengwu0/cmi-p404-docker-enabled/releases

11. 手机上安装dockerd的步骤

这个请看下一篇文章:安卓手机部署ubuntu的lxc容器,并安装好dockerd

12. 遗留问题

如果要拿手机当服务器来跑docker,还需要解决电池的问题。因为既然是跑服务,肯定是24小时接电源适配器的,这样时间长了,手机电池绝对遭不住。轻则鼓包漏气、后盖起翘,重则起火就得不偿失了。本人可不承担,请自行承担后果哦。

但古人有言,祸福相依,手机的电池,并非只会带来坏处。如果我们处理得当,相当于给我们的服务器自带了一个UPS,岂不美哉。

方法暂不公开了,如需技术协助,可以邮件我:[email protected],¥50 for 啤酒。



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3