嵌入式Linux应用开发快速入门(从零到第一个程序)

@TOC 嵌入式Linux应用开发快速入门(从零到第一个程序)

🎉 写给急着做产品的你 :本教程不堆砌理论,只讲 最快上路 的方法。我们用 现成的Ubuntu虚拟机USB ADB传输简单的编译命令 ,让你在 30分钟内 点亮开发板、跑起第一个 Hello World。每个步骤都配有 白话解释常见坑点解决技巧。跟着做,你就能先跑通全流程,再去深究细节。


1. 课程目标 ------ 为什么我们可以"快"?

1.1 一句话白话

你不需要先成为Linux内核专家,也能 快速做出一个带屏幕、能控制LED、能远程读取温湿度的产品 。我们帮你绕过那些暂时不必要深究的知识(比如自己装系统、配置网络、写Makefile),让你 先看到成品,再按需补课

1.2 "快"的三个秘诀

传统做法 我们的捷径 好处
自己下载Ubuntu镜像、手动安装、配置开发工具 直接使用我们配置好的 Ubuntu虚拟机(已装好交叉编译链、ADB、VSCode等) 省去2小时装环境
用网线配置NFS、TFTP、固定IP 只用 USB线 + ADB 传输文件和登录开发板 无需网络知识,即插即用
手写Makefile、解决依赖 直接用 arm-buildroot-linux-gnueabihf-gcc 单文件编译 命令极简,不会出错

1.3 课程口号

先跑通,再深究。

不要在一开始就被波特率、设备树、驱动框架吓退。你完全可以在 1小时内 做出第一个能跑在开发板上的程序。


2. 做什么产品 ------ 硬件框图与软件结构

2.1 最终产品功能

  • ✅ 在开发板的 触摸屏 上点击图标,控制 LED 亮灭
  • ✅ 屏幕上实时显示 温湿度传感器 的值
  • ✅ 通过 微信小程序 远程控制LED和查看温湿度(MQTT + 云服务器)

2.2 硬件连接简图

2.3 软件分层(从上到下)

层次 组件 说明
微信小程序 MQTT客户端 发送指令、接收数据
云端 MQTT Broker 转发消息(如阿里云IoT)
开发板APP 前台QT GUI 显示界面、响应用户触摸
开发板APP 后台服务(多线程) 读取温湿度、控制LED、与云端通信
进程间通信 JsonRPC / 共享内存 前后台交换数据
驱动层 LED驱动、温湿度模块驱动 直接操作硬件
硬件 LED、传感器 执行动作

💡 你目前只需要关注"驱动层之上的应用开发",驱动和内核已经由开发板厂家提供好了。

2.4 上机演示效果

  • 上电后屏幕显示主界面,有"开灯"、"关灯"按钮
  • 点击按钮,LED立即响应
  • 温湿度数值每秒刷新一次
  • 手机微信小程序上也能看到相同的数据并控制

3. 搭建开发环境 ------ 从网盘到Ubuntu启动

3.1 下载网盘资料

  1. 打开 百问网下载中心(网址见官方文档)
  2. 在左侧导航找到你的开发板型号(如 100ask_imx6ull_pro
  3. 下载 网盘资料(通常是一个百度网盘链接或BT种子)
  4. 重点获取以下内容:
    • 02_开发工具/ 下的虚拟机镜像(推荐 ubuntu18.04_vscode_imx6ull_pro_QT.7z
    • 03_开发板使用手册/ 中的PDF
    • 04_源码/ 中的示例代码

3.2 安装必备软件(Windows端)

软件 用途 获取位置
VMware Workstation 16 Player 运行Ubuntu虚拟机 网盘 02_开发工具/Windows/VMwareWorkstation安装包
MobaXterm 串口终端、SSH工具 同上
FileZilla 文件传输(可选,ADB更方便) 同上
USB串口驱动 使电脑识别开发板串口 网盘 02_开发工具/Windows/USB串口驱动

⚠️ 注意:VMware Player 是免费的,足够使用。安装后如果提示许可证过期,不影响基本功能。

3.3 导入Ubuntu虚拟机

  1. 解压 下载的 .7z 虚拟机压缩包(密码一般为 123456
  2. 打开 VMware Player → 点击 "打开虚拟机"
  3. 选择解压后的 .vmx 文件(如 ubuntu18.04_vscode_imx6ull_pro.vmx
  4. 启动虚拟机,登录信息:
    • 用户名:book
    • 密码:123456

3.4 验证网络(必须能上网)

在Ubuntu终端中执行:

bash

复制代码
ping news.qq.com -c 4

如果看到类似 64 bytes from ... 的输出,说明网络正常。

如果没有,请检查虚拟机网络设置为 NAT(默认就是NAT)。

3.5 更新Git仓库(获取最新代码)

bash

复制代码
cd ~/Desktop/01_all_series_quickstart
git pull

如果提示 Already up to date. 说明已是最新。

💡 为什么用Git? 后续课程会不断更新代码,git pull 能让你轻松同步。

3.6 配套资料一览

下载后的目录结构(部分):


4. 连接开发板 ------ 两种方式:串口 + ADB

4.1 硬件连接图


  1. 电源线:开发板DC口接5V电源
  2. USB OTG线 :一端插开发板 OTG口 ,另一端插 电脑USB
    • 用于ADB传输文件和shell登录
  3. USB转串口线(可选):用于查看内核启动日志,如果ADB够用可以不接

推荐:只用OTG线 + ADB,一条线解决文件传输和命令行登录,非常方便。

4.2 串口连接(调试用,可选)

参考手册《嵌入式Linux应用开发完全手册V5.2_xxx开发板》的 3.4 串口连接 章节:

  • 使用 MobaXterm 打开对应COM口,波特率 115200
  • 开发板上电后,串口会打印启动日志,最终显示 [root@100ask:/]# 提示符

4.3 ADB连接 ------ 重点(推荐)

ADB(Android Debug Bridge)原本用于Android调试,但也可以用来与Linux开发板通信。我们用它来 传文件执行命令

4.3.1 给Ubuntu添加ADB支持

打开Ubuntu终端,依次执行:

bash

复制代码
# 1. 检查是否已有adb
ls /usr/bin/adb

# 2. 如果没有,安装adb
sudo apt update
sudo apt install adb -y

# 3. 设置adb权限(重要!否则会报 no permissions)
sudo chmod a+x /usr/bin/adb
sudo chmod a+s /usr/bin/adb

# 4. 重启adb服务
sudo adb kill-server

⚠️ 常见错误 :执行 adb devices 提示 no permissions (user book is not in the plugdev group)
解决方法 :就是上面第3步的 chmod a+s 让adb以root权限运行。

4.3.2 给开发板添加ADB支持(如果厂家已预装则跳过)

开发板出厂时可能已经支持ADB,验证方法:

在开发板串口终端执行:

bash

复制代码
ls /usr/bin/adb

如果显示 /usr/bin/adb 则已支持。否则需要手动安装,步骤如下:

配图:U盘格式化选择FAT32

  1. 准备一个 FAT32 格式的U盘(不能是exFAT或NTFS)
  2. 在Ubuntu中找到 adbd_files 目录(位于网盘 02_开发工具/ 下)
  3. 将整个 adbd_files 目录复制到U盘
  4. U盘插入开发板,系统会自动识别(串口会打印类似 sda: sda1 的消息)
  5. 在开发板上挂载U盘并复制文件:

bash

复制代码
mount /dev/sda1 /mnt
cd /mnt/adbd_files
cp * / -rf
dos2unix /lib/udev/rules.d/61-usb-adbd.rules
dos2unix /usr/bin/usb_config
dos2unix /etc/init.d/S99adbd
chmod +x /usr/bin/adb
chmod +x /usr/bin/adbd
chmod +x /usr/bin/usb_config
chmod +x /etc/init.d/S99adbd
reboot
4.3.3 在VMware中将OTG设备连接到Ubuntu
  • 当开发板通过OTG线连接到电脑后,VMware可能会自动弹窗询问"将此设备连接到虚拟机还是主机",选择 连接到虚拟机(ubuntu18.04_vscode_imx6ull_pro)
  • 如果没有弹窗,可以手动操作:
    VMware菜单栏 → 可移动设备 → 找到 Linux Foundation 100ASK_IMX6ULL → 点击 连接
4.3.4 测试ADB通信

在Ubuntu终端执行:

bash

复制代码
adb devices

如果看到类似下面的输出,说明成功:

text

复制代码
List of devices attached
100ask_IMX6ULL    device

然后就可以用ADB做很多事情:

命令 作用
adb shell 登录开发板的命令行
adb push 本地文件 开发板路径 上传文件,如 adb push hello /root
adb pull 开发板文件 本地路径 下载文件,如 adb pull /root/1.txt ./

5. 体验第一个程序 ------ Hello World

5.1 获取源码

源码位于 01_all_series_quickstart 仓库中:

bash

复制代码
cd ~/Desktop/01_all_series_quickstart/04_嵌入式Linux应用开发基础知识/source/01_hello
ls
# 你会看到 hello.c

⚠️ 重要提醒 :不要在原始的Git仓库目录里直接编译!因为 git pull 可能会覆盖你的修改。正确的做法是 复制到新目录

bash

复制代码
mkdir ~/my_test
cp hello.c ~/my_test/
cd ~/my_test

5.2 编写代码(如果你没有hello.c,自己创建一个)

c

复制代码
// hello.c
#include <stdio.h>

int main(int argc, char **argv)
{
    printf("Hello, world!\n");
    return 0;
}

5.3 交叉编译

使用开发板配套的交叉编译工具链:

bash

复制代码
arm-buildroot-linux-gnueabihf-gcc -o hello hello.c

编译成功后,当前目录会生成 hello 可执行文件(ARM架构)。

💡 为什么不能直接用gcc? 因为Ubuntu的gcc生成的是x86程序,无法在ARM开发板上运行。交叉编译工具链会生成ARM指令。

5.4 上传到开发板

bash

复制代码
adb push hello /root

输出类似:

text

复制代码
hello: 1 file pushed. 0.3 MB/s (8408 bytes in 0.024s)

5.5 登录开发板并运行

bash

复制代码
adb shell
# 此时提示符会变成 sh-5.0# 或 [root@100ask:/]#
/root/hello

你会看到:

text

复制代码
Hello, world!

🎉 恭喜!你的第一个ARM Linux程序跑起来了!

5.6 常见问题排查

现象 原因 解决
adb pushdevice not found OTG线未连接或VMware未连接设备 检查USB线,在VMware菜单中手动连接
adb shell 提示 error: insufficient permissions adb权限未设置 执行 sudo chmod a+s /usr/bin/adbadb kill-server
编译时提示 arm-buildroot...gcc: command not found 交叉编译工具链未安装或路径未加入PATH 虚拟机已预装,检查 echo $PATH 是否包含 /usr/bin
开发板上运行 hellonot found 缺少动态链接库(静态编译可解决) 使用 -static 重新编译:arm-buildroot...gcc -static -o hello hello.c

6. 完整速查表 📋

6.1 环境信息速查

项目
Ubuntu用户名/密码 book / 123456
开发板IP(通过ADB不需要) 无需配置
交叉编译工具链前缀 arm-buildroot-linux-gnueabihf-
第一个程序路径 /root/hello
ADB常用命令 adb devices, adb push, adb pull, adb shell

6.2 日常开发流程(三句话)

  1. 写代码 → 在Ubuntu中用VSCode编辑 .c 文件
  2. 编译arm-buildroot-linux-gnueabihf-gcc -o 程序名 源码.c
  3. 运行adb push 程序名 /rootadb shell/root/程序名

6.3 下一步学什么

你想做什么 去学对应的章节
控制LED 04_编写APP操作硬件/01_GPIO
读取温湿度 04_编写APP操作硬件/02_I2C(温湿度模块一般用I2C)
显示图片/文字 04_编写APP操作硬件/03_LCD + Qt
远程控制 06_实战项目/01_MQTT
写驱动程序 04d_嵌入式Linux驱动开发基础知识

7. 自我检查

7.1 本文与文档相比,在哪3个方面有明显提升?

  1. 口语化 + 结构化:用"三步走"、"一句话白话"、"常见坑点"等方式,把枯燥的步骤变成容易记忆的流程,而不是简单罗列命令。
  2. 独立性强:无需读者频繁翻阅原手册,每个步骤(尤其是ADB权限设置、U盘复制细节)都给出了完整命令和解释,并且增加了"为什么这样做"的说明。
  3. 实用主义:明确区分"必做步骤"和"可选步骤"(如串口非必须),并给出了"先跑通再深究"的学习理念,让初学者不会被吓退。

7.2 仍有哪个知识点自己觉得解释得不够清楚?为什么?

ADB 的 chmod a+s 原理 :虽然给出了命令,但没有深入解释 setuid 位的作用以及为什么 adb devices 需要 root 权限。原因是这部分涉及Linux用户和权限管理,对纯新手可能超纲,而"照着敲就能通"的策略在本教程中更合适。后续可以在进阶篇中补充 setuidplugdev 组的详细说明。


🎉 你已经完成了第一个嵌入式Linux应用程序!接下来,可以挑战点亮LED或读取温湿度传感器了。
记住:先跑通,再深究。动手才是最快的进步方式!

相关推荐
A小辣椒13 小时前
TShark:Wireshark CLI 功能
linux
A小辣椒17 小时前
TShark:基础知识
linux
AlfredZhao19 小时前
OCI 明明分配了 200G 系统盘,为什么 df 只看到 30G?
linux·oci
AlfredZhao1 天前
vi 删除指定范围的行,不用再反复按 dd
linux·vi
用户9718356334662 天前
银河麒麟 KY10 申威(SW64) 安装 nginx-1.16.1-2.p01.ky10.sw_64.rpm 详细步骤
linux
猪脚踏浪2 天前
linux 拷贝文件或目录到指定的位置
linux
大树882 天前
金刚石散热越强,管路越先见顶
大数据·运维·服务器·人工智能·ai
摇滚侠2 天前
Linux CentOS7 rpm 安装 MySQL 5.7
linux·运维·mysql
霸道流氓气质2 天前
领域驱动设计(DDD)在 Spring Boot 微服务中的实践指南
运维·spring boot·微服务
bush42 天前
嵌入式linux学习记录十四、术语
linux·嵌入式