嵌入式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或读取温湿度传感器了。
记住:先跑通,再深究。动手才是最快的进步方式!

相关推荐
AI、少年郎2 小时前
MiniMind第 2 篇:破除大模型 “神秘感“, 环境搭建|Win/Linux 本地快速部署
linux·运维·服务器·ai·大模型训练·大模型微调·大模型原理
乐维_lwops3 小时前
五层架构全景解析:Lerwee 运维智能体如何实现 “从感知到行动”(二)
运维·架构·运维智能体
彭泽布衣3 小时前
Linux异常文件名文件如何删除
linux·运维·服务器
优泽云安全3 小时前
如何选择IRCS云信息安全管理系统 IRCS云资源评测
linux·服务器·安全·安全架构
ShineWinsu3 小时前
对于Linux:Ext系列文件系统的解析—下
linux·面试·笔试·文件系统··ext2·挂载分区
小夏子_riotous3 小时前
Docker学习路径——2、安装
linux·运维·分布式·学习·docker·容器·云计算
豆包公子3 小时前
程序流监控:AUTOSAR CP 功能安全在裸机 MCU 上的实现(理论篇)
运维·单片机·嵌入式硬件·安全·车载系统·autosar
添砖java‘’3 小时前
NAT代理、内网打洞和内网穿透
linux·服务器·网络
SilentSamsara3 小时前
Linux 文件系统入门:目录结构不是随便画的
linux·运维·服务器