如何解决Pixel 4 Android内核编译失败的报错问题?
解决Pixel 4 Android内核编译失败问题
问题描述
我尝试为Pixel 4编译Android内核,执行了以下命令:
export ARCH=arm64 export CROSS_COMPILE=/home/xxx/AOSP/prebuilts/gcc/linux-x86/aarch64/aarch64-linux-android-4.9/bin/aarch64-linux-android- make floral_defconfig (not sure) make
编译失败并出现如下报错:
arch/arm64/Makefile:49: LSE atomics not supported by binutils arch/arm64/Makefile:57: Detected assembler with broken .inst; disassembly will be unreliable arch/arm64/Makefile:83: *** CROSS_COMPILE_ARM32 not defined or empty, the compat vDSO will not be built. Stop.
曾尝试执行export CC_FOR_BUILD=clang,但并未解决问题。
解决步骤
1. 修复CROSS_COMPILE_ARM32 not defined错误
这是导致编译终止的核心原因,ARM64内核默认需要构建32位兼容vDSO,必须指定32位交叉编译器:
- 找到AOSP预编译的arm32 GCC路径,通常为
/home/xxx/AOSP/prebuilts/gcc/linux-x86/arm/arm-linux-androideabi-4.9/bin/arm-linux-androideabi- - 执行导出命令:
export CROSS_COMPILE_ARM32=/home/xxx/AOSP/prebuilts/gcc/linux-x86/arm/arm-linux-androideabi-4.9/bin/arm-linux-androideabi-
2. 处理LSE atomics not supported by binutils警告
该警告源于GCC 4.9版本的binutils不支持ARM64 LSE原子指令,可选两种方案:
- 升级编译器:改用AOSP提供的高版本GCC(如7.x)或Clang工具链,新版本原生支持LSE。若使用Clang,需补充环境变量:
export CC=/home/xxx/AOSP/prebuilts/clang/host/linux-x86/clang-14.0.6/bin/clang export LD=/home/xxx/AOSP/prebuilts/clang/host/linux-x86/clang-14.0.6/bin/ld.lld export CROSS_COMPILE=aarch64-linux-gnu- - 禁用LSE支持:执行
make menuconfig,进入Kernel Features菜单,取消勾选Enable LSE atomics,保存配置后重新编译。
3. 处理Detected assembler with broken .inst警告
同样是旧版binutils的问题,解决方式与上述一致:升级编译器版本即可消除警告;若暂时无法升级,可忽略该警告(不影响编译完成,但调试时反汇编结果可能不准确)。
完整编译命令示例
# 设置环境变量 export ARCH=arm64 export CROSS_COMPILE=/home/xxx/AOSP/prebuilts/gcc/linux-x86/aarch64/aarch64-linux-android-4.9/bin/aarch64-linux-android- export CROSS_COMPILE_ARM32=/home/xxx/AOSP/prebuilts/gcc/linux-x86/arm/arm-linux-androideabi-4.9/bin/arm-linux-androideabi- # 加载设备配置 make floral_defconfig # 多线程编译(根据CPU核心数调整-j后的数字,示例为8线程) make -j8
内容的提问来源于stack exchange,提问作者xiaoooooooo
相关产品推荐
相关产品推荐

