【问题描述】:
在编译32go项目时,内核阶段提示”32bit Kernels unsupported by MPGen“错误
【问题分析】:
初步分为为32go内核相关dts配置异常,因为自己定制了内核dts部分,32位系统下(arch/arm/boot/dts/qcom)下相关的Makefile需要同步修改
【解决方案】:
修改arch/arm/boot/dts/qcom目录下的Makefile,以及arch/arm/boot/dts/qcom子目录下的Makefile,让其链接arch/arm64/boot/dts/qcom下的dts内容来构建
kernel/msm-4.19/arch/arm/boot/dts/Makefile内容:
# SPDX-License-Identifier: GPL-2.0
include $(srctree)/arch/arm64/boot/dts/Makefile
kernel/msm-4.19/arch/arm/boot/dts/qcom/Makefile内容:
# SPDX-License-Identifier: GPL-2.0-only
include $(srctree)/arch/arm64/boot/dts/qcom/Makefile
kernel/msm-4.19/arch/arm/boot/dts/qcom/xxx/Makefile内容:
# SPDX-License-Identifier: GPL-2.0-only
include $(srctree)/arch/arm64/boot/dts/qcom/xxx/Makefile
$(obj)/%.dtb: $(src)/../../../../../arm64/boot/dts/qcom/xxx/%.dts FORCE
$(call if_changed_dep,dtc)
ifeq ($(CONFIG_BUILD_ARM64_DT_OVERLAY),y)
$(obj)/%.dtbo:$(src)/../../../../../arm64/boot/dts/qcom/xxx/%.dts FORCE
$(call if_changed_dep,dtc)
$(call if_changed,dtbo_verify)
dtbs: $(addprefix $(obj)/,$(dtb-y)) $(addprefix $(obj)/,$(dtbo-y))
else
dtbs: $(addprefix $(obj)/,$(dtb-y))
endif
clean-files := *.dtb
【问题2】:编译user版本报错”32bit Kernels unsupported by MPGen“
错误信息如下:
WARNING: EXPORT symbol "gsi_write_channel_scratch" [vmlinux] version generation failed, symbol will not be versioned.
Traceback (most recent call last):
File "/fwork1/jenkins/workspace/sc126_a12/LA.UM.9.15.2/vendor/qcom/proprietary/qrsp/mpgen/mpgen.py", line 172, in <module>
main()
File "/fwork1/jenkins/workspace/sc126_a12/LA.UM.9.15.2/vendor/qcom/proprietary/qrsp/mpgen/mpgen.py", line 99, in main
kernel.get_kernel(vmlinux)
File "/fwork1/jenkins/workspace/sc126_a12/LA.UM.9.15.2/vendor/qcom/proprietary/qrsp/mpgen/mpgen_kernel.py", line 131, in get_kernel
raise UnsupportedKernelArch("32bit Kernels unsupported by MPGen")
UnsupportedKernelArch: 32bit Kernels unsupported by MPGen
FATAL ERROR: 32bit Kernels unsupported by MPGen
确认是”32bit Kernels unsupported by MPGen“接口中__packed导致,__packed参数具体的修饰左右请自查,这个就是用来告诉编译器用来数据对齐的,最终确认userdebug和user版本的差异在于,debug配置了gcc的优化size的配置CONFIG_CC_OPTIMIZE_FOR_SIZE,在user版本的defconfig配置该功能后问题解决。