嵌入式 Linux 开发知识总结

嵌入式 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 源码不会被修改放心编译