嵌入式 Linux 开发知识总结

目录

一、开发环境概念

[1.1 三个关键环境的区分](#1.1 三个关键环境的区分)

[1.2 为什么需要区分](#1.2 为什么需要区分)

[二、Buildroot vs Ubuntu](#二、Buildroot vs Ubuntu)

[2.1 核心区别](#2.1 核心区别)

[2.2 你采用的混合模式](#2.2 你采用的混合模式)

[三、SDK 目录结构](#三、SDK 目录结构)

四、交叉编译工具链

[4.1 什么是交叉编译](#4.1 什么是交叉编译)

[4.2 工具链位置](#4.2 工具链位置)

[4.3 sysroot 的作用](#4.3 sysroot 的作用)

五、瑞芯微专用库

六、编译流程

[6.1 系统编译(首次)](#6.1 系统编译(首次))

[6.2 应用编译(日常开发)](#6.2 应用编译(日常开发))

[6.3 编译产物](#6.3 编译产物)

七、常见问题解决

[7.1 头文件找不到](#7.1 头文件找不到)

[7.2 库文件找不到](#7.2 库文件找不到)

[7.3 apt 锁占用](#7.3 apt 锁占用)

[八、Makefile 模板](#八、Makefile 模板)

九、开发流程总结

十、核心要点


一、开发环境概念

1.1 三个关键环境的区分

环境 作用 你的配置
编译环境 编译代码的地方 Buildroot 编译环境(电脑上)
运行环境 运行程序的地方 Ubuntu 系统(开发板上)
开发环境 写代码的地方 Ubuntu 虚拟机(电脑上)

1.2 为什么需要区分

写代码(电脑)→ 交叉编译(电脑)→ 传输 → 运行(开发板)

  • 电脑是 x86 架构 ,开发板是 ARM 架构
  • 不能直接在电脑上运行 ARM 程序
  • 需要用交叉编译工具链在电脑上编译出 ARM 程序

二、Buildroot vs Ubuntu

2.1 核心区别

特性 Buildroot Ubuntu
定位 嵌入式构建系统 通用操作系统
库来源 从源码编译 从 apt 仓库下载
瑞芯微库 有(SDK 自带源码) 无(官方源没有)
包管理 无 apt
体积 几十 MB 几 GB
适用场景 量产产品 开发调试

2.2 你采用的混合模式

电脑:Buildroot 编译环境(获得完整开发库)

开发板:Ubuntu 系统(方便调试,apt 装工具)

这是嵌入式 Linux 开发的最佳实践:

  • ✅ 编译环境完整(所有依赖自动处理)
  • ✅ 运行环境便利(可以 apt 装软件)

三、SDK 目录结构

rv1126-rv1109-linux/

├── buildroot/ # Buildroot 构建系统

│ └── output/ # 编译输出目录

│ └── rockchip_..._facial_gate/

│ ├── host/ # 交叉编译工具链 + sysroot

│ └── target/ # 目标根文件系统

├── kernel/ # Linux 内核源码

├── u-boot/ # Uboot 源码

├── device/ # 板级配置

├── external/ # 第三方库源码(rkmedia、rkaiq 等)

├── app/ # 应用示例

├── prebuilts/ # 预编译工具链

└── rockdev/ # 最终镜像输出


四、交叉编译工具链

4.1 什么是交叉编译

在 x86 电脑上编译出 ARM 开发板能运行的程序。

4.2 工具链位置

Buildroot 生成的工具链(推荐)

buildroot/output/.../host/bin/arm-linux-gnueabihf-g++

SDK 自带的工具链(备用)

prebuilts/gcc/.../arm-linux-gnueabihf-g++

4.3 sysroot 的作用

sysroot 是目标系统的根文件系统镜像,包含:

  • 头文件(usr/include/)
  • 库文件(usr/lib/)

编译时,工具链会从这个目录查找依赖。


五、瑞芯微专用库

库 作用
librkmedia 多媒体处理(视频采集、编码、显示)
librkaiq 图像质量调优(自动曝光、白平衡)
libeasymedia 多媒体框架(底层封装)
librtsp RTSP 流媒体协议

这些库不在 Ubuntu 官方源,需要从 SDK 获得。


六、编译流程

6.1 系统编译(首次)

./build.sh lunch # 选择板型

./build.sh allsave # 完整编译(2-3小时)

6.2 应用编译(日常开发)

用 Buildroot 环境编译应用

export PATH=.../host/bin:$PATH

arm-linux-gnueabihf-g++ -o app app.c -lrkmedia -lrkaiq

6.3 编译产物

文件 说明
rockdev/update.img 完整固件(烧录用)
rockdev/boot.img 内核镜像
rockdev/rootfs.img 根文件系统

七、常见问题解决

7.1 头文件找不到

查找头文件位置

find ~/rv1126/SDK_DIR -name "xxx.h"

添加到 CFLAGS

CFLAGS += -I/path/to/include

7.2 库文件找不到

查找库文件

find ~/rv1126/SDK_DIR -name "libxxx.so"

添加到 LDFLAGS

LDFLAGS += -L/path/to/lib -lxxx

7.3 apt 锁占用

sudo pkill apt

sudo rm /var/lib/dpkg/lock-frontend


八、Makefile 模板

交叉编译工具链

GCC := /path/to/arm-linux-gnueabihf-g++

头文件路径

CFLAGS := -I/path/to/include

库文件路径

LDFLAGS := -L/path/to/lib -lrkmedia -lrkaiq -lpthread

all: app

app: app.c

(GCC) ^ (CFLAGS) (LDFLAGS) -o $@

clean:

rm -f app


九、开发流程总结

复制代码
┌─────────────────────────────────────────────────────────┐
│                    完整开发流程                          │
├─────────────────────────────────────────────────────────┤
│ 1. 获取 SDK(已解压)                                    │
│ 2. 编译 Buildroot(获得编译环境)← 你现在在这里           │
│ 3. 编写应用程序代码                                      │
│ 4. 用 Buildroot 环境交叉编译                             │
│ 5. 传到开发板运行测试                                    │
│ 6. 调试修改,重复 3-5                                    │
└─────────────────────────────────────────────────────────┘

十、核心要点

  1. 编译环境 ≠ 运行环境:电脑编译,板子运行
  2. Buildroot 提供编译环境,Ubuntu 提供运行环境
  3. 瑞芯微库需要从 SDK 获得,不在系统官方源
  4. 交叉编译工具链是连接电脑和板子的桥梁
  5. sysroot 包含了目标系统的所有开发文件
  6. 首次编译慢,但之后应用编译很快
  7. SDK 源码不会被修改,放心编译
相关推荐
不悔哥11 分钟前
Linux系统编程多线程程序如何安全退出
linux
Fcy64824 分钟前
Linux下 数据链路层详解(从以太网到ARP协议)
linux·mac·以太网·数据链路层·arp
集智飞行1 小时前
解决mavros2 ros2版本cpu占用高的问题
java·服务器·前端
Java后端的Ai之路1 小时前
昇腾NPU显存管理避坑指南:从npu-smi输出精准识别空闲卡的底层逻辑与实战
服务器·网络·数据库·npu·大模型服务
YH行业报告分析1 小时前
2026电缆铺设设备市场:自动化敷设与电网升级驱动增长
运维·自动化
ajassi20002 小时前
AI语音智能体开发日记(十八)智能体服务器xiaozhi-esp32-server源码部署指南
运维·服务器·人工智能·ai·ai编程
‎ദ്ദിᵔ.˛.ᵔ₎2 小时前
linux 进程信号(下)
linux·运维·服务器
skywalk81633 小时前
在FreeBSD系统的linux仿真环境下安装和使用kiro 这个亚马逊的AI agent
linux·人工智能·freebsd·kiro
Mikko73 小时前
Linux 磁盘满了但 du 找不到?LVM 扩容 df 不变?fstab 写错开不了机?三台真机实测磁盘排查
linux·运维·centos
蓝胖的四次元口袋3 小时前
Jenkins知识梳理(2)
运维·jenkins