保姆级教程:在Ubuntu 22.04上为全志D1s/F133 MangoPi-MQ编译Tina Linux(含SDK结构解析)
全志D1s/F133开发板Tina Linux编译实战指南从环境搭建到固件烧录第一次拿到MangoPi-MQ这块小巧的开发板时我对着全志Tina Linux的SDK文档发了半小时呆——lichee目录是干什么的device和package又有什么区别为什么官方教程里的命令在我这里总是报错如果你也有类似的困惑这篇实战指南将带你从零开始用一台干净的Ubuntu 22.04系统完整走通Tina Linux的编译全流程。不同于简单的命令罗列我会重点解释每个关键步骤背后的逻辑比如如何理解SDK的模块化设计为什么需要打特定补丁以及编译失败时的排查思路。1. 环境准备与SDK结构解析在开始编译之前我们需要先理解Tina Linux SDK的基本架构。这个基于OpenWRT的嵌入式系统采用了分层的模块化设计对于刚接触全志平台的开发者来说掌握这些目录的职责至关重要tina-d1-open/ ├── build # 构建系统的核心脚本和规则 ├── device # 板级配置内核参数/分区表/设备树 ├── lichee # 引导加载程序与内核源码 ├── package # 软件包管理系统 ├── target # 目标板文件系统模板 └── tools # 主机工具链关键目录深度解读lichee/brandy-2.0包含全志特有的bootloader实现其中的u-boot-2018目录存放着二次开发的U-Bootdevice/config/chips/d1存放着针对D1s/F133芯片的硬件抽象层配置package/allwinner目录下的每个子目录都代表一个可选的系统组件提示建议在解压SDK后先执行find . -name Config.in命令这些配置文件构成了Tina的模块化选择体系对于Ubuntu 22.04的环境配置除了官方文档列出的基础包外还需要特别注意sudo apt-get install -y \ python2.7 \ # 部分脚本仍依赖Python2 libssl1.1 \ # 兼容旧版加密库 gcc-riscv64-unknown-elf # RISC-V交叉编译器2. 开发板适配补丁实战MangoPi-MQ作为社区开发板其支持代码并未直接包含在官方SDK中。我们需要应用社区维护的补丁包这个过程涉及多个关键文件的修改显示配置调整 补丁会修改lichee/brandy-2.0/u-boot-2018/.config文件启用特定的LCD面板支持CONFIG_LCD_SUPPORT_LQ101R1SX03y CONFIG_LCD_SUPPORT_INET_DSI_PANELy设备树覆盖机制 补丁在device/config/chips/d1/configs/下新增了mangopi_mq的配置目录其中sys_config.fex定义引脚复用和硬件参数board.dts覆盖默认的设备树配置linux-5.4/包含内核级的板级支持午餐菜单集成 补丁通过vendorsetup.sh添加了新的编译选项add_lunch_combo d1_mangopi_mq_rgb800x480_gt9xx-tina实际操作中解压补丁后需要检查以下关键点确认补丁中的文件路径与SDK版本匹配比较补丁前后的device/config/chips/d1/configs/差异验证target/allwinner/下的文件系统覆盖是否完整3. 编译系统深度配置执行source build/envsetup.sh后Tina会初始化构建环境这个脚本主要完成设置交叉编译工具链路径注册lunch、make等快捷命令加载产品配置元数据当运行lunch选择d1_mangopi_mq_rgb800x480_gt9xx-tina时系统会生成如下环境变量变量名示例值作用说明TINA_BUILD_TOP/home/user/tina-d1-openSDK根目录TARGET_PRODUCTd1_mangopi_mq_rgb800x480_gt9xx目标产品标识TARGET_PLATFORMd1芯片平台TARGET_UBOOTu-boot-2018引导加载程序版本编译过程控制make -j16启动16线程并行编译make Vs显示详细编译日志调试时特别有用make menuconfig交互式配置内核和软件包常见问题处理遇到Python2语法错误尝试export LEGACY_PYTHONpython2.7缺少头文件检查prebuilt/gcc/linux-x86/riscv/toolchain-thead-glibc是否存在许可证校验失败在dl/目录手动放置缺失的源码包4. 固件打包与烧录技巧当编译完成后pack命令会执行以下操作将u-boot、内核镜像、设备树打包成boot.img将rootfs制作为squashfs镜像生成完整的tina_d1-mangopi_mq_uart0.img烧录工具推荐使用全志官方的PhoenixSuit注意开发板必须进入FEL模式按住FLASH键上电镜像路径不要包含中文遇到校验失败时尝试降低传输速度高级调试技巧修改device/config/chips/d1/configs/mangopi_mq_rgb800x480_gt9xx/下的文件后需要重新执行make pack通过sunxi-fel工具可以直接与bootROM交互sunxi-fel ver # 验证连接 sunxi-fel spl u-boot-sun20iw1p1.bin # 加载自定义引导程序5. 显示异常问题排查实录在实际使用中我遇到了上电后屏幕变暗的问题。通过分析内核日志和设备树发现是PD17引脚冲突导致的原始设备树配置dmic_pins_a: dmic0 { pins PD17; // 与LCD数据线冲突 function dmic; };解决方法是在board.dts中禁用DMICdmic { status disabled; };这个案例揭示了全志平台硬件配置的关键点引脚复用优先级由sys_config.fex决定设备树描述实际硬件连接驱动状态通过status属性控制经过重新编译后屏幕显示正常系统运行稳定。整个过程让我深刻体会到嵌入式开发不仅需要知道如何执行命令更要理解每个配置背后的硬件关联。