当前位置: 首页 > news >正文

MangoPi-MQ(麻雀)开发板Tina系统编译避坑指南:从补丁到烧录的完整实战

MangoPi-MQ开发板Tina系统编译实战:从环境搭建到屏幕异常排查全解析

第一次拿到MangoPi-MQ这块小巧的开发板时,我完全没预料到后续会经历如此曲折的编译之旅。作为全志D1s/F133平台的入门级开发板,它虽然体积只有信用卡大小,却藏着不少需要特别注意的技术细节。本文将分享我从零开始搭建Tina系统编译环境,到最终解决屏幕显示异常的全过程,其中包含多个官方文档未提及的实用技巧。

1. 开发环境搭建与SDK准备

在开始编译之前,正确的环境配置能避免80%的后续问题。不同于常见的ARM架构开发板,RISC-V架构的MangoPi-MQ需要特定的工具链支持。

1.1 系统环境要求

推荐使用Ubuntu 20.04 LTS作为开发环境,这是经过验证最稳定的基础。以下是必须安装的依赖项:

sudo apt-get update sudo apt-get install -y build-essential subversion git-core libncurses5-dev \ zlib1g-dev gawk flex quilt libssl-dev xsltproc libxml-parser-perl \ mercurial bzr ecj cvs unzip lib32z1 lib32z1-dev lib32stdc++6 libstdc++6

特别注意:对于Ubuntu 18.04及以上版本,还需要额外安装32位兼容库:

sudo apt-get install -y libc6:i386 libstdc++6:i386 lib32ncurses5 lib32z1

1.2 SDK获取与目录结构解析

Tina Linux SDK是全志基于OpenWrt 14.07定制的嵌入式系统,其目录结构包含几个关键部分:

Tina-SDK/ ├── device # 板级配置文件(内核配置、设备树、分区表等) ├── lichee # Bootloader和内核代码 ├── package # 系统软件包源码 ├── target # 目标板特定配置 └── tools # 主机工具链

重要提示:SDK路径中不要包含中文或空格,这会导致后续编译出现难以排查的错误。

2. 补丁应用与配置调整

MangoPi-MQ作为第三方开发板,需要额外补丁才能完全支持。官方提供的补丁包通常包含以下关键修改:

2.1 补丁文件关键修改点

  1. U-Boot配置

    • 修改lichee/brandy-2.0/u-boot-2018/.config中的LCD支持选项
    • 启用正确的显示屏驱动(如800x480或480x272)
  2. 设备树配置

    • 新增device/config/chips/d1/configs/mangopi_mq_*目录
    • 包含特定于开发板的引脚复用和外围设备配置

应用补丁的推荐步骤:

tar -xzvf d1-mangopi_mq_20211216.tgz -C /path/to/sdk

2.2 常见补丁问题解决方案

问题现象可能原因解决方法
补丁应用失败SDK版本不匹配核对补丁对应的SDK提交版本
编译时报错文件权限问题执行chmod -R 755 /path/to/sdk
功能异常补丁不完整检查补丁日志是否有跳过文件

3. 系统编译与定制化配置

正确的编译选项选择是成功的关键。在Tina系统中,lunch命令用于选择目标配置:

source build/envsetup.sh lunch

选择对应的开发板配置(如d1_mangopi_mq_rgb800x480_gt9xx-tina),然后开始编译:

make -j$(nproc) && pack

经验分享:编译过程中可能遇到的两个典型问题:

  1. 并行编译失败

    • 减少并行线程数:make -j4替代make -j$(nproc)
    • 检查内存是否不足(至少需要8GB)
  2. 软件包下载超时

    • 手动下载缺失的软件包到dl/目录
    • 设置代理:export http_proxy=http://your.proxy:port

4. 烧录与硬件调试技巧

完成编译后,生成的固件位于out/d1-mangopi_mq_*/tina_*.img。推荐使用PhoenixCard工具进行烧录:

  1. 将TF卡插入读卡器
  2. 选择固件镜像文件
  3. 烧录模式选择"启动卡"
  4. 点击"烧录"按钮

关键提示:首次烧录后,建议通过串口控制台观察启动日志。MangoPi-MQ的UART0引脚定义:

Pin1: 3.3V Pin2: GND Pin3: UART0_TX Pin4: UART0_RX

使用115200波特率连接,正常启动日志应包含以下关键阶段:

[HELLO! BOOT0 is starting!] [U-Boot 2018.05] [Starting kernel...] [BusyBox v1.27.2]

5. 屏幕显示异常深度排查

在实际使用中,最常遇到的问题就是屏幕显示异常。以"上电后屏幕变暗"为例,分享完整的排查思路:

5.1 现象分析

  • 上电初期显示正常,随后变暗/变蓝
  • 系统功能正常,仅显示输出有问题
  • 串口日志无相关错误信息

5.2 根本原因定位

通过分析设备树文件,发现问题出在引脚复用冲突上:

// 文件:lichee/linux-5.4/arch/riscv/boot/dts/sunxi/sun20iw1p1.dtsi rgb18_pins_a: rgb18@0 { pins = "PD0",...,"PD17",...; // PD17用于LCD数据线 }; dmic_pins_a: dmic@0 { pins = "PE17","PB11","PB10","PD17"; // PD17同时被分配给DMIC };

5.3 解决方案

修改设备树禁用DMIC功能:

// 文件:device/config/chips/d1/configs/mangopi_mq_*/board.dts &dmic { status = "disabled"; };

重新编译内核并打包:

mkernel && pack

特别注意:直接使用mkernel后必须执行pack,否则生成的镜像不完整。这是Tina系统的一个特殊要求。

6. 进阶调试与性能优化

当基本功能正常后,可以考虑进一步优化系统性能。以下是几个实用技巧:

6.1 内存使用分析

cat /proc/meminfo free -m top

6.2 显示参数调整

通过修改sys_config.fex文件可以调整显示参数:

[lcd0_para] lcd_x = 800 lcd_y = 480 lcd_dclk_freq = 33 lcd_pwm_used = 1 lcd_pwm_ch = 0 lcd_pwm_freq = 10000

6.3 开机自启动管理

Tina系统使用OpenWrt风格的init系统,自定义服务需创建:

/etc/init.d/myservice

示例服务脚本:

#!/bin/sh /etc/rc.common START=99 STOP=15 start() { echo "Starting my service" /usr/bin/myapp & } stop() { echo "Stopping my service" killall myapp }

在实际项目中,最耗时的部分往往是设备树的调试。建议每次修改后保留备份,并通过git管理版本变更。当遇到难以解释的硬件行为时,首先检查时钟和电源配置,其次确认引脚复用,最后再考虑驱动兼容性问题。

http://www.jsqmd.com/news/680038/

相关文章:

  • 别再只用AUC了!手把手教你给XGBoost模型添加F1和准确率评估(附完整代码)
  • 别再手动配环境了!用Docker Compose一键部署ELK 7.17.2(附SpringBoot日志接入完整配置)
  • 你的第一个实例分割项目:从Labelme标注到用MMDetection训练(COCO格式实战)
  • Mini PCIe vs M.2接口全对比:看完这篇就知道你的项目该选哪种
  • 告别玄学调试:用Wireshark抓包实战解析PCIe链路训练与有序集(TS1/TS2/EIOS全解)
  • 2026年轴销螺栓供应商梯队盘点:GB31.1/GB32.1/六角头头部带孔螺栓/六角头螺杆带孔螺栓/带孔紧固件/选择指南 - 优质品牌商家
  • 别再乱用事件过滤器了!Qt中让QLineEdit智能失焦的两种正确姿势(附QCompleter处理)
  • 用Python+CAPL玩转CANoe自动化测试:从环境搭建到实战脚本(附GitHub源码)
  • MediaCreationTool.bat终极指南:Windows 10/11全版本部署与硬件限制突破实战
  • Arm Linux身份证读卡器开发实战:从交叉编译到so库生成全流程
  • 不止是参数表:手把手带你玩转飞凌OK3588-C开发板,从开箱到跑通第一个AI Demo
  • 3D地球卫星轨道可视化平台开发 Day14(彻底移除多余阴影)
  • Spring Boot 4.0:云原生 Java 开发的范式革命
  • 避坑指南:CEEMDAN参数(Nstd, NE, MaxIter)怎么调?附MATLAB代码与效果对比
  • 从Kaggle竞赛到业务报表:回归模型评估指标R²、RMSE、MAE的‘场景化生存指南’
  • ESP32 + micro-ROS实战:手把手教你用Action Server做个智能小车遥控器
  • 保姆级教程:手把手教你用Python解析GFS气象数据(附完整变量对照表)
  • 虚幻引擎串口通信插件终极指南:5分钟连接Arduino硬件
  • 用XC7K325T+XDMA实现PC与FPGA高速数据交换:手把手教你玩转驱动自带测试工具
  • Python和LabVIEW搞TCP通信,这3个坑我帮你踩过了(附完整调试流程)
  • 碧蓝航线Alas脚本:告别手动肝船的全自动游戏管家终极指南
  • 如何快速配置暗黑3自动化工具:D3KeyHelper新手完整入门指南
  • 用J-Link Commander和逻辑分析仪,手把手教你调试ARM Cortex-M4的JTAG-DAP接口
  • 【Qwen3-Omni-30B-A3B-Instruct 】部署与多模态安全监测系统
  • 如何快速解决苹果设备Windows连接问题:一键驱动安装终极指南
  • 告别版本地狱:用Anaconda虚拟环境一键搞定TensorFlow-GPU(Python 3.9/3.10实测)
  • 告别纸上谈兵!用Keil uVision5和Proteus 8.9从零搭建51单片机流水灯(附完整资源包)
  • 终极网盘直链下载助手:八大主流平台一键获取真实下载地址
  • JDK26 G1ZGC 双引擎升级:高并发应用吞吐量暴涨 真相
  • 3步获取B站直播推流码:告别官方限制,开启专业直播自由之旅