全志A40i Android 7.1固件编译避坑指南:从U-boot到打包的完整实战(附报错解决方案)

张开发
2026/5/18 13:37:24 15 分钟阅读
全志A40i Android 7.1固件编译避坑指南:从U-boot到打包的完整实战(附报错解决方案)
全志A40i Android 7.1固件编译实战高频报错诊断与深度修复手册当你在Ubuntu终端里第三次看到Makefile:1218: *** missing separator. Stop.的红色报错时那种熟悉的挫败感又涌上心头。全志A40i的Android 7.1系统编译就像在雷区行走每个步骤都可能触发意想不到的错误。本文不是又一份流程复述而是从27次真实编译失败中提炼出的生存指南专治各种明明按照教程却报错的疑难杂症。1. 编译环境搭建的隐形陷阱Ubuntu 16.04的镜像刚下载完很多开发者就急着安装编译工具链却不知道这个版本的选择本身就是第一个坑。官方推荐Ubuntu 16.04不假但新装系统缺少的依赖项会让后续编译过程频繁崩溃。必须安装但常被忽略的依赖项sudo apt-get install -y git-core gnupg flex bison gperf build-essential \ zip curl zlib1g-dev gcc-multilib g-multilib libc6-dev-i386 \ lib32ncurses5-dev x11proto-core-dev libx11-dev lib32z-dev ccache \ libgl1-mesa-dev libxml2-utils xsltproc unzip u-boot-tools提示使用阿里云镜像源可以避免下载中断执行sudo sed -i s/archive.ubuntu.com/mirrors.aliyun.com/g /etc/apt/sources.list后再安装硬盘空间是另一个暗坑。Android 7.1源码完整编译需要至少150GB的剩余空间源码30GB编译输出120GB推荐使用ext4文件系统NTFS可能导致符号链接异常交换分区建议8GB以上避免内存不足导致编译中断2. U-boot编译的典型报错解剖进入lichee/brandy目录执行编译时90%的开发者会遇到Makefile分隔符错误。这个看似简单的报错背后其实是Windows和Linux换行符的世纪战争。问题现象Makefile:1218: *** missing separator. Stop.根治方案不只是修改Makefile# 使用dos2unix彻底转换所有文件格式 find . -type f -name * -exec dos2unix {} \; # 然后修改Makefile第1218行 sed -i 1218s/--R/-R/ u-boot-2014.07/Makefile更隐蔽的问题是工具链路径错误症状是报arm-linux-gnueabi-gcc: not found。这通常是因为工具链未正确解压到lichee/brandy/toolchain目录环境变量未生效需要执行export PATH$PATH:$(pwd)/toolchain/gcc-linaro/bin3. Kernel编译的权限迷宫切换到lichee目录后build.sh脚本拒绝执行是最常见的权限问题但简单地chmod 777可能带来安全隐患。更专业的做法是# 精确控制权限而非全部放开 chmod 755 build.sh find . -name *.sh -exec chmod x {} \; # 特别处理内核配置的缓存文件 sudo sysctl -w fs.inotify.max_user_watches524288当执行./build.sh config选择配置时新手常犯两个致命错误误选androidm而非android导致后续extract-bsp失败忽略board型号选择默认可能不是a40-p1正确的配置序列Choice: 0 # sun8iw11p1 Choice: 0 # android Choice: 0 # linux-3.10 Choice: 0 # a40-p14. Android编译的路径战争进入android目录后的第一个地雷是extract-bsp拷贝失败错误信息显示找不到lichee/out下的bImage文件。这不是简单的路径错误而是平台选择不一致导致的连锁反应。错误示例cp: cannot stat .../lichee/out/sun8iw11p1/androidm/common/bImage: No such file根治方案需要修改两处关键文件修改device/softwinner/common/vendorsetup.sh- LINUXOUT_DIR$LICHEE_DIR/out/sun8iw11p1/androidm/common LINUXOUT_DIR$LICHEE_DIR/out/sun8iw11p1/android/common同步更新device/softwinner/a40-p1/package.sh- platformandroidm platformandroid编译线程数设置是另一个性能陷阱。虽然make -j64能加速编译但建议根据实际CPU核心数调整# 获取实际CPU线程数 CORES$(grep -c ^processor /proc/cpuinfo) make -j$((CORES 1))5. 固件打包的终极验证当看到ERROR: build lichee before you pack时说明打包脚本检测到lichee未编译完成。此时需要确认lichee/out目录存在且包含以下文件sun8iw11p1/android/common/bImagesun8iw11p1/android/common/lib/modules检查环境变量是否污染unset LICHEE_PLATFORM unset LICHEE_BOARD完整重新编译licheecd ../lichee ./build.sh -p sun8iw11p1 -b a40-p1 -m kernel成功打包后生成的固件位置往往被忽略原始固件android/out/target/product/a40-p1/sun8iw11p1_android_a40-p1.img压缩版本android/out/target/product/a40-p1/obj/PACKAGING/target_files_intermediates/*.zip6. 高频报错速查表报错现象根本原因修复命令Makefile分隔符错误Windows换行符污染dos2unix Makefileextract-bsp拷贝失败平台选择不一致修改vendorsetup.shpack报错lichee未编译环境变量冲突unset LICHEE_PLATFORM模块权限不足SELinux策略限制chcon -R -t execmem_exec_t modules/线程崩溃内存不足export JACK_SERVER_VM_ARGUMENTS-Dfile.encodingUTF-8 -XX:TieredCompilation -Xmx4096m7. 性能调优与编译加速开启ccache可以显著提升二次编译速度export USE_CCACHE1 export CCACHE_DIR/path/to/ccache prebuilts/misc/linux-x86/ccache/ccache -M 50G对于SSD用户建议将tmpfs挂载到out目录sudo mount -t tmpfs -o size20G tmpfs android/out内核编译时启用并行编译cd lichee/linux-3.10 make -j$((CORES * 2)) ARCHarm CROSS_COMPILEarm-linux-gnueabi-

更多文章