全志H313/H616编译实战:从源码到烧录,手把手教你生成定制固件
全志H313/H616深度编译指南从内核定制到系统烧录的全链路实战当一块搭载全志H313或H616芯片的开发板放在你面前时最令人兴奋的莫过于为它打造一个完全定制的Android系统。不同于树莓派等现成平台全志芯片在工控、智能硬件等领域的广泛应用使得系统级定制成为刚需。本文将带你深入全志SDK的每一个关键环节从内核配置到固件打包最终生成专属于你硬件的h313_android10_p1_uart0.img镜像文件。1. 环境准备与源码架构解析全志的Longan SDK采用独特的龙眼架构其目录结构隐藏着许多设计智慧。在开始编译前建议先了解几个核心目录longan/ ├── kernel/ # Linux内核源码版本4.9/5.4 ├── out/ # 编译输出目录 ├── tools/ # 打包和烧录工具 └── build.sh # 主控编译脚本 android/ ├── build/ # Android构建系统 ├── device/ # 设备特定配置 └── vendor/ # 厂商定制内容提示建议使用Ubuntu 18.04/20.04 LTS系统并确保磁盘空间≥100GB。全志SDK对文件系统大小写敏感最好在ext4分区操作。安装基础依赖包sudo apt update sudo apt 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 python python3 perl gawk2. 内核配置的艺术从defconfig到menuconfig全志H313/H616的内核配置采用分层设计机制。执行初始配置时系统会自动基于预置的defconfig文件生成.config./build.sh config在交互菜单中选择Platform:androidIC:h313或h616Board: 根据实际板型选择如p1此时生成的.config位于kernel/linux-4.9/目录。要进入深度定制需启动经典的内核配置界面cd kernel/linux-4.9 make menuconfig几个关键配置区域值得特别关注配置项H313推荐设置H616推荐设置说明CPU频率调节interactiveondemand平衡功耗与性能GPU驱动Mali-400Mali-G31图形加速核心不同串口调试启用UART0启用UART3不同芯片调试口温度传感器需手动添加默认启用工控场景重要对于需要添加第三方驱动的场景比如某款特殊的触摸屏IC可以通过以下方式集成将驱动源码放入drivers/input/touchscreen/目录修改同级目录的Kconfigconfig TOUCHSCREEN_NEW_IC tristate New Touch IC Support depends on I2C help Say Y here to enable support for New Touch IC修改Makefileobj-$(CONFIG_TOUCHSCREEN_NEW_IC) new_ic.o3. Android系统级定制从lunch选项到模块裁剪完成内核配置后进入Android构建阶段。全志的Android系统采用设备树覆盖DTO机制使得硬件适配更加灵活。关键的lunch选项决定了最终系统的特性source build/envsetup.sh lunch eros_p1-userdebug不同选项的深层差异userdebug保留root权限和调试工具适合开发阶段eng包含所有调试模块性能较低user生产环境版本去除了所有调试信息精简系统体积的实用技巧移除预装应用rm -rf vendor/allwinner/p1/preinstall/禁用不必要的服务 修改device/softwinner/p1/p1.mk删除不需要的PRODUCT_PACKAGES项优化APEX模块echo override_apex : true build/make/core/main.mk4. 固件打包的奥秘pack与pack4dist深度解析全志的固件打包过程暗藏玄机。执行make -j16完成编译后两个关键命令将决定最终镜像的形态pack # 生成基础固件 pack4dist # 生成带完整分区表的发布固件打包过程中的关键文件流boot.img生成整合内核zImage和设备树system.img构建使用make_ext4fs处理分区表配置sys_partition.fex定义各分区布局镜像签名使用dragonimage工具进行校验通过修改tools/pack/chips/sun50iw9p1/configs/p1/sys_partition.fex可以自定义分区方案。例如增加一个专门存储日志的分区[partition] name logstore size 64 downloadfile user_type 0x80005. 烧录验证与性能调优生成的h313_android10_p1_uart0.img可以通过PhoenixSuit或LiveSuit工具烧录。但专业开发者更推荐使用命令行工具sunxi-fel进行底层操作sunxi-fel ver # 验证设备连接 sunxi-fel spl u-boot-sunxi-with-spl.bin # 加载引导程序 sunxi-fel write 0x40000000 zImage # 写入内核 sunxi-fel write 0x43000000 dtb # 写入设备树 sunxi-fel exec 0x40000000 # 启动内核烧录后常见的启动问题排查卡在uboot阶段检查boot.img中的设备树是否匹配实际硬件触屏无响应确认内核配置中对应的I2C接口已正确启用WiFi模块异常检查/system/etc/firmware/下的固件文件性能调优的几个关键参数# GPU内存分配单位MB echo 256 /sys/module/mali/parameters/mali_mem # CPU调度策略 echo performance /sys/devices/system/cpu/cpu0/cpufreq/scaling_governor # IO调度器优化 echo deadline /sys/block/mmcblk0/queue/scheduler通过串口调试终端默认波特率115200可以观察到完整的启动日志。建议在init.rc中添加以下调试命令# 记录启动时间节点 logcat -v time -f /data/boot.log dmesg | tee /data/kernel.log当看到熟悉的Android开机动画且所有外设正常工作意味着你已成功打造了一个完全定制的全志系统。这种深度控制能力正是选择全志H313/H616进行硬件开发的核心价值所在。