全志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:
android - IC:
h313或h616 - Board: 根据实际板型选择(如
p1)
此时生成的.config位于kernel/linux-4.9/目录。要进入深度定制,需启动经典的内核配置界面:
cd kernel/linux-4.9 make menuconfig几个关键配置区域值得特别关注:
| 配置项 | H313推荐设置 | H616推荐设置 | 说明 |
|---|---|---|---|
| CPU频率调节 | interactive | ondemand | 平衡功耗与性能 |
| GPU驱动 | Mali-400 | Mali-G31 | 图形加速核心不同 |
| 串口调试 | 启用UART0 | 启用UART3 | 不同芯片调试口 |
| 温度传感器 | 需手动添加 | 默认启用 | 工控场景重要 |
对于需要添加第三方驱动的场景,比如某款特殊的触摸屏IC,可以通过以下方式集成:
- 将驱动源码放入
drivers/input/touchscreen/目录 - 修改同级目录的
Kconfig:config TOUCHSCREEN_NEW_IC tristate "New Touch IC Support" depends on I2C help Say Y here to enable support for New Touch IC - 修改
Makefile:obj-$(CONFIG_TOUCHSCREEN_NEW_IC) += new_ic.o
3. 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.mk
4. 固件打包的奥秘: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进行硬件开发的核心价值所在。