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

创龙T113 SDK编译实战:从环境配置到疑难排错

1. 环境准备与依赖安装

第一次接触创龙T113 SDK编译时,我选择了非官方推荐的Ubuntu 20.04系统。这个决定让我踩了不少坑,但也积累了宝贵经验。如果你也在用这个系统版本,建议先准备好20GB以上的磁盘空间,实测编译过程中临时文件会占用大量存储。

依赖安装是第一个关键步骤。官方手册列出的软件包清单往往不够全面,我在实际操作中发现还需要补充几个关键组件:

sudo apt-get install -y build-essential bison flex libncurses5-dev \ u-boot-tools python2.7 git-core g++-multilib texinfo

特别注意Python版本冲突这个经典问题。现代Ubuntu系统默认只安装Python3,但T113 SDK需要Python2.7环境。解决方法很简单:

sudo update-alternatives --install /usr/bin/python python /usr/bin/python2.7 1 sudo update-alternatives --config python

选择python2.7作为默认版本后,建议运行python --version确认切换成功。这个操作会影响系统全局Python环境,如果担心影响其他项目,可以考虑使用virtualenv创建独立环境。

2. SDK解压与初始配置

拿到LinuxSDK-v1.2.tar.gz后,不要直接用图形界面解压。我遇到过因权限问题导致后续编译失败的情况,推荐用命令行操作:

mkdir -p ~/t113_sdk && tar zxvf LinuxSDK-v1.2.tar.gz -C ~/t113_sdk --no-same-owner

进入T113-i_v1.0目录后,先执行./build.sh distclean清理可能存在的临时文件。这个步骤看似简单,但能避免很多因残留文件导致的诡异错误。

配置环节的./build.sh config命令会交互式询问多个参数:

  • 处理器型号选择T113
  • 评估板型号对应tlt113-minievm-nand
  • 显示输出根据实际硬件选择
  • 工具链保持默认即可

3. 编译过程中的典型错误处理

3.1 gdbus编译错误

首次编译大概率会遇到gdbus相关报错:

gdbusauth.c:1302:11: error: '%s' directive argument is null gdbusmessage.c:2702:30: error: '%s' directive argument is null

这个问题源于glib库的版本兼容性问题。临时解决方案是修改报错位置的代码,添加空指针检查:

// 在gdbusauth.c第1302行附近添加 if (some_string == NULL) { some_string = "(null)"; }

同样的逻辑也适用于gdbusmessage.c文件。虽然这不是最优雅的解决方案,但能快速推进编译流程。建议完成编译后向官方反馈此问题。

3.2 awk脚本语法问题

接下来可能会遇到awk脚本报错:

`\#' is not a known regexp operator

这个问题涉及多个.awk文件,包括:

  • mkerrnos.awk
  • mkerrcodes.awk
  • mkerrcodes1.awk
  • mkerrcodes2.awk
  • mkstrtable.awk

解决方法是将所有文件中sub(/\#.+/, "");语句的正则表达式分隔符从\#改为#。可以使用sed命令批量替换:

find . -name "*.awk" -exec sed -i 's/\\#/#/g' {} \;

3.3 libgpg-error库文件缺失

最棘手的问题出现在buildroot阶段,系统提示缺少errnos-sym.h文件。这个文件是libgpg-error库的核心组件,缺失会导致编译中断。

手动解决方案分三步:

  1. 创建errnos-sym.h文件,内容可以从开源项目中获取
  2. 将文件放置到指定目录:
cp errnos-sym.h out/t113_i/tlt113-minievm-emmc/longan/buildroot/build/libgpg-error-1.33/src/
  1. 重新执行编译命令

4. 编译优化与验证

成功解决所有错误后,可以尝试优化编译速度。我的经验是:

  • 使用-j$(nproc)参数启用多核编译
  • 设置CCACHE_DIR环境变量启用ccache缓存
  • 关闭调试符号减少文件体积

完整编译命令示例:

export CCACHE_DIR=/path/to/ccache ./build.sh -j$(nproc)

编译完成后,在out/t113_i/tlt113-minievm-emmc/目录下可以找到生成的镜像文件。建议用md5sum校验文件完整性,并通过TF卡或网络烧写到开发板验证功能。

遇到烧写问题时,检查串口终端输出是很好的排错手段。我通常会连接UART查看启动日志,重点关注uboot阶段是否正常加载设备树和内核镜像。

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

相关文章:

  • 双端适配陪玩系统 JAVA 国际版源码 + H5 + 打手俱乐部集成方案
  • 从项目实战出发:用pip和venv搞定Python多版本依赖隔离与离线部署(附requirements.txt最佳实践)
  • 如何用PortProxyGUI简化Windows端口转发配置
  • 光学设计避坑指南:CODEV10.2中那些容易忽略的细节(附练习题解析)
  • Go-Zero + DTM实战:电商订单与库存的分布式事务处理(附完整代码)
  • 从 0 到 1 搭建企业级 UI 自动化测试框架(Python + Selenium + Pytest + Allure)
  • AHT20传感器数据漂移?STM32硬件I2C与软件模拟的稳定性对比测试
  • 量子阱、量子线和量子点有什么区别?从游泳池到楼梯的通俗解释
  • Python实现简易可信度推理引擎:用20行代码复现经典CF模型
  • Cortex-M架构运行Linux的技术挑战与替代方案
  • 用PyCharm玩转gprMax 3.0:从A扫、B扫到波形堆叠的完整仿真项目实战
  • ThinkPHP+Uniapp实战:如何从零搭建一个企业级设备巡检小程序(附源码)
  • Beyond Compare 5 高效激活方案:开源工具生成授权密钥完整指南
  • Arduino EtherCAT从站开发:基于EsmacatShield的PDO映射与状态机实践
  • 【Qt+FFmpeg】动态时间水印在视频监控回放中的应用
  • 5个核心功能解决Windows音频捕获难题:win-capture-audio的低延迟技术改进
  • 从GCC到Glibc:拆解交叉编译工具链的‘黑盒子‘(以树莓派开发为例)
  • 数据结构从0到入门(1):数据结构概述
  • 如何快速掌握Unity JSON处理:新手必看的5个核心技巧
  • 模型timm/ViT-B-16-SigLIP简要介绍及其应用场景
  • 闲鱼自动化运营工具:如何通过Appium技术实现二手交易效率提升
  • PPTist:革新浏览器端演示文稿创作的无缝解决方案
  • 单电阻采样翻车实录:从SVPWM扇区判断到ADC采样点的那些‘坑’
  • 手把手教你用KAN网络解决偏微分方程:从理论到代码实现
  • 4个步骤让普通用户实现黑苹果EFI自动生成:OpCore Simplify智能工具全解析
  • YOLOv11环境搭建保姆级教程:从安装到快速推理(附常见问题解决)
  • 别再死记硬背了!用GanttPRO或draw.io画图,直观理解FCFS、SJF、优先级调度差异
  • Deepin Boot Maker:基于多架构感知的跨平台启动盘制作技术深度解析
  • S32K144实战笔记(二):看门狗配置、系统复位诊断与低功耗休眠管理
  • Cobalt Strike远控技术深度解析