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

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

1. 环境准备与依赖安装

在Ubuntu 20.04上编译创龙T113 SDK,首先要解决的就是环境依赖问题。我刚开始尝试时,以为直接按照官方文档操作就行,结果踩了不少坑。这里分享下我的完整配置过程。

先说说硬件环境,我用的是创龙TLT113-MiniEVM_V1.2开发板,但操作系统没有使用官方推荐的镜像,而是选择了更熟悉的Ubuntu 20.04。这个选择后来证明是个双刃剑——既带来了灵活性,也增加了一些兼容性问题。

第一步是解压SDK包。创龙的LinuxSDK-v1.2.tar.gz文件解压后,会得到一个T113-i_v1.0目录。这里有个小技巧:建议把解压路径放在用户主目录下,不要放在太深的目录层级里,因为后续编译时可能会遇到路径长度限制的问题。

依赖安装是最容易出问题的环节。官方手册列出的依赖项可能不够全面,我通过反复尝试整理出了完整清单:

sudo apt-get install -y build-essential bison flex \ python2.7 python-dev swig libncurses5-dev \ libssl-dev u-boot-tools device-tree-compiler \ gcc-arm-linux-gnueabihf g++-arm-linux-gnueabihf

特别注意python2.7的安装,这是个大坑。现代Ubuntu系统默认都是python3,但创龙SDK需要python2环境。我试过用python3兼容模式,结果各种报错,最后还是老老实实装了python2.7。

2. Python版本冲突解决方案

说到Python版本问题,这可能是最常遇到的坑。我第一次运行./build.sh config时就遇到了"python: command not found"错误。解决方法其实很简单,但需要理解背后的原理。

先检查系统现有的Python版本:

ls -l /usr/bin/python*

在Ubuntu 20.04上,你可能会发现只有python3的链接。这时需要手动创建python2的软链接:

sudo rm -f /usr/bin/python # 先删除已有链接 sudo ln -s /usr/bin/python2 /usr/bin/python

验证链接是否生效:

python --version

这里有个细节要注意:有些教程会建议用update-alternatives来管理Python版本,但在SDK编译环境下,直接创建软链接反而更可靠。我两种方法都试过,发现update-alternatives有时会导致脚本找不到python解释器。

3. 编译配置与内核选项

环境准备好后,就可以开始配置了。进入T113-i_v1.0目录,先清理之前的编译结果:

cd T113-i_v1.0/ ./build.sh distclean

配置环节很关键,它决定了后续编译的组件和功能:

./build.sh config

这里会出现一个交互式菜单,需要选择:

  1. 处理器型号:T113
  2. 开发板型号:tlt113-minievm-nand
  3. 显示输出方式(根据实际硬件选择)
  4. 编译器类型(一般选默认的arm-linux-gnueabihf)

配置完成后,建议先保存一份.config文件备份,因为后续如果编译出错需要重新配置时,可以直接恢复这个备份,不用再从头选择。

4. 常见编译错误及解决方法

4.1 gdbus编译错误

第一次完整编译时,我遇到了两个gdbus相关的错误:

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

这两个错误都是因为代码中没有对字符串指针做空值检查。解决方法是在对应行数添加判空逻辑:

在gdbusauth.c第1302行附近修改:

if (auth->credentials != NULL) { g_string_append_printf (debug, " credentials=%s", auth->credentials); }

在gdbusmessage.c第2702行附近修改:

if (signature_str != NULL) { g_string_append_printf (debug, " %s", signature_str); }

4.2 awk脚本语法错误

接下来遇到的是awk脚本问题:

`\#' is not a known regexp operator

这个错误出现在几个.awk文件中,包括:

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

问题在于awk版本差异导致的语法不兼容。解决方法是将所有文件中的:

sub(/\#.+/, "");

修改为:

sub(/#.+/, "");

其实就是去掉反斜杠,因为新版本awk中#不需要转义。

4.3 缺失头文件问题

最棘手的一个错误是errnos-sym.h文件缺失:

errnos-sym.h: No such file or directory

这个文件是libgpg-error编译时需要的,但SDK里没有提供。我从其他开源项目中找到了解决方案,需要手动创建这个文件:

  1. 首先确定文件存放路径:
T113-i_v1.0/out/t113_i/tlt113-minievm-emmc/longan/buildroot/build/libgpg-error-1.33/src
  1. 创建errnos-sym.h文件,内容如下(篇幅所限,完整内容可以参考开源项目的实现):
/* Output of mkstrtable.awk. DO NOT EDIT. */ static const char errnos_msgstr[] = "GPG_ERR_E2BIG\0" "GPG_ERR_EACCES\0"...; static const int errnos_msgidx[] = {0, 14, 29,...};
  1. 保存后重新编译即可通过

5. 编译优化与后续工作

解决所有错误后,完整的编译命令是:

source ./build/envsetup.sh ./build.sh

编译过程视机器性能可能需要1-3小时。有几个优化建议:

  1. 使用make -j$(nproc)参数启用多核编译
  2. 确保有足够的swap空间(至少4GB)
  3. 编译前关闭其他占用资源的程序

编译完成后,生成的固件位于out目录下,主要包括:

  • u-boot.bin
  • sunxi.dtb
  • rootfs.img

这些文件可以通过创龙提供的烧录工具写入开发板。第一次启动时建议连接串口调试,观察启动日志,确保所有驱动正常加载。

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

相关文章:

  • 避坑指南:ZCU111开发板VADJ_FMC电压修改后重启失效的解决方案
  • TLS测评漏洞问题
  • 数据库SM4和pg_rewind冲突导致HGHAC备库时间线不同步
  • 法律文书智能处理:GTE模型在司法领域的创新应用
  • StructBERT语义匹配系统企业应用:HR简历与岗位JD智能匹配落地
  • LLM 强化学习实战(一)DeepSeek-R1:无需人工标注,如何让大模型自主进化出推理能力?
  • 【JS逆向】网易云音乐加密参数params与encSecKey的逆向分析与实战
  • 活塞杆镀硬铬代加工费用大概多少钱 - myqiye
  • Python+Selenium自动化:雨课堂智能签到脚本实战
  • 从裸机Delay到RTOS线程切换:在STM32上移植RT-Thread Nano后,你的程序到底发生了什么变化?
  • 跨语言错误码统一治理:1套ErrorCode Schema驱动5种语言SDK,降低协作成本70%
  • ArduPilot固件自定义参数实战:从定义到地面站调试全流程
  • 全网唯一 为什么光刻机内容密度极高?
  • 深入解析DSP28335 eCAN模块:从邮箱配置到高效通信实践
  • Ansys HFSS S参数提取,核心供应商推荐 - 品牌2026
  • Qwen3-0.6B-FP8模型压缩与量化实战:从FP16到FP8的效能飞跃
  • MacBook Touch Bar 音量和亮度调节失灵?5个实用修复方案详解
  • 全网唯一 为什么高端数控机床内容密度极高?
  • 布隆过滤器避坑指南:为什么你的误判率总是居高不下?
  • SAP ABAP采购订单增强实战:从屏幕布局到逻辑校验的完整避坑指南
  • 2026年北京服务不错的别墅装修设计公司排名,靠谱之选大揭秘 - 工业推荐榜
  • S32K3实战指南:多核MCU中Gpt、Dio与Platform模块的协同配置
  • Python实战:5分钟搞定Pixiv每日推荐图片批量下载(附完整代码)
  • FastJson安全漏洞全解析:从原理到防护的实战指南
  • 聊聊2026年北京不错的大平层装修设计机构,哪家性价比高 - mypinpai
  • 视觉问答新挑战:OK-VQA数据集深度解析与常见问题避坑指南
  • MogFace人脸检测模型WebUI实战:Python爬虫获取图片并自动检测
  • 不充气碰碰船联营公司价格多少,如何选靠谱的? - 工业设备
  • 不止于显示:用U8g2自定义字库在OLED上打造专属IoT设备UI(SSD1306/ST7567实战)
  • 为什么你的轴承总提前失效?揭秘Palmgren理论中被忽略的3个现实因素