news 2026/5/1 11:41:16

全志H313/H616双平台编译实录:一次搞懂Linux与Android内核构建差异

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
全志H313/H616双平台编译实录:一次搞懂Linux与Android内核构建差异

全志H313/H616双平台编译实战:从内核配置到镜像生成的深度解析

在嵌入式开发领域,全志科技的H313和H616处理器凭借其出色的性价比和丰富的接口资源,成为智能家居、工业控制和多媒体设备的首选方案。对于需要在不同硬件平台间切换的开发者而言,掌握Linux与Android系统的编译差异不仅能提升开发效率,更能深入理解底层构建逻辑。本文将带您从配置选项开始,逐步剖析两个平台在编译流程中的关键差异点。

1. 开发环境准备与SDK结构解析

全志官方提供的Amediatech_AW_GIT_V1.11 SDK采用分层设计,主要包含longan(Linux基础系统)和android(Android定制层)两大目录。这种结构设计使得开发者可以灵活选择构建纯Linux系统或完整的Android镜像。

SDK关键目录结构说明

Amediatech_AW_GIT_V1.11/ ├── longan/ # Linux基础系统构建目录 │ ├── kernel/ # 内核源代码(Linux 4.9) │ ├── out/ # 编译输出目录 │ └── build.sh # 主构建脚本 └── android/ # Android构建层 ├── build/ # Android构建系统 └── device/ # 设备特定配置

在开始编译前,需要特别注意环境依赖的安装。H313和H616虽然同属Cortex-A53架构,但所需的工具链略有差异:

# 安装基础编译工具 sudo apt-get install 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

提示:建议使用Ubuntu 18.04 LTS作为编译主机系统,避免因glibc版本问题导致兼容性错误。

2. Linux系统构建流程深度剖析

2.1 平台配置与内核定制

执行./build.sh config时,系统会引导开发者完成三个关键选择:

  1. 平台类型:linux或android
  2. 芯片型号:h313或h616
  3. 开发板型号:p1/p2等具体硬件配置

以H616平台为例,配置过程会生成特定的defconfig文件:

$ ./build.sh config Welcome to mkscript setup progress All available platform: 0. android 1. linux Choice [android]: 1 # 选择linux平台 All available ic: 0. h313 1. h616 Choice [h313]: 1 # 选择H616芯片 All available board: 0. p1 1. p2 Choice [p1]: 0 # 选择p1开发板

配置完成后,系统会自动从arch/arm64/configs/目录下复制对应的defconfig文件:

  • H313 Linux:sun50iw9p1smp_h313_linux_defconfig
  • H616 Linux:sun50iw9p1smp_h616_linux_defconfig

2.2 内核编译与产物分析

执行./build.sh启动编译后,脚本会依次完成以下关键步骤:

  1. dtbo生成:根据设备树源文件(.dts)编译生成设备树叠加层二进制
  2. 内核镜像构建:编译zImage和内核模块
  3. rootfs打包:生成initramfs或从指定位置挂载根文件系统

编译完成后,关键产物位于out/[chip]/[board]/linux/目录下:

out/h616/p1/linux/ ├── boot.img # 引导镜像 ├── dtbo.img # 设备树叠加层 └── kernel/ # 内核模块

H313与H616在Linux编译中的主要差异

特性H313H616
默认CPU频率1.2GHz1.5GHz
GPU驱动Mali-400 MP2Mali-G31 MP2
视频解码支持H.264 1080p@60fpsH.265 4K@30fps
内存控制器DDR3/LPDDR3DDR4/LPDDR4

3. Android系统构建全流程详解

3.1 环境初始化与产品选择

Android构建流程始于环境变量的设置和产品配置的选择:

$ cd ../android $ source build/envsetup.sh $ lunch You're building on Linux Lunch menu... pick a combo: 1. eros_p1-userdebug # H313开发板 2. eros_p2-userdebug # H616开发板 3. eros_p1-eng 4. eros_p2-eng Which would you like? [1] 2

选择不同的产品配置会直接影响以下方面:

  • 内核defconfig的自动选择
  • 系统服务的启用/禁用
  • 预装应用的组合
  • 调试权限的级别

3.2 多阶段编译与镜像打包

完整的Android构建包含四个关键阶段:

  1. BSP提取extract-bsp将longan目录编译的内核和模块集成到Android系统
  2. 全系统编译make -j16启动多线程编译
  3. 镜像打包pack命令生成可烧录的固件
  4. 分发准备pack4dist创建包含所有必要文件的发布包

编译产物路径结构

out/target/product/[board]/ ├── boot.img # 内核+initramfs ├── system.img # Android系统分区 ├── vendor.img # 厂商定制分区 └── obj/PACKAGING/ # 临时打包目录

3.3 平台差异处理技巧

在H313和H616平台间切换时,需要特别注意以下要点:

  • 显示配置:H616的Mali-G31 GPU需要额外的内核补丁才能实现完整OpenGL ES 3.2支持
  • 电源管理:H616采用AXP805 PMIC,需在设备树中正确配置稳压器参数
  • 存储接口:H616支持eMMC 5.1,而H313仅支持eMMC 5.0
# 在BoardConfig.mk中区分平台特性 ifeq ($(TARGET_PRODUCT),eros_p2) # H616特有配置 BOARD_GPU_DRIVERS := panfrost BOARD_USES_HIGH_PERFORMANCE_GPU := true else # H313默认配置 BOARD_GPU_DRIVERS := lima endif

4. 高级调试与性能优化

4.1 编译缓存加速技巧

对于频繁切换平台的开发者,合理使用ccache可以显著提升编译速度:

# 在.bashrc中添加以下配置 export USE_CCACHE=1 export CCACHE_DIR=/path/to/ccache export CCACHE_SIZE=50G # 初始化ccache prebuilts/misc/linux-x86/ccache/ccache -M 50G

实测数据表明,使用ccache后:

  • 内核编译时间从12分钟降至3分钟
  • Android全编译从4小时缩短至1.5小时

4.2 自定义内核模块开发

当需要为特定硬件添加驱动支持时,可以创建外部内核模块:

  1. kernel/linux-4.9/drivers/下新建模块目录
  2. 创建简单的Makefile:
obj-$(CONFIG_CUSTOM_DRIVER) += custom_driver.o custom_driver-objs := main.o helper.o
  1. defconfig中添加:

    CONFIG_CUSTOM_DRIVER=m
  2. 重新编译内核并加载模块:

    insmod /lib/modules/$(uname -r)/extra/custom_driver.ko

4.3 固件烧录与验证

全志平台提供PhoenixSuit和LiveSuit两种烧录工具,但开发者更推荐使用fastboot:

# 进入bootloader模式 adb reboot bootloader # 擦除并烧写各分区 fastboot flash boot boot.img fastboot flash system system.img fastboot flash vendor vendor.img # 重启设备 fastboot reboot

烧录验证要点

  • H616设备需要先解锁bootloader:fastboot oem unlock
  • 首次启动可能较慢(5-10分钟),这是正常现象
  • 通过adb logcat观察启动过程,重点关注SurfaceFlinger和Hal服务

5. 常见问题解决方案

在实际项目开发中,经常会遇到一些平台相关的编译问题。以下是经过验证的解决方案:

问题1:H616内核编译失败,提示"undefined reference to `sunxi_ion_phys_to_phys'"

解决方法: 这是由于ION内存分配器驱动不匹配导致。编辑drivers/staging/android/ion/sunxi/ion_sunxi.c,添加以下函数实现:

phys_addr_t sunxi_ion_phys_to_phys(phys_addr_t phys) { return phys; }

问题2:Android系统启动后触摸屏无响应

排查步骤

  1. 检查内核配置是否启用CONFIG_INPUT_TOUCHSCREEN
  2. 确认设备树中正确配置了I2C触摸控制器节点
  3. 通过getevent -l命令查看原始输入事件

问题3:H313视频播放出现花屏

优化方案

  1. frameworks/av/media/libstagefright/OMXCodec.cpp中增加以下解码器配置:
    // 针对H313的特殊优化 if (strncmp(mComponentName, "OMX.allwinner.video.decoder.avc", 32) == 0) { setMinBufferSize(kPortIndexInput, (size_t)1024 * 1024 * 2); }
  2. 更新libcedarc库到最新版本

性能调优参数对比

参数H313推荐值H616推荐值
vm.dirty_ratio2030
vm.dirty_background_ratio1015
swappiness6040
zram压缩算法lzozstd

在项目实践中,我发现H616平台对内存带宽更为敏感。通过调整DDR频率调度策略,可以获得约15%的图形性能提升:

# 设置DDR频率为最高性能模式 echo performance > /sys/class/devfreq/dram_gov/governor
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/1 11:33:14

3分钟上手!用easy-topo轻松绘制专业网络拓扑图的完整指南

3分钟上手!用easy-topo轻松绘制专业网络拓扑图的完整指南 【免费下载链接】easy-topo vuesvgelement-ui 快捷画出网络拓扑图 项目地址: https://gitcode.com/gh_mirrors/ea/easy-topo 还在为绘制复杂的网络拓扑图而头疼吗?easy-topo网络拓扑图工具…

作者头像 李华
网站建设 2026/5/1 11:26:26

川麻AI出牌助手:基于向听数与安全度评估的实战策略解析

1. 项目概述:一个为川麻玩家设计的AI出牌助手如果你是一位四川麻将(川麻,血战到底)的爱好者,肯定有过这样的纠结时刻:手里捏着一把牌,感觉听牌遥遥无期,或者好不容易听牌了&#xff…

作者头像 李华
网站建设 2026/5/1 11:19:46

GAIA基准:AI助手可靠性评估的新标准

1. GAIA基准:重新定义AI助手的可靠性评估标准在AI助手快速发展的今天,我们面临一个核心问题:如何准确评估这些系统在真实世界复杂任务中的表现?传统基准测试往往聚焦于AI已经擅长的领域(如模式识别、知识检索&#xff…

作者头像 李华
网站建设 2026/5/1 11:18:47

自动化测试新思路:捕获Web应用运行时数据流,构建稳定测试套件

1. 项目概述:一个被误解的“神功”与它的现代价值最近在开源社区里,一个名为mrjessek/shang-tsung的项目引起了不少讨论。乍一看这个标题,很多朋友可能会心一笑,联想到某个经典的格斗游戏角色。没错,这个项目名正是借用…

作者头像 李华