嵌入式 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 源码不会被修改,放心编译
相关推荐
为思念酝酿的痛3 小时前
POSIX信号量
linux·运维·服务器·后端
专业白嫖怪3 小时前
什么是docker
运维·docker·容器
隔窗听雨眠4 小时前
Nginx网关响应慢排查手记
java·服务器·nginx
人还是要有梦想的4 小时前
linux下用搜狗输入法,中英文切换
linux·运维·服务器
北京智和信通5 小时前
某部队IT基础设施及机房动环统一运维建设实例
运维·网管平台·网管软件·网络管理系统·网络运维平台·网络运维系统
乐维_lwops5 小时前
从 “救火运维” 到 “自动驾驶”:运维智能体到底解决了什么?
运维·人工智能·运维智能体
bush45 小时前
嵌入式linux学习记录二
linux·运维·学习
9分钟带帽5 小时前
linux_通过NFS挂载远程服务器的硬盘
linux·服务器
weixin_468466855 小时前
MoneyPrinterTurbo 短视频自动化生产实战指南
运维·人工智能·自动化·大模型·音视频·moneyprinter
難釋懷6 小时前
Nginx自签名-图形化工具 XCA
运维·nginx