嵌入式 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 源码不会被修改,放心编译
相关推荐
养生技术人1 小时前
Oracle OCP认证考试题目详解082系列第5题
运维·数据库·sql·oracle·开闭原则
原来是猿2 小时前
VS Code Remote-SSH 连接失败:提示过程试图写入的管道不存在
linux·服务器·ssh
坚持就完事了2 小时前
Linux中的权限信息
linux·运维·服务器
殷紫川2 小时前
告别手动部署噩梦:CI/CD 持续交付全链路实战
运维·架构·自动化运维
顶点多余3 小时前
进程间通信 --- 共享内存篇(通信速度最快)
linux·服务器·jvm
co_wait3 小时前
【c 语言】linux下gcc编译工具的使用
linux·c语言·开发语言
liulilittle3 小时前
LINUX RING BUFFER TUN/TAP 1
linux·服务器·网络·c++·信息与通信·通信
supersolon3 小时前
WSL2(Linux)升级docker
linux·运维·docker·wsl·升级
人工干智能3 小时前
用AI写Fusion 360脚本:个人版也能免费玩自动化
运维·人工智能·自动化·fusion