目录一、开发环境概念1.1 三个关键环境的区分1.2 为什么需要区分二、Buildroot vs Ubuntu2.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 Ubuntu2.1 核心区别特性BuildrootUbuntu定位嵌入式构建系统通用操作系统库来源从源码编译从 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-g4.3 sysroot 的作用sysroot 是目标系统的根文件系统镜像包含头文件usr/include/库文件usr/lib/编译时工具链会从这个目录查找依赖。五、瑞芯微专用库库作用librkmedia多媒体处理视频采集、编码、显示librkaiq图像质量调优自动曝光、白平衡libeasymedia多媒体框架底层封装librtspRTSP 流媒体协议这些库不在 Ubuntu 官方源需要从 SDK 获得。六、编译流程6.1 系统编译首次./build.sh lunch # 选择板型./build.sh allsave # 完整编译2-3小时6.2 应用编译日常开发# 用 Buildroot 环境编译应用export PATH.../host/bin:$PATHarm-linux-gnueabihf-g -o app app.c -lrkmedia -lrkaiq6.3 编译产物文件说明rockdev/update.img完整固件烧录用rockdev/boot.img内核镜像rockdev/rootfs.img根文件系统七、常见问题解决7.1 头文件找不到# 查找头文件位置find ~/rv1126/SDK_DIR -name xxx.h# 添加到 CFLAGSCFLAGS -I/path/to/include7.2 库文件找不到# 查找库文件find ~/rv1126/SDK_DIR -name libxxx.so# 添加到 LDFLAGSLDFLAGS -L/path/to/lib -lxxx7.3 apt 锁占用sudo pkill aptsudo 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 -lpthreadall: appapp: app.c$(GCC) $^ $(CFLAGS) $(LDFLAGS) -o $clean:rm -f app九、开发流程总结┌─────────────────────────────────────────────────────────┐ │ 完整开发流程 │ ├─────────────────────────────────────────────────────────┤ │ 1. 获取 SDK已解压 │ │ 2. 编译 Buildroot获得编译环境← 你现在在这里 │ │ 3. 编写应用程序代码 │ │ 4. 用 Buildroot 环境交叉编译 │ │ 5. 传到开发板运行测试 │ │ 6. 调试修改重复 3-5 │ └─────────────────────────────────────────────────────────┘十、核心要点编译环境 ≠ 运行环境电脑编译板子运行Buildroot 提供编译环境Ubuntu 提供运行环境瑞芯微库需要从 SDK 获得不在系统官方源交叉编译工具链是连接电脑和板子的桥梁sysroot包含了目标系统的所有开发文件首次编译慢但之后应用编译很快SDK 源码不会被修改放心编译
嵌入式 Linux 开发知识总结
目录一、开发环境概念1.1 三个关键环境的区分1.2 为什么需要区分二、Buildroot vs Ubuntu2.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 Ubuntu2.1 核心区别特性BuildrootUbuntu定位嵌入式构建系统通用操作系统库来源从源码编译从 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-g4.3 sysroot 的作用sysroot 是目标系统的根文件系统镜像包含头文件usr/include/库文件usr/lib/编译时工具链会从这个目录查找依赖。五、瑞芯微专用库库作用librkmedia多媒体处理视频采集、编码、显示librkaiq图像质量调优自动曝光、白平衡libeasymedia多媒体框架底层封装librtspRTSP 流媒体协议这些库不在 Ubuntu 官方源需要从 SDK 获得。六、编译流程6.1 系统编译首次./build.sh lunch # 选择板型./build.sh allsave # 完整编译2-3小时6.2 应用编译日常开发# 用 Buildroot 环境编译应用export PATH.../host/bin:$PATHarm-linux-gnueabihf-g -o app app.c -lrkmedia -lrkaiq6.3 编译产物文件说明rockdev/update.img完整固件烧录用rockdev/boot.img内核镜像rockdev/rootfs.img根文件系统七、常见问题解决7.1 头文件找不到# 查找头文件位置find ~/rv1126/SDK_DIR -name xxx.h# 添加到 CFLAGSCFLAGS -I/path/to/include7.2 库文件找不到# 查找库文件find ~/rv1126/SDK_DIR -name libxxx.so# 添加到 LDFLAGSLDFLAGS -L/path/to/lib -lxxx7.3 apt 锁占用sudo pkill aptsudo 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 -lpthreadall: appapp: app.c$(GCC) $^ $(CFLAGS) $(LDFLAGS) -o $clean:rm -f app九、开发流程总结┌─────────────────────────────────────────────────────────┐ │ 完整开发流程 │ ├─────────────────────────────────────────────────────────┤ │ 1. 获取 SDK已解压 │ │ 2. 编译 Buildroot获得编译环境← 你现在在这里 │ │ 3. 编写应用程序代码 │ │ 4. 用 Buildroot 环境交叉编译 │ │ 5. 传到开发板运行测试 │ │ 6. 调试修改重复 3-5 │ └─────────────────────────────────────────────────────────┘十、核心要点编译环境 ≠ 运行环境电脑编译板子运行Buildroot 提供编译环境Ubuntu 提供运行环境瑞芯微库需要从 SDK 获得不在系统官方源交叉编译工具链是连接电脑和板子的桥梁sysroot包含了目标系统的所有开发文件首次编译慢但之后应用编译很快SDK 源码不会被修改放心编译