文章参阅:Ivon_Huang(B站)
目前状态:待完工…
请先看一下总结再决定是否看下去。
在termux中进行检查
检查当前kernel缺少的内容
1 | pkg install wget |
来到计算机(Centos7 VM虚拟机)
先更新一下软件包
1 | yum upgrade -y --skip-broken |
创建customkernel文件夹
在文件夹下,下载kernel源代码
1 | git clone https://github.com/radcolor/android_kernel_xiaomi_whyred.git |
进入源代码目录下
导入环境变量
1 | export ARCH=arm64 |
1 | export ARCH=arm64 |
按照机型_config
档案产生设置,该档案通常在arch/arm64/configs
。
1 | 源码目录 |
报错解决方案:
1 | strings /usr/lib64/libstdc++.so.6 | grep GLIBCXX |
- [version `GLIBCXX_3.4.20’ not found](https://www.jianshu.com/p/050b2b777b9d
)
1 | strings /lib64/libc.so.6 | grep GLIBC |
- [version `GLIBC_2.33’ not found](https://blog.csdn.net/dm569263708/article/details/125201512)
- [version `GLIBC_2.34’ not found ](https://blog.csdn.net/dm569263708/article/details/125201512) 这两个花了好久时间
- [/lib64/libc.so.6: symbol __tunable_get_val, version GLIBC_PRIVATE not defined in file ld-linux-x86-64.so.2 with link time reference 这个错误很严重,请不要退出ssh会话或重启系统,否则会再也打不开!!!!](/lib64/libc.so.6: symbol __tunable_get_val, version GLIBC_PRIVATE not defined in file ld-linux-x86-64.so.2 with link time reference 这个错误)
- A compiler with support for C++11 language features is required.
- LINUX These critical programs are missing or too old: make python bison compiler (python直接 yum install python3即可)
- LINUX These critical programs are missing or too old: bison (直接yum install bison解决)
更换系统重试(Lubuntu 22.04.1 VM虚拟机)
lubuntu-22.04.1-desktop-amd64
开启sshd,用moba传文件,这样会方便点,就不用再clone那个哈皮源码了,前提是你之前保存了源码在本地。
开始操作
先更新软件包,再安装套件
1 | apt-get update |
提取镜像
1 | dd if=/dev/block/bootdevice/by-name/boot of=/sdcard/stockboot.img |
进入内核源码文件夹
我把文件放在“/home”下了,请根据自己的路径修改下方的export
1 | export ARCH=arm64 |
创建档案
1 | cd /home/customkernel/android_kernel_xiaomi_whyred |
编译内核
1 | mv /home/customkernel/android_kernel_xiaomi_whyred/arch/arm64/boot/Image.gz-dtb /home/customkernel/AIK-Linux/boot.img-kernel |
报错
- fatal error: openssl/opensslv.h: No such file or directory
- libcuda.so.1https://blog.csdn.net/weixin_44843859/article/details/110632136: cannot open shared object file: No such file or directory
- [drivers/bluetooth/btfm_slim.c:26:23: fatal error: btfm_slim.h: No such file or directory](drivers/bluetooth/btfm_slim.c:26:23: fatal error: btfm_slim.h: No such file or directory)
- include/trace/define_trace.h:83:43: fatal error: ./trace.h: No such file or directory
终于终于!!!
arch/arm64/boot/Image.gz-dtb
你终于出现了~
接下来将Boot.img和image.gz-dtb档案放在AIK-Linux解压后的文件夹下
在该目录下执行,解开boot.img
1 | sudo ./unpackimg.sh boot.img |
进入解开后生成的split_img文件,将boot.img-kernel替换成我们编译生成的image.gz-dtb文件(需要改名)
重新打包,生成了一个新的镜像文件
1 | ./repackimg.sh |
接下来只需要将img刷入手机即可!!!!
注意先备份boot分区,失败可以恢复到原来的boot
如果出现反复重启,开不了机,就只能重新debug了。
刷入成功!
开始正事,开放kernel功能!
进入源码目录,开启kconfig菜单(建议在ssh工具中进行)
1 | make menuconfig |
cgroup
再次编译报错
- error: implicit declaration of function ‘vmalloc’; did you mean ‘kmalloc’? [-Werror=implicit-function-declaration]
237 | *buf = vmalloc(size + ecc_notice_size + 1);
| ^~~~~~~
| kmalloc
挂载cgroup
1 | sudo mount -t tmpfs -o uid=0,gid=0,mode=0755 cgroup /sys/fs/cgroup |
启用docker
1 | sudo dockerd --iptables=false |
总结
前面使用Centos进行操作,但由于更新glibc库过于困难,所以放弃该系统,如果你的系统满足条件的话,可以直接进行操作。
目前为止(2022/9/25),我自己编译的内核在开启某些特定功能时,输入手机出现反复重启现象。
最终,我采用ivon大佬提供的现成的img镜像,刷入lineageos系统,成功开启了docker。