保姆级教程:手把手教你用Allwinner Tina Linux的打包工具链生成固件镜像
全志Tina Linux固件打包实战从零构建可烧录镜像第一次拿到全志开发板时看着官方文档里密密麻麻的工具链列表我对着屏幕发呆了半小时——update_mbr、dragonsecboot、dragon这些工具究竟该怎么串联起来为什么每次修改分区表后生成的固件总是启动失败如果你也有类似的困惑这篇实战指南将带你拆解全志Tina Linux的固件打包黑箱。不同于简单的工具罗列我们将以Sinlinx V3s开发板为例用真实的操作演示如何将编译好的bootloader、内核和根文件系统组装成可烧录的.img文件。1. 环境准备与基础概念在开始操作前我们需要明确几个关键概念。全志的固件打包不是简单的文件拼接而是涉及多级引导、安全校验和分区管理的系统工程。典型的Tina Linux固件包含以下核心组件Boot0芯片上电后首先运行的初级引导程序初始化DRAM等关键硬件U-Boot二级引导程序负责加载内核和设备树Linux内核带全志定制补丁的主线内核根文件系统包含Tina Linux定制环境的squashfs或ext4镜像开发环境建议使用Ubuntu 20.04 LTS并确保已安装以下基础工具sudo apt-get install build-essential libncurses5-dev u-boot-tools device-tree-compiler全志的打包工具链通常随SDK一起发布位于tina/out/host/bin目录。将这些工具加入PATH环境变量能显著提升操作效率export PATH$PATH:$(pwd)/tina/out/host/bin2. 分区配置固件的骨架设计sys_partition.fex是全志平台特有的分区表配置文件它定义了固件中每个区域的起始位置、大小和属性。以下是一个支持双系统启动的配置示例[partition] name bootloader size 4096 downloadfile boot0_sdcard.fex keydata 1 [partition] name env size 512 [partition] name boot size 32768 downloadfile u-boot.fex [partition] name rootfs size 1048576 downloadfile rootfs.squashfs注意全志芯片的NAND和SD卡分区配置差异较大NAND需要额外考虑坏块管理和ECC设置使用update_mbr工具将文本格式的分区表转换为二进制update_mbr sys_partition.fex 4这条命令会生成三个关键文件sunxi_mbr.fex主引导记录sunxi_gpt.fexGPT分区表仅用于eMMCdlinfo.fex文件下载索引表3. 引导程序定制与安全启动全志芯片的引导链设计颇具特色以V3s为例的启动流程为BootROM → Boot0 → U-Boot。每个阶段都需要针对具体硬件进行调整3.1 Boot0配置修改sys_config.fex中的DRAM参数后使用以下命令更新Boot0镜像update_boot0 boot0_sdcard.fex sys_config.bin SDMMC_CARD关键参数说明参数作用典型值dram_paraDRAM时序配置需根据板载内存颗粒调整uart_port调试串口3对应UART2jtag_modeJTAG调试使能0禁用3.2 U-Boot定制更新U-Boot头部信息并合并系统配置update_uboot -no_merge u-boot.fex sys_config.bin如果需要安全启动还需要使用dragonsecboot生成TOC0/TOC1安全证书dragonsecboot -toc0 dragon_toc.cfg keys version_base.mk dragonsecboot -pack boot_package.cfg4. 镜像组装从碎片到完整固件全志提供两种打包方式适用于不同存储介质4.1 小容量NOR Flash打包对于16MB以下的SPI NOR Flash使用merge_full_img生成线性镜像merge_full_img --out full_img.fex \ --boot0 boot0_spinor.fex \ --boot1 uboot.fex \ --mbr sunxi_mbr.fex \ --partition sys_partition.bin \ --logic_start 2564.2 大容量存储打包对于SD卡或NAND使用dragon工具进行分区式打包dragon image.cfg sys_partition.fex其中image.cfg定义了各组件的位置关系[FILE] filename boot0_sdcard.fex maintype ITEM_BOOT0 [FILE] filename u-boot.fex maintype ITEM_UBOOT [FILE] filename sunxi_mbr.fex maintype ITEM_MBR5. 常见问题排查指南遇到固件无法启动时可按以下步骤排查检查Boot0日志连接串口观察是否输出HELLO! BOOT0字样验证DRAM配置错误的dram_para会导致Boot0后系统挂死分区对齐检查确保每个分区的起始和结束地址按4K对齐文件完整性验证使用md5sum比对原始文件和打包后的内容一个典型的调试过程可能是这样的# 提取固件中的U-Boot段 dd ifoutput.img ofuboot_actual.bin skip32768 bs512 count64 md5sum uboot_actual.bin original/u-boot.fex # 对比分区表 script sys_partition.fex cmp sunxi_mbr.fex output.img记得第一次成功打包出能启动的固件时我在实验室喊出声的场景。全志的工具链确实需要些耐心去理解但一旦掌握你会发现它的设计其实非常精妙——每个工具都像乐高积木能组合出各种灵活的解决方案。下次当你看到那个橙色的全志logo亮起时或许会有不一样的成就感。