目录

一、开发环境概念

1.1 三个关键环境的区分

1.2 为什么需要区分

二、Buildroot vs Ubuntu

2.1 核心区别

2.2 你采用的混合模式

三、SDK 目录结构

四、交叉编译工具链

4.1 什么是交叉编译

4.2 工具链位置

4.3 sysroot 的作用

五、瑞芯微专用库

六、编译流程

6.1 系统编译(首次)

6.2 应用编译(日常开发)

6.3 编译产物

七、常见问题解决

7.1 头文件找不到

7.2 库文件找不到

7.3 apt 锁占用

八、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 源码不会被修改,放心编译

Logo

智能硬件社区聚焦AI智能硬件技术生态,汇聚嵌入式AI、物联网硬件开发者,打造交流分享平台,同步全国赛事资讯、开展 OPC 核心人才招募,助力技术落地与开发者成长。

更多推荐