我在用gcc编译时出现的错误如下,用ai解决这些问题之后,编译居然成功了
但是给我的米板4刷进去之后并不能开机……
二编:我换了个内核进行编译,还想集成kernelsu,可是一直都不成功,气得我鬼火冒
NR_CPUS配置错误
可能出现的报错:
1 | include/trace/events/sched.h:875:2: error: #error "Unsupported NR_CPUS for lb tracepoint." |
解决方法:
1 | # 编辑内核配置 |
或者编辑内核配置文件
1 | # 编辑.config文件 |
函数cpuid_feature_extract_field
参数不匹配
可能出现的报错:
1 | ./arch/arm64/include/asm/kvm_mmu.h:309:17: error: too few arguments to function 'cpuid_feature_extract_field' |
解决方法:
编辑文件./arch/arm64/include/asm/kvm_mmu.h
,找到第309行附近的代码:
1 | return (cpuid_feature_extract_field(reg, ID_AA64MMFR1_VMIDBITS_SHIFT) == 2) ? 16 : 8; |
修改为:
1 | return (cpuid_feature_extract_field(reg, ID_AA64MMFR1_VMIDBITS_SHIFT, 0) == 2) ? 16 : 8;\ |
注意:第三个参数的具体值需要根据cpuid_feature_extract_field
函数的定义来确定,可能需要查看相关头文件
devfreq_simple_ondemand_data
结构体类型不完整
可能出现的报错:
1 | include/linux/mmc/host.h:331:54: error: field 'ondemand_gov_data' has incomplete type |
解决方法:
1 | # 编辑内核配置 |
或者编辑内核配置文件
1 | # 启用相关配置 |
变量phdr重复声明
可能出现的报错:
1 | drivers/soc/qcom/smem.c: In function 'qcom_smem_alloc_private': |
解决方法:
1 | # 编辑文件 drivers/soc/qcom/smem.c |
或者用sed命令修复
1 | # 删除第305行的重复声明 |
DTC链接错误
可能出现的报错:
1 | /usr/bin/ld: scripts/dtc/dtc-parser.tab.o:(.bss+0x10): multiple definition of `yylloc'; scripts/dtc/dtc-lexer.lex.o:(.bss+0x0): first defined here |
解决方式:
在内核源码根目录中找到Makefile
文件
然后搜索找到HOSTCFLAGS
项,添加HOSTCFLAGS += -fcommon
重新运行./build.sh
编译VDSO时出现的汇编语法错误
可能出现的报错:
1 | ../arch/arm64/kernel/vdso/gettimeofday.S:223:24: error: too many positional arguments |
解决方式:
找到/arch/arm64/kernel/vdso/gettimeofday.S
文件
然后修改此文件中第223、246和267行的宏调用方式:
1 | # 原代码 |
然后重新运行./build.sh
ld无法辨认aarch64linux仿真模式
可能出现的报错:
1 | /usr/bin/ld: 无法辨认的仿真模式: aarch64linux |
解决方式:
移除/bin/ld
以确保使用的是/bin/ld.lld