Skip to main content

HelloWorld 快速入门

本章完成最小应用开发闭环:在 Ubuntu 写一个 C 程序,用 SDK 的 Arm 工具链编译,通过 ADB 上传, 最后在开发板运行。全程约 10 分钟。

执行位置要做的事
Ubuntu 主机写源码、交叉编译、用 file 检查架构、ADB 上传
开发板 Linux Shell赋予执行权限并运行程序

开始前确认已经完成启动开发板,并且 SDK 至少成功解压、工具链已经生成。

编写程序

Ubuntu 主机新建一个工作目录:

mkdir -p ~/t153-app/hello
cd ~/t153-app/hello

用熟悉的编辑器创建 helloworld.c。例如:

nano helloworld.c

输入以下内容,按 Ctrl+O 保存、Enter 确认,再按 Ctrl+X 退出:

#include <stdio.h>

int main(void)
{
printf("OmniGate-T153 Hello World!\n");
return 0;
}

找到交叉编译工具链

普通 Ubuntu gcc 生成的是 x86 程序,不能直接在 Arm 开发板运行。另开一个终端,进入 T153MX SDK 根目录并加载环境。下面路径是示例,请改成你的 SDK 绝对路径:

cd /home/ubuntu/T153_Tina5SDK-V1
source build/envsetup.sh

当前 SDK 已确认的编译器为:

out/toolchain/gcc-linaro-11.3.1-2022.06-x86_64_arm-linux-gnueabihf/bin/arm-linux-gnueabihf-gcc

保存 SDK 和应用目录,随后把工具链加入当前终端:

export T153_SDK_ROOT="$PWD"
export T153_APP_DIR="$HOME/t153-app/hello"
export T153_TOOLCHAIN="$T153_SDK_ROOT/out/toolchain/gcc-linaro-11.3.1-2022.06-x86_64_arm-linux-gnueabihf/bin"
export PATH="$T153_TOOLCHAIN:$PATH"
arm-linux-gnueabihf-gcc --version

可以看到 GCC 11.3.1 版本信息。

编译程序

无需切换目录,直接使用绝对变量编译:

arm-linux-gnueabihf-gcc "$T153_APP_DIR/helloworld.c" -o "$T153_APP_DIR/helloworld"
file "$T153_APP_DIR/helloworld"

预期输出包含:

ELF 32-bit LSB executable, ARM, EABI5
interpreter /lib/ld-linux-armhf.so.3

看到 ARM 表示生成的是开发板程序;如果显示 x86-64,说明误用了主机 gcc

上传程序

使用 USB 数据线连接开发板 OTG/Device 口。在 Ubuntu 主机执行:

adb devices
adb push "$T153_APP_DIR/helloworld" /tmp/

设备列表中出现序列号并显示 device,随后会提示文件上传成功。

在开发板运行

可以通过串口进入开发板,也可以执行:

adb shell

开发板 Linux Shell运行:

chmod +x /tmp/helloworld
/tmp/helloworld

可以看到:

OmniGate-T153 Hello World!

出现以上内容,说明交叉编译、USB 上传和板端运行都已经完成。

修改一次再重新编译

把输出文字改成自己的项目名,保存后重复编译 → push → 运行三步。ADB 覆盖 /tmp/helloworld 时,如果程序正在运行,应先在板端结束进程。

开发板的 /tmp 通常位于内存文件系统,重启后文件会消失。这正适合测试;要随固件长期交付, 应把应用加入 Buildroot package 或板级 rootfs overlay,而不是只执行一次 adb push

测试通过标准

  • arm-linux-gnueabihf-gcc --version 能正常输出编译器版本。
  • file helloworld 显示 ARM 32 位 EABI 可执行程序,而不是 x86-64。
  • 文件能够通过 ADB 上传到开发板。
  • 板端运行后准确输出 OmniGate-T153 Hello World!

常见问题

现象处理
arm-linux-gnueabihf-gcc: command not found检查 T153_TOOLCHAIN 目录是否存在,并确认 SDK 工具链已经解压
file 显示 x86-64误用了主机 gcc,重新用 arm-linux-gnueabihf-gcc 编译
adb devices 列表为空检查 OTG/Device 口、USB 数据线和板端 adbd
板端提示 Permission denied执行 chmod +x /tmp/helloworld
板端提示 not found,但文件存在filereadelf -l 检查架构和动态加载器
板端提示缺少 .so使用同一 SDK sysroot 重新编译,或把依赖加入 Buildroot;不要复制主机 x86 库

需要定位动态加载器时,在 Ubuntu 主机执行:

readelf -l "$T153_APP_DIR/helloworld" | grep interpreter