内核源码
NGK支持AOSP、MIUI
1
| git clone https://github.com/mkr-0920/NGK_android_kernel_xiaomi_sm8250.git
|
编译链
clang
proton-clang
nexus-clang
neutron-clang
gcc
los-gcc-4.9-64
los-gcc-4.9-32
gcc-4.9-aosp-64
gcc-4.9-aosp-32
这里使用proton-clang
内核配置
1 2 3
| git clone https://github.com/mkr-0920/lxc-docker-support-for-android.git utils echo 'source "utils/Kconfig"' >> Kconfig
|
在arch/arm64/configs/xxxx_defconfig 中加入以下内容
补丁
参照utils下的补丁文件进行修改,fix_cgroup.patch,fix_panic.patch 主要修改以下这两个文件 kernel/cgroup/cgroup.c net/netfilter/xt_qtaguid.c
1 2 3 4 5 6 7 8 9 10 11 12 13
| --- a/kernel/cgroup/cgroup.c +++ b/kernel/cgroup/cgroup.c @@ -3786,6 +3786,10 @@ static int cgroup_add_file(struct cgroup_subsys_state *css, struct cgroup *cgrp, cfile->kn = kn; spin_unlock_irq(&cgroup_file_kn_lock); } + if (cft->ss && (cgrp->root->flags & CGRP_ROOT_NOPREFIX) && !(cft->flags & CFTYPE_NO_PREFIX)) { + snprintf(name, CGROUP_FILE_NAME_MAX, "%s.%s", cft->ss->name, cft->name); + kernfs_create_link(cgrp->kn, name, kn); + } return 0; }
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
| --- a/net/netfilter/xt_qtaguid.c 2020-05-12 12:13:14.000000000 +0300 +++ b/net/netfilter/xt_qtaguid.c 2019-09-15 23:56:45.000000000 +0300 @@ -737,7 +737,7 @@ { struct proc_iface_stat_fmt_info *p = m->private; struct iface_stat *iface_entry; - struct rtnl_link_stats64 dev_stats, *stats; + struct rtnl_link_stats64 *stats; struct rtnl_link_stats64 no_dev_stats = {0}; @@ -745,13 +745,8 @@ current->pid, current->tgid, from_kuid(&init_user_ns, current_fsuid())); iface_entry = list_entry(v, struct iface_stat, list); + stats = &no_dev_stats; - if (iface_entry->active) { - stats = dev_get_stats(iface_entry->net_dev, - &dev_stats); - } else { - stats = &no_dev_stats; - } /* * If the meaning of the data changes, then update the fmtX * string.
|
编译
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
| #!/bin/bash export PATH="/home/mkr/Downloads/toolchains/proton-clang/bin:${PATH}"
make ARCH=arm64 CC=clang nogravity-lmi_defconfig O=out make -j$(nproc --all) \ ARCH=arm64 \ O=out \ CC=clang \ CROSS_COMPILE=aarch64-linux-gnu- \ CROSS_COMPILE_COMPAT=arm-linux-gnueabi- \ AR=llvm-ar \ NM=llvm-nm \ OBJCOPY=llvm-objcopy \ OBJDUMP=llvm-objdump \ STRIP=llvm-strip \ LLVM=1 \ LLVM_IAS=1
|
打包内核
AnyKernel3
1 2 3
| git clone https://github.com/osm0sis/AnyKernel3.git cp out/arch/arm64/boot/Image.gz-dtb AnyKernel3/ cp out/arch/arm64/boot/dtbo.img AnyKernel3/
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43
| properties() { ' kernel.string=k30p-lxc-docker do.devicecheck=1 do.modules=0 do.systemless=1 do.cleanup=1 do.cleanuponabort=0 device.name1=lmi device.name2= device.name3= device.name4= device.name5= supported.versions= supported.patchlevels= '; }
block=/dev/block/bootdevice/by-name/boot; is_slot_device=0; ramdisk_compression=auto;
. tools/ak3-core.sh;
if [ -d $ramdisk/overlay ]; then rm -rf $ramdisk/overlay; fi;
dump_boot;
if [ -e /vendor/etc/powerhint.json ]; then cp -a $ramdisk/ngk/powerhint.json /vendor/etc/powerhint.json; chmod 644 /vendor/etc/powerhint.json; fi;
write_boot;
|
简要说明
1 2 3 4 5 6
| kernel.string= : 这里需要你填写内核的名称 do.devicecheck= : 填写1开启,0是关闭。这里是用来检测设备名称的,和下面device.name1~5形成对应。如果设备名称不对应,就无法刷入进设备。 device.name1 ~5 : 这里可以填写你的设备名称。注意,有些手机是开发代号,有的是设备名称具体依靠你自行判断。使用这些参数需要先开启do.devicecheck。 block= XXXX : 需要刷写内核的分区,一般是boot。 is_slot_device= : 填写1开启,0是关闭,auto是自动判断。设备使用是使用AB插槽。一般是VAB分区或者AB分区的则需要开启。 patch_vbmeta_flag= : 填写1开启,0是关闭,auto是自动判断。是否修补vbmeta来关闭AVB验证。
|
TWRP刷入
termux
termux-lxc