news 2026/4/24 16:03:15

全志H313/H616编译实战:从源码到烧录,手把手教你生成定制固件

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
全志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 gawk

2. 内核配置的艺术:从defconfig到menuconfig

全志H313/H616的内核配置采用分层设计机制。执行初始配置时,系统会自动基于预置的defconfig文件生成.config

./build.sh config

在交互菜单中选择:

  • Platform:android
  • IC:h313h616
  • Board: 根据实际板型选择(如p1

此时生成的.config位于kernel/linux-4.9/目录。要进入深度定制,需启动经典的内核配置界面:

cd kernel/linux-4.9 make menuconfig

几个关键配置区域值得特别关注:

配置项H313推荐设置H616推荐设置说明
CPU频率调节interactiveondemand平衡功耗与性能
GPU驱动Mali-400Mali-G31图形加速核心不同
串口调试启用UART0启用UART3不同芯片调试口
温度传感器需手动添加默认启用工控场景重要

对于需要添加第三方驱动的场景,比如某款特殊的触摸屏IC,可以通过以下方式集成:

  1. 将驱动源码放入drivers/input/touchscreen/目录
  2. 修改同级目录的Kconfig
    config TOUCHSCREEN_NEW_IC tristate "New Touch IC Support" depends on I2C help Say Y here to enable support for New Touch IC
  3. 修改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:生产环境版本,去除了所有调试信息

精简系统体积的实用技巧:

  1. 移除预装应用:
    rm -rf vendor/allwinner/p1/preinstall/
  2. 禁用不必要的服务: 修改device/softwinner/p1/p1.mk,删除不需要的PRODUCT_PACKAGES项
  3. 优化APEX模块:
    echo "override_apex := true" >> build/make/core/main.mk

4. 固件打包的奥秘:pack与pack4dist深度解析

全志的固件打包过程暗藏玄机。执行make -j16完成编译后,两个关键命令将决定最终镜像的形态:

pack # 生成基础固件 pack4dist # 生成带完整分区表的发布固件

打包过程中的关键文件流:

  1. boot.img生成:整合内核zImage和设备树
  2. system.img构建:使用make_ext4fs处理
  3. 分区表配置:sys_partition.fex定义各分区布局
  4. 镜像签名:使用dragonimage工具进行校验

通过修改tools/pack/chips/sun50iw9p1/configs/p1/sys_partition.fex,可以自定义分区方案。例如增加一个专门存储日志的分区:

[partition] name = logstore size = 64 downloadfile = "" user_type = 0x8000

5. 烧录验证与性能调优

生成的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 # 启动内核

烧录后常见的启动问题排查:

  1. 卡在uboot阶段:检查boot.img中的设备树是否匹配实际硬件
  2. 触屏无响应:确认内核配置中对应的I2C接口已正确启用
  3. 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进行硬件开发的核心价值所在。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/24 15:55:23

【超全步骤】2026年Hermes Agent/OpenClaw阿里云7分钟简易集成指南

【超全步骤】2026年Hermes Agent/OpenClaw阿里云7分钟简易集成指南。OpenClaw(前身为Clawdbot/Moltbot)作为开源、本地优先的AI助理框架,凭借724小时在线响应、多任务自动化执行、跨平台协同等核心能力,成为个人办公与轻量团队协作…

作者头像 李华
网站建设 2026/4/24 15:52:17

从人脸识别到垃圾邮件过滤:PCA和LDA在实际项目里到底怎么选?

从人脸识别到垃圾邮件过滤:PCA和LDA在实际项目里到底怎么选? 当技术团队面临高维数据处理需求时,降维技术往往成为破局关键。主成分分析(PCA)和线性判别分析(LDA)作为两种经典算法,在…

作者头像 李华