简介
本文将介绍一下如何使用docker编译红米k20pro的内核。作者当时尝试构建内核的原因是为了将3年前(好像是吧)购买的k20pro至尊版(已退役,12GB内存,512GB硬盘)制作成一个小的服务器。而如果只有安卓系统,实在是过于简陋,因此作者想在该机器上安装docker以扩展到更加完整的功能。
本人参考的教程有以下两个:CGCL-codes/Android-Container和Docker on Android。这两个都是比较优秀的教程,前者的作者好像是国人,而且使用的也是k20pro(不愧是一代神机),但是使用的是安卓10的手机,并且指定了ROM。后者教程相对通用一些,建议可以两个教程结合一起看,求同存异。
本文的主要目的是为了记录一下自己编译内核时的过程和一些坑,避免大家重蹈覆辙。
本文编译使用的机器是centos 7,8核2.6GHz的AMD,16GB内存。k20pro使用基于安卓11的MIUI12.5稳定版。
Clone内核源码
内核源码的来源有很多,可以去小米的开源仓库中寻找,也可以去找其他大神的定制内核源码。我这里使用的是在XDA论坛找到的Marisa内核源码,这个内核支持各种超频,虽然我对于超频并没有什么兴趣。
首先我们将源码clone下来:
git clone https://github.com/Laulan56/android_kernel_xiaomi_sm8150.git --depth=1 -b miui
为了节省时间,作者指定了depth深度为1,并选择miui分支。这里也为后来的编译埋下了一个小坑,如果想避免这个坑,可以选择深度为2。
然后接下来可以在源码目录中执行
git submodule update --init
克隆所有的子仓库,主要是因为这个内核中使用了exfat,并引入了对应的子仓库,所以需要如此。
修改内核源码
实际上这个源码是可以直接编译成功的,但是因为我们有一些骚操作并且需要修改内核的编译配置,所以需要修改一定量的源码。
首先是由于clone深度只有1导致的一个问题。在drivers/staging/qcacld-3.0/Kbuild:3356和第3363行。
CLD_IDS = $(shell cd "$(WLAN_ROOT)" && \ git log -50 $(CLD_CHECKOUT)~..HEAD | \ sed -nE 's/^\s*Change-Id: (I[0-f]{10})[0-f]{30}\s*$$/\1/p' | \ paste -sd "," -)CMN_CHECKOUT = $(shell cd "$(WLAN_COMMON_INC)" && \ git reflog | grep -vm1 "}: cherry-pick: " | grep -oE ^[0-f]+)CMN_IDS = $(shell cd "$(WLAN_COMMON_INC)" && \ git log -50 $(CMN_CHECKOUT)~..HEAD | \ sed -nE 's/^\s*Change-Id: (I[0-f]{10})[0-f]{30}\s*$$/\1/p' | \ paste -sd "," -)
在$(CLD_CHECKOUT)和$(CMN_CHECKOUT)后有一个波浪号,这个是指代上一个commit,但是我们因为只clone了一个commit,所以历史记录上没有的。为了保证不报错,直接将波浪号去掉就好(如果clone的层级较深,可以不考虑这个)。
然后是在kernel/Makefile:124和128行。
ifneq ($(CONFIG_MACH_XIAOMI_CEPHEUS),y)$(obj)/config_data.gz: arch/arm64/configs/cepheus_stock_defconfig FORCEendififneq ($(CONFIG_MACH_XIAOMI_RAPHAEL),y)$(obj)/config_data.gz: arch/arm64/configs/raphael_stock_defconfig FORCEendif
这里会使用默认的配置覆盖我们使用的配置,为了解决这个问题,我们可以这两行(实际上应该修改一行就OK了)修改为
ifneq ($(CONFIG_MACH_XIAOMI_CEPHEUS),y)$(obj)/config_data.gz: $(KCONFIG_CONFIG) FORCEendififneq ($(CONFIG_MACH_XIAOMI_RAPHAEL),y)$(obj)/config_data.gz: $(KCONFIG_CONFIG) FORCEendif
编译环境(构建docker)
作者是不建议在自己电脑上直接构造编译环境的,作者比较推荐使用docker进行编译环境的构造,docker可以尽可能的减少各个方面对编译的影响。实际上,Marisa内核源码中也有对于自己的编译镜像的构建,在.drone.yml中,有兴趣的可以参考这个进行镜像的构建,但是我当时因为时间原因,没有尝试。
作者使用的编译dockerfile,由于本人使用docker的时间也很短(实际上,就是为了编译内核特意学的),所以有很多不太合理的地方,大家可以自行修改。
FROM ubuntu:bionicRUN echo "deb http://mirrors.tencent.com/ubuntu/ bionic main restricted universe multiverse" > /etc/apt/sources.listRUN echo "deb http://mirrors.tencent.com/ubuntu/ bionic-security main restricted universe multiverse" >> /etc/apt/sources.listRUN echo "deb http://mirrors.tencent.com/ubuntu/ bionic-updates main restricted universe multiverse" >> /etc/apt/sources.listRUN echo "#deb http://mirrors.tencent.com/ubuntu/ bionic-proposed main restricted universe multiverse" >> /etc/apt/sources.listRUN echo "#deb http://mirrors.tencent.com/ubuntu/ bionic-backports main restricted universe multiverse" >> /etc/apt/sources.listRUN echo "deb-src http://mirrors.tencent.com/ubuntu/ bionic main restricted universe multiverse" >> /etc/apt/sources.listRUN echo "deb-src http://mirrors.tencent.com/ubuntu/ bionic-security main restricted universe multiverse" >> /etc/apt/sources.listRUN echo "deb-src http://mirrors.tencent.com/ubuntu/ bionic-updates main restricted universe multiverse" >> /etc/apt/sources.listRUN echo "#deb-src http://mirrors.tencent.com/ubuntu/ bionic-proposed main restricted universe multiverse" >> /etc/apt/sources.listRUN echo "#deb-src http://mirrors.tencent.com/ubuntu/ bionic-backports main restricted universe multiverse" >> /etc/apt/sources.listRUN apt clean allRUN apt updateRUN apt install -y bc bison build-essential ccache curl flex g++-multilib gcc-multilib git gnupg gperf imagemagick lib32ncurses5-dev lib32readline-dev lib32z1-dev liblz4-tool libncurses5-dev libsdl1.2-dev libssl-dev libwxgtk3.0-dev libxml2 libxml2-utils lzop pngcrush rsync schedtool squashfs-tools xsltproc zip zlib1g-dev unzip openjdk-8-jdk language-pack-zh-hans python cpioCOPY dtc /usr/bin/RUN chmod +x /usr/bin/dtc# 编译链RUN mkdir -p /compile/srcADD clang-4691093.tar.gz /compile/clangADD pie-release.tar.gz /compile/gccCOPY build.sh /compile/src/WORKDIR /compile/srcCMD bash build.sh
首先是对应的编译器下载地址clang-4891093.tar.gz和pie-release.tar.gz,dtc文件在这里下载[GUIDE] How To Compile Kernel & DTBO For Redmi K20 Pro,这些文件应该都要那啥才能下载。
还有我自己写的一个编译脚本。
export ARCH=arm64export SUBARCH=arm64export DTC_EXT=dtcrm -rf /dst/outcp -rf /dst/. /compile/srcmkdir outmake mrpropermake O=out ${CONFIG_NAME}export PATH="/compile/clang/bin:/compile/gcc/bin:${PATH}"make -j8 O=out \ ARCH=arm64 \ CC=/compile/clang/bin/clang \ CLANG_TRIPLE=aarch64-linux-gnu- \ CROSS_COMPILE=/compile/gcc/bin/aarch64-linux-android- | tee out/kernel.logmv -f /compile/src/out /dst
将以上的文件放到一个文件夹,然后使用命令
docker build -t kernel-compiler:v0.0.1 .
即可完成docker镜像的编译。
编译内核
完成了docker的编译,我们就可以开始内核的编译了。在这一步,因为docker的构建,我们只需要使用命令
docker run \ --rm \ -v android_kernel_xiaomi_sm8150:/dst \ -e CONFIG_NAME=raphael_defconfig \ kernel-compiler:v0.0.1
即可完成内核的构建。
刷入内核
我们在编译完成内核后,需要使用anykernel3进行打包,完成刷入内核的任务。我一开始是使用官方的anykernel3打包的,但是没有成功(应该是修改bash的时候路径写错了)。所以我这边直接使用Marisa的anykernel进行打包。
git clone https://github.com/Laulan56/anykernel.git -b miui-q
直接将编译好的内核out/arch/arm64/boot/Image-dtb复制到anykernel的文件夹,并打包成zip格式即可开始刷入自己的内核。
我的kernel配置
这里附上我自己的kernel配置,有想试试docker的可以试试,当然还需要按照之前提的教程中,修改一些源码。
CONFIG_HOTPLUG_SIZE_BITS=29CONFIG_LOCALVERSION="-Marisa"# CONFIG_LOCALVERSION_AUTO is not set# CONFIG_FHANDLE is not setCONFIG_AUDIT=y# CONFIG_AUDITSYSCALL is not setCONFIG_NO_HZ=yCONFIG_HIGH_RES_TIMERS=yCONFIG_IRQ_TIME_ACCOUNTING=yCONFIG_SCHED_WALT=yCONFIG_TASKSTATS=yCONFIG_TASK_XACCT=yCONFIG_TASK_IO_ACCOUNTING=yCONFIG_RCU_EXPERT=yCONFIG_RCU_FAST_NO_HZ=yCONFIG_RCU_NOCB_CPU=yCONFIG_IKCONFIG=yCONFIG_IKCONFIG_PROC=yCONFIG_IKHEADERS=yCONFIG_LOG_CPU_MAX_BUF_SHIFT=17CONFIG_BLK_CGROUP=yCONFIG_CGROUP_FREEZER=yCONFIG_CPUSETS=yCONFIG_CGROUP_CPUACCT=yCONFIG_CGROUP_BPF=yCONFIG_SCHED_CORE_CTL=yCONFIG_NAMESPACES=y# CONFIG_PID_NS is not setCONFIG_SCHED_AUTOGROUP=yCONFIG_SCHED_TUNE=yCONFIG_CPUSET_ASSIST=yCONFIG_CPUSET_BG="0-1"CONFIG_CPUSET_CAMERA="0-3,6-7"CONFIG_CPUSET_FG="0-3,5-6"CONFIG_CPUSET_RESTRICTED="0-3"CONFIG_CPUSET_TOP_APP="0-7"CONFIG_CPUSET_SYSTEM_BG="0-3"CONFIG_DEFAULT_USE_ENERGY_AWARE=yCONFIG_BLK_DEV_INITRD=y# CONFIG_RD_XZ is not set# CONFIG_RD_LZO is not set# CONFIG_RD_LZ4 is not setCONFIG_KALLSYMS_ALL=yCONFIG_BPF_SYSCALL=yCONFIG_BPF_JIT_ALWAYS_ON=yCONFIG_EMBEDDED=y# CONFIG_SLUB_DEBUG is not set# CONFIG_COMPAT_BRK is not setCONFIG_SLAB_FREELIST_RANDOM=yCONFIG_SLAB_FREELIST_HARDENED=yCONFIG_PROFILING=yCONFIG_CC_STACKPROTECTOR_STRONG=yCONFIG_REFCOUNT_FULL=y# CONFIG_MODULES is not setCONFIG_BLK_INLINE_ENCRYPTION=yCONFIG_BLK_INLINE_ENCRYPTION_FALLBACK=yCONFIG_PARTITION_ADVANCED=yCONFIG_CFQ_GROUP_IOSCHED=yCONFIG_ARCH_QCOM=yCONFIG_ARCH_SM8150=yCONFIG_PCI=yCONFIG_PCI_MSM=yCONFIG_PCI_MSM_MSI=yCONFIG_SCHED_MC=yCONFIG_NR_CPUS=8CONFIG_LITTLE_CPU_MASK=15CONFIG_BIG_CPU_MASK=112CONFIG_PRIME_CPU_MASK=128CONFIG_PREEMPT=yCONFIG_HZ_300=yCONFIG_MEMORY_HOTPLUG=yCONFIG_MEMORY_HOTPLUG_DEFAULT_ONLINE=yCONFIG_MEMORY_HOTPLUG_MOVABLE_NODE=yCONFIG_MEMORY_HOTREMOVE=yCONFIG_CMA=yCONFIG_ZSMALLOC=yCONFIG_BALANCE_ANON_FILE_RECLAIM=yCONFIG_SECCOMP=yCONFIG_OKL4_GUEST=yCONFIG_ARMV8_DEPRECATED=yCONFIG_SWP_EMULATION=yCONFIG_CP15_BARRIER_EMULATION=yCONFIG_SETEND_EMULATION=yCONFIG_ARM64_SW_TTBR0_PAN=y# CONFIG_ARM64_VHE is not setCONFIG_RANDOMIZE_BASE=y# CONFIG_EFI is not setCONFIG_BUILD_ARM64_UNCOMPRESSED_KERNEL=yCONFIG_KRYO_PMU_WORKAROUND=yCONFIG_BUILD_ARM64_DT_OVERLAY=y# CONFIG_CORE_DUMP_DEFAULT_ELF_HEADERS is not setCONFIG_COMPAT=yCONFIG_PM_WAKELOCKS=yCONFIG_PM_WAKELOCKS_LIMIT=0# CONFIG_PM_WAKELOCKS_GC is not setCONFIG_CPU_IDLE=yCONFIG_ARM_CPUIDLE=yCONFIG_CPU_FREQ=yCONFIG_CPU_FREQ_STAT=yCONFIG_CPU_FREQ_TIMES=yCONFIG_CPU_FREQ_GOV_POWERSAVE=yCONFIG_CPU_FREQ_GOV_USERSPACE=yCONFIG_CPU_FREQ_GOV_ONDEMAND=yCONFIG_CPU_FREQ_GOV_CONSERVATIVE=yCONFIG_CPU_BOOST=yCONFIG_CPU_FREQ_GOV_SCHEDUTIL=yCONFIG_NET=yCONFIG_PACKET=yCONFIG_UNIX=yCONFIG_XFRM_USER=yCONFIG_XFRM_INTERFACE=yCONFIG_XFRM_STATISTICS=yCONFIG_NET_KEY=yCONFIG_INET=yCONFIG_IP_MULTICAST=yCONFIG_IP_ADVANCED_ROUTER=yCONFIG_IP_MULTIPLE_TABLES=yCONFIG_IP_ROUTE_VERBOSE=yCONFIG_IP_PNP=yCONFIG_IP_PNP_DHCP=yCONFIG_NET_IPGRE_DEMUX=yCONFIG_SYN_COOKIES=yCONFIG_NET_IPVTI=yCONFIG_INET_AH=yCONFIG_INET_ESP=yCONFIG_INET_IPCOMP=yCONFIG_INET_UDP_DIAG=yCONFIG_INET_DIAG_DESTROY=yCONFIG_IPV6_ROUTER_PREF=yCONFIG_IPV6_ROUTE_INFO=yCONFIG_IPV6_OPTIMISTIC_DAD=yCONFIG_INET6_AH=yCONFIG_INET6_ESP=yCONFIG_INET6_IPCOMP=yCONFIG_IPV6_MIP6=yCONFIG_IPV6_VTI=yCONFIG_IPV6_MULTIPLE_TABLES=yCONFIG_IPV6_SUBTREES=yCONFIG_NETFILTER=yCONFIG_NF_CONNTRACK=yCONFIG_NF_CONNTRACK_SECMARK=yCONFIG_NF_CONNTRACK_EVENTS=yCONFIG_NF_CONNTRACK_AMANDA=yCONFIG_NF_CONNTRACK_FTP=yCONFIG_NF_CONNTRACK_H323=yCONFIG_NF_CONNTRACK_IRC=yCONFIG_NF_CONNTRACK_NETBIOS_NS=yCONFIG_NF_CONNTRACK_PPTP=yCONFIG_NF_CONNTRACK_SANE=yCONFIG_NF_CONNTRACK_TFTP=yCONFIG_NF_CT_NETLINK=yCONFIG_NETFILTER_XT_TARGET_CLASSIFY=yCONFIG_NETFILTER_XT_TARGET_CONNMARK=yCONFIG_NETFILTER_XT_TARGET_CONNSECMARK=yCONFIG_NETFILTER_XT_TARGET_DSCP=yCONFIG_NETFILTER_XT_TARGET_IDLETIMER=yCONFIG_NETFILTER_XT_TARGET_HARDIDLETIMER=yCONFIG_NETFILTER_XT_TARGET_LOG=yCONFIG_NETFILTER_XT_TARGET_MARK=yCONFIG_NETFILTER_XT_TARGET_NFLOG=yCONFIG_NETFILTER_XT_TARGET_NFQUEUE=yCONFIG_NETFILTER_XT_TARGET_NOTRACK=yCONFIG_NETFILTER_XT_TARGET_TEE=yCONFIG_NETFILTER_XT_TARGET_TPROXY=yCONFIG_NETFILTER_XT_TARGET_TRACE=yCONFIG_NETFILTER_XT_TARGET_SECMARK=yCONFIG_NETFILTER_XT_TARGET_TCPMSS=yCONFIG_NETFILTER_XT_MATCH_BPF=yCONFIG_NETFILTER_XT_MATCH_COMMENT=yCONFIG_NETFILTER_XT_MATCH_CONNLIMIT=yCONFIG_NETFILTER_XT_MATCH_CONNMARK=yCONFIG_NETFILTER_XT_MATCH_CONNTRACK=yCONFIG_NETFILTER_XT_MATCH_DSCP=yCONFIG_NETFILTER_XT_MATCH_ESP=yCONFIG_NETFILTER_XT_MATCH_HASHLIMIT=yCONFIG_NETFILTER_XT_MATCH_HELPER=yCONFIG_NETFILTER_XT_MATCH_IPRANGE=y# CONFIG_NETFILTER_XT_MATCH_L2TP is not setCONFIG_NETFILTER_XT_MATCH_LENGTH=yCONFIG_NETFILTER_XT_MATCH_LIMIT=yCONFIG_NETFILTER_XT_MATCH_MAC=yCONFIG_NETFILTER_XT_MATCH_MARK=yCONFIG_NETFILTER_XT_MATCH_MULTIPORT=yCONFIG_NETFILTER_XT_MATCH_OWNER=yCONFIG_NETFILTER_XT_MATCH_POLICY=yCONFIG_NETFILTER_XT_MATCH_PKTTYPE=yCONFIG_NETFILTER_XT_MATCH_QUOTA=yCONFIG_NETFILTER_XT_MATCH_QUOTA2=yCONFIG_NETFILTER_XT_MATCH_QUOTA2_LOG=y# CONFIG_NETFILTER_XT_MATCH_SCTP is not setCONFIG_NETFILTER_XT_MATCH_SOCKET=yCONFIG_NETFILTER_XT_MATCH_STATE=yCONFIG_NETFILTER_XT_MATCH_STATISTIC=yCONFIG_NETFILTER_XT_MATCH_STRING=yCONFIG_NETFILTER_XT_MATCH_TIME=yCONFIG_NETFILTER_XT_MATCH_U32=yCONFIG_NF_CONNTRACK_IPV4=yCONFIG_NF_SOCKET_IPV4=yCONFIG_IP_NF_IPTABLES=yCONFIG_IP_NF_MATCH_AH=yCONFIG_IP_NF_MATCH_ECN=yCONFIG_IP_NF_MATCH_RPFILTER=yCONFIG_IP_NF_MATCH_TTL=yCONFIG_IP_NF_FILTER=yCONFIG_IP_NF_TARGET_REJECT=yCONFIG_IP_NF_NAT=yCONFIG_IP_NF_TARGET_MASQUERADE=yCONFIG_IP_NF_TARGET_NETMAP=yCONFIG_IP_NF_TARGET_REDIRECT=yCONFIG_IP_NF_MANGLE=yCONFIG_IP_NF_RAW=yCONFIG_IP_NF_SECURITY=yCONFIG_IP_NF_ARPTABLES=yCONFIG_IP_NF_ARPFILTER=yCONFIG_IP_NF_ARP_MANGLE=yCONFIG_NF_CONNTRACK_IPV6=yCONFIG_NF_SOCKET_IPV6=yCONFIG_IP6_NF_IPTABLES=yCONFIG_IP6_NF_MATCH_RPFILTER=yCONFIG_IP6_NF_FILTER=yCONFIG_IP6_NF_TARGET_REJECT=yCONFIG_IP6_NF_MANGLE=yCONFIG_IP6_NF_RAW=yCONFIG_BRIDGE_NF_EBTABLES=yCONFIG_BRIDGE_EBT_BROUTE=yCONFIG_IP_SCTP=yCONFIG_L2TP=yCONFIG_L2TP_V3=yCONFIG_L2TP_IP=yCONFIG_L2TP_ETH=yCONFIG_BRIDGE=yCONFIG_NET_SCHED=yCONFIG_NET_SCH_HTB=yCONFIG_NET_SCH_PRIO=yCONFIG_NET_SCH_MULTIQ=yCONFIG_NET_SCH_INGRESS=yCONFIG_NET_CLS_FW=yCONFIG_NET_CLS_U32=yCONFIG_CLS_U32_MARK=yCONFIG_NET_CLS_FLOW=yCONFIG_NET_CLS_BPF=yCONFIG_NET_EMATCH=yCONFIG_NET_EMATCH_CMP=yCONFIG_NET_EMATCH_NBYTE=yCONFIG_NET_EMATCH_U32=yCONFIG_NET_EMATCH_META=yCONFIG_NET_EMATCH_TEXT=yCONFIG_NET_CLS_ACT=yCONFIG_NET_ACT_GACT=yCONFIG_NET_ACT_MIRRED=yCONFIG_NET_ACT_SKBEDIT=yCONFIG_NET_SWITCHDEV=yCONFIG_QRTR=yCONFIG_QRTR_SMD=yCONFIG_QRTR_MHI=yCONFIG_QRTR_FIFO=yCONFIG_BPF_JIT=yCONFIG_SOCKEV_NLMCAST=yCONFIG_BT=yCONFIG_MSM_BT_POWER=yCONFIG_CFG80211=yCONFIG_CFG80211_CERTIFICATION_ONUS=yCONFIG_CFG80211_REG_CELLULAR_HINTS=yCONFIG_CFG80211_INTERNAL_REGDB=yCONFIG_RFKILL=yCONFIG_NFC_NQ=yCONFIG_FW_LOADER_USER_HELPER_FALLBACK=yCONFIG_REGMAP_ALLOW_WRITE_DEBUGFS=yCONFIG_DMA_CMA=yCONFIG_MHI_BUS=yCONFIG_MHI_QCOM=yCONFIG_MHI_NETDEV=yCONFIG_MHI_UCI=yCONFIG_ZRAM=yCONFIG_BLK_DEV_LOOP=yCONFIG_BLK_DEV_LOOP_MIN_COUNT=16CONFIG_BLK_DEV_RAM=yCONFIG_BLK_DEV_RAM_SIZE=8192CONFIG_HDCP_QSEECOM=yCONFIG_QSEECOM=yCONFIG_UID_SYS_STATS=yCONFIG_MEMORY_STATE_TIME=yCONFIG_OKL4_USER_VIRQ=yCONFIG_AKM09970=yCONFIG_TI_DRV8846=yCONFIG_SIMTRAY_STATUS=yCONFIG_SCSI=yCONFIG_BLK_DEV_SD=yCONFIG_CHR_DEV_SG=yCONFIG_CHR_DEV_SCH=yCONFIG_SCSI_CONSTANTS=yCONFIG_SCSI_SCAN_ASYNC=yCONFIG_SCSI_UFSHCD=yCONFIG_SCSI_UFSHCD_PLATFORM=yCONFIG_SCSI_UFS_QCOM=yCONFIG_SCSI_UFS_CRYPTO=yCONFIG_SCSI_UFS_CRYPTO_QTI=yCONFIG_MD=yCONFIG_BLK_DEV_DM=yCONFIG_DM_CRYPT=yCONFIG_DM_DEFAULT_KEY=yCONFIG_DM_SNAPSHOT=yCONFIG_DM_UEVENT=yCONFIG_DM_VERITY=yCONFIG_DM_VERITY_FEC=yCONFIG_DM_BOW=yCONFIG_NETDEVICES=yCONFIG_BONDING=yCONFIG_DUMMY=yCONFIG_TUN=yCONFIG_VETH=yCONFIG_SKY2=yCONFIG_RMNET=yCONFIG_SMSC911X=yCONFIG_PPP=yCONFIG_PPP_BSDCOMP=yCONFIG_PPP_DEFLATE=yCONFIG_PPP_FILTER=yCONFIG_PPP_MPPE=yCONFIG_PPP_MULTILINK=yCONFIG_PPPOE=yCONFIG_PPTP=yCONFIG_PPPOL2TP=yCONFIG_PPPOLAC=yCONFIG_PPPOPNS=yCONFIG_PPP_ASYNC=yCONFIG_PPP_SYNC_TTY=yCONFIG_USB_RTL8152=yCONFIG_USB_LAN78XX=yCONFIG_USB_USBNET=yCONFIG_WIL6210=yCONFIG_WCNSS_MEM_PRE_ALLOC=yCONFIG_CLD_LL_CORE=yCONFIG_CNSS_GENL=yCONFIG_INPUT_EVDEV=yCONFIG_KEYBOARD_GPIO=y# CONFIG_INPUT_MOUSE is not setCONFIG_INPUT_JOYSTICK=yCONFIG_JOYSTICK_XPAD=yCONFIG_INPUT_TOUCHSCREEN=yCONFIG_TOUCHSCREEN_XIAOMI_TOUCHFEATURE=yCONFIG_TOUCHSCREEN_GOODIX_GTX8=yCONFIG_INPUT_MISC=yCONFIG_INPUT_HBTP_INPUT=yCONFIG_INPUT_QPNP_POWER_ON=yCONFIG_INPUT_QTI_HAPTICS=yCONFIG_INPUT_UINPUT=yCONFIG_INPUT_FINGERPRINT=yCONFIG_FINGERPRINT_GOODIX_TA=y# CONFIG_SERIO_SERPORT is not set# CONFIG_VT is not set# CONFIG_LEGACY_PTYS is not set# CONFIG_DEVMEM is not setCONFIG_SERIAL_MSM_GENI=yCONFIG_HW_RANDOM=yCONFIG_HW_RANDOM_MSM_LEGACY=y# CONFIG_DEVPORT is not setCONFIG_DIAG_CHAR=yCONFIG_MSM_FASTCVPD=yCONFIG_MSM_ADSPRPC=yCONFIG_MSM_RDBG=yCONFIG_OKL4_PIPE=yCONFIG_I2C_CHARDEV=yCONFIG_I2C_QCOM_GENI=yCONFIG_SPI=yCONFIG_SPI_QCOM_GENI=yCONFIG_SPI_SPIDEV=yCONFIG_SPMI=yCONFIG_SPMI_MSM_PMIC_ARB_DEBUG=yCONFIG_SPMI_SIMULATOR=yCONFIG_PM8150_PMIC_SIMULATOR=yCONFIG_PM8150B_PMIC_SIMULATOR=yCONFIG_PM8150L_PMIC_SIMULATOR=yCONFIG_SLIMBUS_MSM_NGD=yCONFIG_PINCTRL_QCOM_SPMI_PMIC=yCONFIG_PINCTRL_SM8150=yCONFIG_GPIO_SYSFS=yCONFIG_POWER_RESET_QCOM=yCONFIG_QCOM_DLOAD_MODE=yCONFIG_POWER_RESET_XGENE=yCONFIG_POWER_RESET_SYSCON=yCONFIG_QPNP_FG_GEN4=yCONFIG_QPNP_SMB5=yCONFIG_QPNP_QNOVO5=yCONFIG_SMB1390_CHARGE_PUMP=yCONFIG_THERMAL=yCONFIG_THERMAL_WRITABLE_TRIPS=yCONFIG_THERMAL_GOV_USER_SPACE=yCONFIG_THERMAL_GOV_LOW_LIMITS=yCONFIG_CPU_THERMAL=yCONFIG_DEVFREQ_THERMAL=yCONFIG_QCOM_SPMI_TEMP_ALARM=yCONFIG_THERMAL_TSENS=yCONFIG_QTI_THERMAL_LIMITS_DCVS=yCONFIG_QTI_VIRTUAL_SENSOR=yCONFIG_QTI_AOP_REG_COOLING_DEVICE=yCONFIG_QTI_QMI_COOLING_DEVICE=yCONFIG_QTI_QMI_SENSOR=yCONFIG_REGULATOR_COOLING_DEVICE=yCONFIG_QTI_BCL_PMIC5=yCONFIG_QTI_BCL_SOC_DRIVER=yCONFIG_QTI_ADC_TM=yCONFIG_MFD_I2C_PMIC=yCONFIG_MFD_SPMI_PMIC=yCONFIG_REGULATOR_FIXED_VOLTAGE=yCONFIG_REGULATOR_PROXY_CONSUMER=yCONFIG_REGULATOR_QPNP_AMOLED=yCONFIG_REGULATOR_QPNP_LCDB=yCONFIG_REGULATOR_REFGEN=yCONFIG_REGULATOR_RPMH=yCONFIG_REGULATOR_STUB=yCONFIG_MEDIA_SUPPORT=yCONFIG_MEDIA_CAMERA_SUPPORT=yCONFIG_MEDIA_DIGITAL_TV_SUPPORT=yCONFIG_MEDIA_CONTROLLER=yCONFIG_VIDEO_V4L2_SUBDEV_API=yCONFIG_VIDEO_ADV_DEBUG=yCONFIG_VIDEO_FIXED_MINOR_RANGES=yCONFIG_MEDIA_USB_SUPPORT=yCONFIG_USB_VIDEO_CLASS=yCONFIG_V4L_PLATFORM_DRIVERS=yCONFIG_SPECTRA_CAMERA=yCONFIG_MSM_VIDC_V4L2=yCONFIG_MSM_VIDC_GOVERNORS=yCONFIG_MSM_SDE_ROTATOR=yCONFIG_MSM_SDE_ROTATOR_EVTLOG_DEBUG=yCONFIG_MSM_NPU=yCONFIG_DVB_MPQ=yCONFIG_DVB_MPQ_DEMUX=yCONFIG_DVB_MPQ_TSPP1=yCONFIG_TSPP=yCONFIG_DRM=yCONFIG_DRM_MSM_REGISTER_LOGGING=yCONFIG_DRM_SDE_EVTLOG_DEBUG=yCONFIG_DRM_SDE_RSC=yCONFIG_DRM_LT_LT9611=yCONFIG_FB_ARMCLCD=yCONFIG_BACKLIGHT_QCOM_SPMI_WLED=yCONFIG_LOGO=y# CONFIG_LOGO_LINUX_MONO is not set# CONFIG_LOGO_LINUX_VGA16 is not setCONFIG_SOUND=yCONFIG_SND=yCONFIG_SND_DYNAMIC_MINORS=yCONFIG_SND_USB_AUDIO=yCONFIG_SND_USB_AUDIO_QMI=yCONFIG_SND_SOC=yCONFIG_UHID=yCONFIG_HID_APPLE=yCONFIG_HID_ELECOM=yCONFIG_HID_MAGICMOUSE=yCONFIG_HID_MICROSOFT=yCONFIG_HID_MULTITOUCH=yCONFIG_HID_NINTENDO=yCONFIG_HID_PLANTRONICS=yCONFIG_HID_PLAYSTATION=yCONFIG_PLAYSTATION_FF=yCONFIG_HID_SONY=yCONFIG_SONY_FF=yCONFIG_HID_QVR=yCONFIG_USB_HIDDEV=yCONFIG_USB_ANNOUNCE_NEW_DEVICES=yCONFIG_USB_XHCI_HCD=yCONFIG_USB_EHCI_HCD=yCONFIG_USB_EHCI_HCD_PLATFORM=yCONFIG_USB_OHCI_HCD=yCONFIG_USB_OHCI_HCD_PLATFORM=yCONFIG_USB_STORAGE=yCONFIG_USB_DWC3=yCONFIG_USB_DWC3_MSM=yCONFIG_USB_ISP1760=yCONFIG_USB_ISP1760_HOST_ROLE=yCONFIG_USB_EHSET_TEST_FIXTURE=yCONFIG_USB_LINK_LAYER_TEST=yCONFIG_USB_REDRIVER_NB7VPQ904M=yCONFIG_NOP_USB_XCEIV=yCONFIG_USB_QCOM_EMU_PHY=yCONFIG_USB_MSM_SSPHY_QMP=yCONFIG_MSM_HSUSB_PHY=yCONFIG_DUAL_ROLE_USB_INTF=yCONFIG_USB_GADGET=yCONFIG_USB_GADGET_VBUS_DRAW=900CONFIG_USB_CONFIGFS=yCONFIG_USB_CONFIGFS_NCM=yCONFIG_USB_CONFIGFS_RNDIS=yCONFIG_USB_CONFIGFS_MASS_STORAGE=yCONFIG_USB_CONFIGFS_F_FS=yCONFIG_USB_CONFIGFS_F_MTP=yCONFIG_USB_CONFIGFS_F_PTP=yCONFIG_USB_CONFIGFS_F_ACC=yCONFIG_USB_CONFIGFS_F_AUDIO_SRC=yCONFIG_USB_CONFIGFS_UEVENT=yCONFIG_USB_CONFIGFS_F_UAC2=yCONFIG_USB_CONFIGFS_F_MIDI=yCONFIG_USB_CONFIGFS_F_HID=yCONFIG_USB_CONFIGFS_F_DIAG=yCONFIG_USB_CONFIGFS_F_CDEV=yCONFIG_USB_CONFIGFS_F_CCID=yCONFIG_USB_CONFIGFS_F_GSI=yCONFIG_USB_CONFIGFS_F_QDSS=yCONFIG_USB_PD_POLICY=yCONFIG_QPNP_USB_PDPHY=yCONFIG_MMC=yCONFIG_MMC_PERF_PROFILING=yCONFIG_MMC_BLOCK_MINORS=32CONFIG_MMC_BLOCK_DEFERRED_RESUME=yCONFIG_MMC_TEST=yCONFIG_MMC_PARANOID_SD_INIT=yCONFIG_MMC_CLKGATE=yCONFIG_MMC_SDHCI=yCONFIG_MMC_SDHCI_PLTFM=yCONFIG_MMC_SDHCI_MSM=yCONFIG_NEW_LEDS=yCONFIG_LEDS_CLASS=yCONFIG_LEDS_QPNP_FLASH_V2=yCONFIG_LEDS_QPNP_HAPTICS=yCONFIG_LEDS_QCOM_CLK=yCONFIG_LEDS_QTI_TRI_LED=yCONFIG_LEDS_TRIGGER_TIMER=yCONFIG_EDAC=yCONFIG_EDAC_KRYO_ARM64=yCONFIG_EDAC_KRYO_ARM64_PANIC_ON_UE=yCONFIG_RTC_CLASS=yCONFIG_RTC_DRV_QPNP=yCONFIG_DMADEVICES=yCONFIG_QCOM_GPI_DMA=yCONFIG_UIO=yCONFIG_UIO_MSM_SHAREDMEM=yCONFIG_STAGING=yCONFIG_ASHMEM=yCONFIG_ANDROID_SIMPLE_LMK=yCONFIG_ION=yCONFIG_QCA_CLD_WLAN=yCONFIG_QCOM_GENI_SE=yCONFIG_QPNP_REVID=yCONFIG_SPS=yCONFIG_SPS_SUPPORT_NDP_BAM=yCONFIG_USB_BAM=yCONFIG_IPA3=yCONFIG_IPA_WDI_UNIFIED_API=yCONFIG_RMNET_IPA3=yCONFIG_RNDIS_IPA=yCONFIG_IPA3_MHI_PROXY=yCONFIG_IPA3_MHI_PRIME_MANAGER=yCONFIG_IPA_UT=yCONFIG_MSM_11AD=yCONFIG_SEEMP_CORE=yCONFIG_IPA3_REGDUMP=yCONFIG_QCOM_MDSS_PLL=yCONFIG_SPMI_PMIC_CLKDIV=yCONFIG_MSM_CLK_AOP_QMP=yCONFIG_MSM_GCC_SM8150=yCONFIG_MSM_NPUCC_SM8150=yCONFIG_MSM_VIDEOCC_SM8150=yCONFIG_MSM_CAMCC_SM8150=yCONFIG_CLOCK_CPU_OSM=yCONFIG_MSM_DISPCC_SM8150=yCONFIG_MSM_DEBUGCC_SM8150=yCONFIG_MSM_CLK_RPMH=yCONFIG_MSM_GPUCC_SM8150=yCONFIG_HWSPINLOCK=yCONFIG_HWSPINLOCK_QCOM=yCONFIG_QCOM_APCS_IPC=yCONFIG_MSM_QMP=yCONFIG_IOMMU_IO_PGTABLE_FAST=yCONFIG_ARM_SMMU=yCONFIG_QCOM_LAZY_MAPPING=yCONFIG_IOMMU_DEBUG=yCONFIG_IOMMU_DEBUG_TRACKING=yCONFIG_IOMMU_TESTS=yCONFIG_RPMSG_CHAR=yCONFIG_RPMSG_QCOM_GLINK_SMEM=yCONFIG_RPMSG_QCOM_GLINK_SPSS=yCONFIG_RPMSG_QCOM_GLINK_SPI=yCONFIG_QCOM_MEM_OFFLINE=yCONFIG_OVERRIDE_MEMORY_LIMIT=yCONFIG_QCOM_CPUSS_DUMP=yCONFIG_QCOM_RUN_QUEUE_STATS=yCONFIG_QCOM_LLCC=yCONFIG_QCOM_SM8150_LLCC=yCONFIG_QCOM_LLCC_PERFMON=yCONFIG_QCOM_QMI_HELPERS=yCONFIG_QCOM_QMI_RMNET=yCONFIG_QCOM_QMI_DFC=yCONFIG_QCOM_QMI_POWER_COLLAPSE=yCONFIG_QCOM_SMEM=yCONFIG_QCOM_MEMORY_DUMP_V2=yCONFIG_QCOM_WATCHDOG_V2=yCONFIG_QCOM_FORCE_WDOG_BITE_ON_PANIC=yCONFIG_QCOM_SMP2P=yCONFIG_QPNP_PBS=yCONFIG_MSM_SERVICE_LOCATOR=yCONFIG_MSM_SERVICE_NOTIFIER=yCONFIG_MSM_SUBSYSTEM_RESTART=yCONFIG_MSM_PIL=yCONFIG_MSM_SYSMON_QMI_COMM=yCONFIG_MSM_PIL_SSR_GENERIC=yCONFIG_SETUP_SSR_NOTIF_TIMEOUTS=yCONFIG_SSR_SYSMON_NOTIF_TIMEOUT=20000CONFIG_SSR_SUBSYS_NOTIF_TIMEOUT=20000CONFIG_PANIC_ON_SSR_NOTIF_TIMEOUT=yCONFIG_MSM_BOOT_STATS=yCONFIG_QCOM_DCC_V2=yCONFIG_QCOM_SECURE_BUFFER=yCONFIG_ICNSS=yCONFIG_ICNSS_QMI=yCONFIG_QCOM_EUD=yCONFIG_QCOM_MINIDUMP=yCONFIG_QCOM_BUS_SCALING=yCONFIG_QCOM_BUS_CONFIG_RPMH=yCONFIG_QCOM_COMMAND_DB=yCONFIG_QCOM_EARLY_RANDOM=yCONFIG_MSM_SPSS_UTILS=yCONFIG_MSM_SPCOM=yCONFIG_QTI_RPMH_API=yCONFIG_QSEE_IPC_IRQ_BRIDGE=yCONFIG_QCOM_GLINK=yCONFIG_QCOM_GLINK_PKT=yCONFIG_QCOM_QDSS_BRIDGE=yCONFIG_QTI_RPM_STATS_LOG=yCONFIG_MSM_CDSP_LOADER=yCONFIG_QCOM_SMCINVOKE=yCONFIG_MSM_EVENT_TIMER=yCONFIG_MSM_PM=yCONFIG_MSM_QBT1000=yCONFIG_QCOM_FSA4480_I2C=yCONFIG_MEM_SHARE_QMI_SERVICE=yCONFIG_RMNET_CTL=yCONFIG_MSM_PERFORMANCE=yCONFIG_QMP_DEBUGFS_CLIENT=yCONFIG_QCOM_SMP2P_SLEEPSTATE=yCONFIG_QCOM_CDSP_RM=yCONFIG_QCOM_AOP_DDR_MESSAGING=yCONFIG_QCOM_AOP_DDRSS_COMMANDS=yCONFIG_QTI_CRYPTO_COMMON=yCONFIG_QTI_CRYPTO_TZ=yCONFIG_QCOM_HYP_CORE_CTL=yCONFIG_DEVFREQ_GOV_PASSIVE=yCONFIG_QCOM_BIMC_BWMON=yCONFIG_ARM_MEMLAT_MON=yCONFIG_QCOMCCI_HWMON=yCONFIG_QCOM_M4M_HWMON=yCONFIG_DEVFREQ_GOV_QCOM_BW_HWMON=yCONFIG_DEVFREQ_GOV_QCOM_CACHE_HWMON=yCONFIG_DEVFREQ_GOV_MEMLAT=yCONFIG_DEVFREQ_SIMPLE_DEV=yCONFIG_QCOM_DEVFREQ_DEVBW=yCONFIG_DEVFREQ_GOV_CDSPL3=yCONFIG_EXTCON_USB_GPIO=yCONFIG_IIO=yCONFIG_QCOM_SPMI_ADC5=yCONFIG_PWM=yCONFIG_PWM_QTI_LPG=yCONFIG_QCOM_KGSL=yCONFIG_ARM_GIC_V3_ACL=yCONFIG_QCOM_LLCC_PMU=yCONFIG_RAS=yCONFIG_ANDROID=yCONFIG_ANDROID_BINDER_IPC=yCONFIG_ANDROID_BINDERFS=yCONFIG_NVMEM_SPMI_SDAM=yCONFIG_SENSORS_SSC=yCONFIG_ESOC=yCONFIG_ESOC_DEV=yCONFIG_ESOC_CLIENT=yCONFIG_ESOC_MDM_4x=yCONFIG_ESOC_MDM_DRV=yCONFIG_ESOC_MDM_DBG_ENG=yCONFIG_MSM_TZ_LOG=yCONFIG_EXT4_FS=yCONFIG_EXT4_FS_POSIX_ACL=yCONFIG_EXT4_FS_SECURITY=yCONFIG_EXT4_ENCRYPTION=yCONFIG_F2FS_FS=yCONFIG_F2FS_FS_SECURITY=yCONFIG_F2FS_FS_ENCRYPTION=yCONFIG_FS_ENCRYPTION_INLINE_CRYPT=yCONFIG_FS_VERITY=yCONFIG_FS_VERITY_BUILTIN_SIGNATURES=yCONFIG_QUOTA=yCONFIG_QUOTA_NETLINK_INTERFACE=yCONFIG_QFMT_V2=yCONFIG_FUSE_FS=yCONFIG_OVERLAY_FS=yCONFIG_INCREMENTAL_FS=yCONFIG_MSDOS_FS=yCONFIG_VFAT_FS=yCONFIG_TMPFS_POSIX_ACL=yCONFIG_ECRYPT_FS=yCONFIG_ECRYPT_FS_MESSAGING=yCONFIG_SDCARD_FS=yCONFIG_NLS_CODEPAGE_437=yCONFIG_NLS_ISO8859_1=yCONFIG_NLS_UTF8=yCONFIG_PRINTK_TIME=yCONFIG_DEBUG_INFO=yCONFIG_PAGE_OWNER=yCONFIG_MAGIC_SYSRQ=yCONFIG_PANIC_TIMEOUT=-1CONFIG_SCHEDSTATS=y# CONFIG_DEBUG_PREEMPT is not setCONFIG_DEBUG_LIST=yCONFIG_IPC_LOGGING=yCONFIG_DEBUG_ALIGN_RODATA=yCONFIG_CORESIGHT=yCONFIG_CORESIGHT_LINK_AND_SINK_TMC=yCONFIG_CORESIGHT_DYNAMIC_REPLICATOR=yCONFIG_CORESIGHT_STM=yCONFIG_CORESIGHT_CTI=yCONFIG_CORESIGHT_TPDA=yCONFIG_CORESIGHT_TPDM=yCONFIG_CORESIGHT_HWEVENT=yCONFIG_CORESIGHT_DUMMY=yCONFIG_CORESIGHT_REMOTE_ETM=yCONFIG_CORESIGHT_REMOTE_ETM_DEFAULT_ENABLE=0CONFIG_CORESIGHT_TGU=yCONFIG_CORESIGHT_EVENT=yCONFIG_SECURITY=yCONFIG_HARDENED_USERCOPY=yCONFIG_FORTIFY_SOURCE=yCONFIG_STATIC_USERMODEHELPER=yCONFIG_STATIC_USERMODEHELPER_PATH=""CONFIG_SECURITY_SELINUX=yCONFIG_SECURITY_SMACK=yCONFIG_CRYPTO_GCM=yCONFIG_CRYPTO_XCBC=yCONFIG_CRYPTO_TWOFISH=yCONFIG_CRYPTO_ANSI_CPRNG=yCONFIG_CRYPTO_DEV_QCOM_MSM_QCE=yCONFIG_CRYPTO_DEV_QCRYPTO=yCONFIG_CRYPTO_DEV_QCEDEV=yCONFIG_CRYPTO_DEV_QCOM_ICE=yCONFIG_ARM64_CRYPTO=yCONFIG_CRYPTO_SHA1_ARM64_CE=yCONFIG_CRYPTO_SHA2_ARM64_CE=yCONFIG_CRYPTO_GHASH_ARM64_CE=yCONFIG_CRYPTO_AES_ARM64_CE_CCM=yCONFIG_CRYPTO_AES_ARM64_CE_BLK=yCONFIG_CRYPTO_AES_ARM64_NEON_BLK=yCONFIG_STACK_HASH_ORDER_SHIFT=12CONFIG_MACH_XIAOMI=yCONFIG_MACH_XIAOMI_SM8150=yCONFIG_MACH_XIAOMI_RAPHAEL=yCONFIG_BUILD_ARM64_APPENDED_DTB_IMAGE=yCONFIG_IMG_GZ_DTB=yCONFIG_BUILD_ARM64_APPENDED_KERNEL_IMAGE_NAME="Image.gz-dtb"CONFIG_BUILD_ARM64_APPENDED_DTB_IMAGE_NAMES=""CONFIG_RMNET_PERF=yCONFIG_RMNET_SHS=yCONFIG_DRM_MSM_KCAL_CTRL=yCONFIG_EXFAT_FS=yCONFIG_EXFAT_DEFAULT_IOCHARSET="utf8"CONFIG_EXFAT_VIRTUAL_XATTR=yCONFIG_EXFAT_VIRTUAL_XATTR_SELINUX_LABEL="u:object_r:exfat:s0"CONFIG_NAMESPACES=yCONFIG_NET_NS=yCONFIG_PID_NS=yCONFIG_IPC_NS=yCONFIG_UTS_NS=yCONFIG_USER_NS=yCONFIG_CGROUPS=yCONFIG_CGROUP_CPUACCT=yCONFIG_CGROUP_DEVICE=yCONFIG_CGROUP_FREEZER=yCONFIG_CGROUP_SCHED=yCONFIG_CGROUP_PIDS=yCONFIG_CPUSETS=yCONFIG_MEMCG=yCONFIG_MEMCG_SWAP=yCONFIG_MEMCG_SWAP_ENABLED=yCONFIG_IP_VS=yCONFIG_IP_VS_NFCT=yCONFIG_IP_VS_PROTO_TCP=yCONFIG_IP_VS_PROTO_UDP=yCONFIG_IP_VS_PROTO_RR=yCONFIG_BLK_DEV_THROTTLING=yCONFIG_CGROUP_PERF=yCONFIG_CGROUP_HUGETLB=yCONFIG_NET_CLS_CGROUP=yCONFIG_CGROUP_NET_PRIO=yCONFIG_CFS_BANDWIDTH=yCONFIG_RT_GROUP_SCHED=yCONFIG_SECURITY_APPARMOR=yCONFIG_VXLAN=yCONFIG_BRIDGE_VLAN_FILTERING=yCONFIG_IPVLAN=yCONFIG_MACVLAN=yCONFIG_AUFS_FS=yCONFIG_BTRFS_FS=yCONFIG_BTRFS_FS_POSIX_ACL=yCONFIG_DM_THIN_PROVISIONING=yCONFIG_KEYS=yCONFIG_VETH=yCONFIG_BRIDGE=yCONFIG_BRIDGE_NETFILTER=yCONFIG_IP_NF_FILTER=yCONFIG_IP_NF_TARGET_MASQUERADE=yCONFIG_NETFILTER_XT_MATCH_ADDRTYPE=yCONFIG_NETFILTER_XT_MATCH_CONNTRACK=yCONFIG_NETFILTER_XT_MATCH_IPVS=yCONFIG_NETFILTER_XT_MARK=yCONFIG_IP_NF_NAT=yCONFIG_NF_NAT=yCONFIG_POSIX_MQUEUE=yCONFIG_DEVPTS_MULTIPLE_INSTANCES=yCONFIG_NF_NAT_IPV4=yCONFIG_NF_NAT_NEEDED=yCONFIG_OVERLAY_FS=yCONFIG_NETFILTER_ADVANCED=y
Final
最后感谢Laulan56大佬给我们提供的内核源码、还有其他大佬提供的各种教程和工具~