跳转至

IMX-Forge 系统架构文档

文档版本: v1.0 最后更新: 2026-03-15 维护者: IMX-Forge 项目组


文档概述

本文档详细描述 IMX-Forge 项目的整体系统架构,包括模块组成、依赖关系、数据流向以及核心设计决策。通过本文档,开发者可以快速理解项目的组织结构,并有效地参与开发工作。


目录


1. 整体架构概览

1.1 架构图

┌─────────────────────────────────────────────────────────────────────┐
│                         IMX-Forge 项目架构                           │
├─────────────────────────────────────────────────────────────────────┤
│                                                                      │
│  ┌─────────────┐    ┌──────────────┐    ┌─────────────────────┐   │
│  │  开发环境   │───▶│   构建系统   │───▶│     输出产物        │   │
│  │ Development │    │    Scripts   │    │   Output Artifacts  │   │
│  └─────────────┘    └──────────────┘    └─────────────────────┘   │
│         │                   │                        │              │
│         │                   │                        │              │
│         ▼                   ▼                        ▼              │
│  ┌─────────────┐    ┌──────────────┐    ┌─────────────────────┐   │
│  │  第三方源码 │    │   补丁管理   │    │  可烧录镜像文件     │   │
│  │Third-Party  │◀───│   Patches    │    │  - zImage           │   │
│  │  Sources    │    │              │    │  - u-boot.bin       │   │
│  │             │    │  ┌────────┐  │    │  - rootfs           │   │
│  │ ┌─────────┐ │    │  │linux-  │  │    │  - DTB              │   │
│  │ │linux-   │ │    │  │imx/    │  │    │                     │   │
│  │ │imx      │ │    │  │mainline│  │    │                     │   │
│  │ └─────────┘ │    │  │/uboot/ │  │    │                     │   │
│  │ ┌─────────┐ │    │  └────────┘  │    │                     │   │
│  │ │uboot-   │ │    └──────────────┘    │                     │   │
│  │ │imx      │ │           │              │                     │   │
│  │ └─────────┘ │           │              │                     │   │
│  │ ┌─────────┐ │           │              │                     │   │
│  │ │busybox  │ │           │              │                     │   │
│  │ └─────────┘ │           │              │                     │   │
│  └─────────────┘           │              │                     │   │
│                            │              │                     │   │
│  ┌─────────────┐           │              │                     │   │
│  │  板卡支持   │           │              │                     │   │
│  │   Boards    │───────────┘              │                     │   │
│  │             │                          │                     │   │
│  │ - alpha     │                          │                     │   │
│  │ - custom-v1 │                          │                     │   │
│  └─────────────┘                          │                     │   │
│                                            │                     │   │
│  ┌─────────────┐                          │                     │   │
│  │  文档教程   │                          ▼                     │   │
│  │  Documents  │◀─────────────────────────┘                     │   │
│  │             │                                                │   │
│  │ - tutorial  │                                                │   │
│  │ - roadmap   │                                                │   │
│  │ - architecture│                                               │   │
│  └─────────────┘                                                │   │
│                                                                  │   │
└──────────────────────────────────────────────────────────────────┘

1.2 核心模块说明

模块名称 路径 功能描述
构建系统 scripts/ 提供统一的构建入口,管理编译流程
第三方源码 third_party/ Git Submodule 管理的第三方源码
补丁管理 patches/ 基于格式化补丁的修改管理
板卡支持 boards/ 板级配置和设备树文件
文档教程 document/ 项目文档和教程
驱动模块 driver/ 自研驱动和设备树overlay
根文件系统 rootfs/ 多种根文件系统实现
输出目录 out/ 构建产物输出位置

2. 启动流程架构

2.1 完整启动流程

┌──────────────────────────────────────────────────────────────────────┐
│                      i.MX6ULL 系统启动流程                            │
├──────────────────────────────────────────────────────────────────────┤
│                                                                       │
│  ┌──────────────┐                                                    │
│  │   上电复位   │                                                    │
│  │ Power On/Reset│                                                   │
│  └──────┬───────┘                                                    │
│         │                                                            │
│         ▼                                                            │
│  ┌──────────────┐                                                    │
│  │  ROM Code    │  ───▶  内部 BootROM,不可修改                       │
│  │  (芯片内部)  │       - 从 eMMC/SD 加载 SPL                         │
│  └──────┬───────┘       - 初始化基础硬件                             │
│         │                                                            │
│         ▼                                                            │
│  ┌──────────────┐                                                    │
│  │  SPL         │  ───▶  Secondary Program Loader                   │
│  │  (MLO/u-boot │       - 初始化 DDR                                 │
│  │   .spl)      │       - 加载完整 U-Boot                            │
│  └──────┬───────┘                                                    │
│         │                                                            │
│         ▼                                                            │
│  ┌──────────────┐                                                    │
│  │  U-Boot      │  ───▶  Universal Bootloader                       │
│  │  (引导加载器) │       - 硬件初始化                                 │
│  │              │       - 加载设备树 (DTB)                           │
│  │              │       - 加载内核镜像                               │
│  │              │       - 设置 bootargs                             │
│  └──────┬───────┘                                                    │
│         │                                                            │
│         ▼                                                            │
│  ┌──────────────┐                                                    │
│  │  Linux Kernel│  ───▶  操作系统内核                                │
│  │  (zImage)    │       - 内核初始化                                 │
│  │              │       - 驱动加载                                   │
│  │              │       - 挂载根文件系统                             │
│  └──────┬───────┘                                                    │
│         │                                                            │
│         ▼                                                            │
│  ┌──────────────┐                                                    │
│  │  Rootfs      │  ───▶  根文件系统                                  │
│  │  (根文件系统) │       - busybox / Buildroot / Debian              │
│  │              │       - 启动 init 进程                             │
│  │              │       - 运行用户应用                               │
│  └──────────────┘                                                    │
│                                                                       │
│  支持的启动介质: eMMC / SD 卡 / NFS 网络根文件系统                     │
│                                                                       │
└──────────────────────────────────────────────────────────────────────┘

2.2 组件来源与版本

组件 来源分支 版本策略 状态
U-Boot uboot-imx (NXP fork) 跟随 NXP 官方 BSP 当前
Linux Kernel linux-imx (NXP fork) 跟随 NXP 官方 BSP 当前
Linux Kernel mainline (Torvalds) 实验性支持 规划中
BusyBox mirror/busybox 官方稳定版 当前

2.3 存储介质布局

┌─────────────────────────────────────────────────────────────┐
│                    eMMC/SD 卡分区布局                        │
├─────────────────────────────────────────────────────────────┤
│                                                              │
│  分区 0: Boot Partition (可启动硬件分区)                      │
│  ┌──────────────────────────────────────────┐               │
│  │  SPL / MLO                               │               │
│  │  (必需位于固定位置,ROM Code 可寻址)      │               │
│  └──────────────────────────────────────────┘               │
│                                                              │
│  分区 1: U-Boot 分区                                          │
│  ┌──────────────────────────────────────────┐               │
│  │  u-boot.img / u-boot.bin                 │               │
│  │  (完整 U-Boot 镜像)                      │               │
│  └──────────────────────────────────────────┘               │
│                                                              │
│  分区 2: 内核与设备树                                         │
│  ┌──────────────────────────────────────────┐               │
│  │  zImage (压缩内核镜像)                   │               │
│  │  *.dtb (设备树二进制文件)                │               │
│  └──────────────────────────────────────────┘               │
│                                                              │
│  分区 3: 根文件系统                                           │
│  ┌──────────────────────────────────────────┐               │
│  │  Rootfs (ext4/squashfs/ubifs)            │               │
│  │  - busybox                               │               │
│  │  - Buildroot                             │               │
│  │  - 或 Debian/Ubuntu                      │               │
│  └──────────────────────────────────────────┘               │
│                                                              │
│  可选: 数据分区                                               │
│  ┌──────────────────────────────────────────┐               │
│  │  用户数据 / 应用数据                     │               │
│  └──────────────────────────────────────────┘               │
│                                                              │
└─────────────────────────────────────────────────────────────┘

3. 双轨策略架构

3.1 策略总览

IMX-Forge 采用双轨并行策略,平衡稳定性与前沿性:

┌───────────────────────────────────────────────────────────────────┐
│                         双轨策略时间轴                             │
├───────────────────────────────────────────────────────────────────┤
│                                                                    │
│   ┌─────────────────────────────────────────────────────────┐     │
│   │  v0.x  [当前阶段]                                        │     │
│   │  ┌────────────────────────────────────────────────┐     │     │
│   │  │ linux-imx 轨道                                  │     │     │
│   │  │ - NXP BSP 6.12.3 基线                           │     │     │
│   │  │ - 完整驱动支持                                  │     │     │
│   │  │ - 稳定性优先                                    │     │     │
│   │  └────────────────────────────────────────────────┘     │     │
│   │                                                           │     │
│   │  ┌────────────────────────────────────────────────┐     │     │
│   │  │ mainline 轨道                                   │     │     │
│   │  │ - 实验性探索                                    │     │     │
│   │  │ - 差异分析记录                                  │     │     │
│   │  └────────────────────────────────────────────────┘     │     │
│   └─────────────────────────────────────────────────────────┘     │
│                              │                                     │
│                              │ 补丁向上游提交 / 移植                │
│                              ▼                                     │
│   ┌─────────────────────────────────────────────────────────┐     │
│   │  v1.x  [中期目标]                                        │     │
│   │  ┌────────────────────────────────────────────────┐     │     │
│   │  │ linux-imx 轨道                                  │     │     │
│   │  │ - 继续维护                                      │     │     │
│   │  │ - 生产环境推荐                                  │     │     │
│   │  └────────────────────────────────────────────────┘     │     │
│   │                                                           │     │
│   │  ┌────────────────────────────────────────────────┐     │     │
│   │  │ mainline 轨道                                   │     │     │
│   │  │ + 基础功能验证                                  │     │     │
│   │  │ + 关键驱动移植                                  │     │     │
│   │  └────────────────────────────────────────────────┘     │     │
│   └─────────────────────────────────────────────────────────┘     │
│                              │                                     │
│                              │ mainline 趋于稳定                   │
│                              ▼                                     │
│   ┌─────────────────────────────────────────────────────────┐     │
│   │  v2.x  [长期目标]                                        │     │
│   │  ┌────────────────────────────────────────────────┐     │     │
│   │  │ linux-imx 轨道                                  │     │     │
│   │  │ - 兼容性备选                                    │     │     │
│   │  │ - 向后兼容支持                                  │     │     │
│   │  └────────────────────────────────────────────────┘     │     │
│   │                                                           │     │
│   │  ┌────────────────────────────────────────────────┐     │     │
│   │  │ mainline 轨道                                   │     │     │
│   │  │ + 成为推荐轨道                                  │     │     │
│   │  │ + 全功能验证通过                                │     │     │
│   │  │ + 补丁向上游合并                                │     │     │
│   │  └────────────────────────────────────────────────┘     │     │
│   └─────────────────────────────────────────────────────────┘     │
│                                                                    │
└───────────────────────────────────────────────────────────────────┘

3.2 轨道对比

特性 linux-imx 轨道 mainline 轨道
基线来源 NXP 官方 BSP Torvalds 主线
驱动完整性 完整支持 i.MX 系列 需要适配验证
更新频率 跟随 NXP 发布 跟随内核主线
稳定性 生产可用 实验性
补丁标签 [linux-imx] [mainline]
存储位置 patches/linux-imx/ patches/linux-mainline/
上游策略 NXP 特有补丁本地化 积极向上游合并

3.3 补丁目录结构

patches/
├── linux-imx/              # NXP BSP 轨道补丁
│   ├── series              # 补丁应用序列文件
│   ├── 0001-xxx.patch      # [linux-imx] 标签补丁
│   └── ...
├── linux-mainline/         # 主线内核轨道补丁
│   ├── series              # 补丁应用序列文件 (未来)
│   └── ...
├── uboot-imx/              # U-Boot NXP fork 补丁
│   └── charlies_board.patch
├── uboot/                  # U-Boot mainline 补丁 (未来)
└── busybox/                # BusyBox 补丁

4. 模块依赖关系

4.1 依赖关系图

┌─────────────────────────────────────────────────────────────────────┐
│                         模块依赖关系图                               │
├─────────────────────────────────────────────────────────────────────┤
│                                                                      │
│  scripts/ (构建系统)                                                 │
│  │                                                                   │
│  ├── lib/                                                           │
│  │   └── logging.sh  ◀─────── 被所有构建脚本引用                     │
│  │                                                                   │
│  ├── build_helper/                                                  │
│  │   ├── build-linux.sh  ────▶ third_party/linux-imx/              │
│  │   ├── build-uboot.sh   ────▶ third_party/uboot-imx/             │
│  │   └── build-busybox.sh ────▶ third_party/busybox/               │
│  │                                                                   │
│  ├── patch_maker.sh  ────▶ 生成 patches/*.patch                     │
│  │                                                                   │
│  ├── release_builder/  ────▶ 打包输出产物                            │
│  │                                                                   │
│  ├── third_party_install/                                           │
│  │   └── install_libc.sh  ────▶ rootfs/nfs/                         │
│  │                                                                   │
│  └── varified_rootfs_ok.sh  ────▶ rootfs/nfs/                       │
│                                   │                                   │
│                                   ▼                                   │
│  driver/device_tree/alpha-board/                                     │
│  │   ├── linux/  ────▶ third_party/linux-imx/arch/arm/boot/dts/     │
│  │   └── uboot/  ────▶ third_party/uboot-imx/arch/arm/dts/          │
│                                                                      │
│  patches/                                                            │
│  │   ├── linux-imx/  ────▶ third_party/linux-imx/                   │
│  │   ├── uboot-imx/   ────▶ third_party/uboot-imx/                  │
│  │   └── busybox/     ────▶ third_party/busybox/                    │
│                                                                      │
│  out/  ◀─── 所有构建脚本的输出目录                                    │
│                                                                      │
└─────────────────────────────────────────────────────────────────────┘

4.2 脚本调用链

┌─────────────────────────────────────────────────────────────────────┐
│                        构建流程调用链                                │
├─────────────────────────────────────────────────────────────────────┤
│                                                                      │
│  用户命令                                                            │
│    │                                                                 │
│    ▼                                                                 │
│  ┌─────────────┐                                                    │
│  │ 构建入口脚本 │  (未来实现)                                        │
│  │ scripts/    │                                                    │
│  │ build.sh    │                                                    │
│  └──────┬──────┘                                                    │
│         │                                                            │
│         ├──▶ scripts/build_helper/build-linux.sh                    │
│         │        │                                                  │
│         │        ├── 1. source scripts/lib/logging.sh               │
│         │        ├── 2. check_host_dependencies()                   │
│         │        ├── 3. check_toolchain()                           │
│         │        ├── 4. apply patches/linux-imx/*.patch             │
│         │        ├── 5. do_configure()                              │
│         │        └── 6. do_build()                                  │
│         │                                                           │
│         ├──▶ scripts/build_helper/build-uboot.sh                     │
│         │        │                                                  │
│         │        └── (类似流程)                                     │
│         │                                                           │
│         └──▶ scripts/build_helper/build-busybox.sh                  │
│                  │                                                  │
│                  └── (类似流程)                                     │
│                                                                      │
│  Rootfs 构建                                                         │
│    │                                                                 │
│    ▼                                                                 │
│  scripts/varified_rootfs_ok.sh                                       │
│        │                                                             │
│        ├── check_directory_safe()                                   │
│        ├── check_required_dirs()                                    │
│        ├── create_rootfs_structure()                                │
│        ├── create_fstab()                                           │
│        ├── create_rcs()                                             │
│        ├── create_inittab()                                         │
│        └── run_third_party_installs()                               │
│               │                                                     │
│               └── scripts/third_party_install/*.sh                   │
│                                                                      │
└─────────────────────────────────────────────────────────────────────┘

4.3 Git Submodule 管理

.gitmodules 配置:
┌─────────────────────────────────────────────────────────────────────┐
│  [submodule "third_party/uboot-imx"]                                │
│      path = third_party/uboot-imx                                   │
│      url = https://github.com/nxp-imx/uboot-imx.git                 │
│      ignore = dirty                                                 │
│                                                                      │
│  [submodule "third_party/linux-imx"]                                │
│      path = third_party/linux-imx                                   │
│      url = https://github.com/nxp-imx/linux-imx.git                 │
│      ignore = dirty                                                 │
│                                                                      │
│  [submodule "third_party/busybox"]                                  │
│      path = third_party/busybox                                     │
│      url = https://github.com/mirror/busybox.git                    │
│                                                                      │
└─────────────────────────────────────────────────────────────────────┘

5. 数据流向说明

5.1 源码到补丁的流向

┌─────────────────────────────────────────────────────────────────────┐
│                    源码修改 → 补丁 → 构建流程                        │
├─────────────────────────────────────────────────────────────────────┤
│                                                                      │
│  1. 源码修改阶段                                                    │
│     ┌────────────────────────────────────┐                          │
│     │ third_party/linux-imx/             │                          │
│     │   └── drivers/xxx/modified_file.c  │ ← 直接修改                │
│     └────────────────────────────────────┘                          │
│                      │                                              │
│                      ▼                                              │
│     ┌────────────────────────────────────┐                          │
│     │ Git 工作区                         │                          │
│     │   - Modified files                 │                          │
│     │   - New commits                    │                          │
│     └────────────────────────────────────┘                          │
│                                                                      │
│  2. 补丁生成阶段                                                    │
│                      │                                              │
│                      ▼                                              │
│     ┌────────────────────────────────────┐                          │
│     │ scripts/patch_maker.sh             │                          │
│     │   --submodule_path=linux-imx       │                          │
│     └────────────────────────────────────┘                          │
│                      │                                              │
│                      ▼                                              │
│     ┌────────────────────────────────────┐                          │
│     │ patches/linux-imx/                 │                          │
│     │   └── new-changes.patch            │ ← 生成补丁              │
│     └────────────────────────────────────┘                          │
│                                                                      │
│  3. 补丁应用阶段                                                    │
│                      │                                              │
│                      ▼                                              │
│     ┌────────────────────────────────────┐                          │
│     │ scripts/build_helper/build-linux.sh │                          │
│     │   quilt import / patch -p1         │ ← 应用补丁              │
│     └────────────────────────────────────┘                          │
│                      │                                              │
│                      ▼                                              │
│     ┌────────────────────────────────────�┐                          │
│     │ out/linux/                         │                          │
│     │   ├── zImage                       │ ← 编译输出              │
│     │   ├── vmlinux                      │                          │
│     │   └── *.dtb                        │                          │
│     └────────────────────────────────────┘                          │
│                                                                      │
└─────────────────────────────────────────────────────────────────────┘

5.2 配置文件影响构建的流向

┌─────────────────────────────────────────────────────────────────────┐
│                     配置文件 → 构建参数流程                          │
├─────────────────────────────────────────────────────────────────────┤
│                                                                      │
│  板级配置 (未来)                                                     │
│  ┌────────────────────────────────────┐                             │
│  │ boards/alpha/BOARD.yaml            │                             │
│  │   name: "Alpha Board"              │                             │
│  │   defconfig: "imx_aes_defconfig"   │ ──────┐                    │
│  │   dtb: "imx6ull-alpha.dtb"         │       │                    │
│  └────────────────────────────────────┘       │                    │
│                                            解析                    │
│  Defconfig                                 │                       │
│  ┌────────────────────────────────────┐     │                      │
│  │ third_party/linux-imx/             │     │                      │
│  │   arch/arm/configs/               │     │                      │
│  │   imx_aes_defconfig                │ ←───┘                      │
│  └────────────────────────────────────┘                             │
│                      │                                              │
│                      ▼                                              │
│  ┌────────────────────────────────────┐                             │
│  │ make imx_aes_defconfig             │                             │
│  │   └──▶ .config                     │                             │
│  └────────────────────────────────────┘                             │
│                      │                                              │
│                      ▼                                              │
│  ┌────────────────────────────────────┐                             │
│  │ make -jN                           │                             │
│  │   └──▶ 构建输出                    │                             │
│  └────────────────────────────────────┘                             │
│                                                                      │
│  设备树配置                                                           │
│  ┌────────────────────────────────────┐                             │
│  │ driver/device_tree/alpha-board/    │                             │
│  │   linux/imx6ull-alpha.dts          │ ──────┐                    │
│  └────────────────────────────────────┘       │                    │
│                                            复制/编译                │
│  ┌────────────────────────────────────┐     │                      │
│  │ third_party/linux-imx/             │     │                      │
│  │   arch/arm/boot/dts/               │ ←───┘                      │
│  │   imx6ull-alpha.dts                │                            │
│  └────────────────────────────────────┘                             │
│                      │                                              │
│                      ▼                                              │
│  ┌────────────────────────────────────┐                             │
│  │ dtc -I dts -O dtb                  │                             │
│  │   └──▶ imx6ull-alpha.dtb           │                             │
│  └────────────────────────────────────┘                             │
│                                                                      │
└─────────────────────────────────────────────────────────────────────┘

5.3 Rootfs 构建流向

┌─────────────────────────────────────────────────────────────────────┐
│                      Rootfs 构建数据流                               │
├─────────────────────────────────────────────────────────────────────┤
│                                                                      │
│  BusyBox 编译                                                        │
│  ┌────────────────────────────────────┐                             │
│  │ third_party/busybox/               │                             │
│  └────────────────────────────────────┘                             │
│                      │                                              │
│                      ▼                                              │
│  ┌────────────────────────────────────┐                             │
│  │ scripts/build_helper/              │                             │
│  │   build-busybox.sh                 │                             │
│  └────────────────────────────────────┘                             │
│                      │                                              │
│                      ▼                                              │
│  ┌────────────────────────────────────┐                             │
│  │ out/busybox/busybox                │                             │
│  └────────────────────────────────────┘                             │
│                      │                                              │
│                      ▼                                              │
│  ┌────────────────────────────────────┐                             │
│  │ rootfs/nfs/bin/busybox             │ ← 复制到 rootfs            │
│  └────────────────────────────────────┘                             │
│                                                                      │
│  Rootfs 初始化                                                       │
│  ┌────────────────────────────────────┐                             │
│  │ scripts/varified_rootfs_ok.sh      │                             │
│  └────────────────────────────────────┘                             │
│                      │                                              │
│                      ├──▶ 创建目录结构                               │
│                      ├──▶ 生成配置文件                               │
│                      │    - etc/fstab                               │
│                      │    - etc/inittab                             │
│                      │    - etc/init.d/rcS                          │
│                      │                                              │
│                      └──▶ 运行第三方安装脚本                         │
│                           scripts/third_party_install/*.sh           │
│                                                                      │
│  最终 Rootfs 结构                                                    │
│  rootfs/nfs/                                                         │
│  ├── bin/busybox                                                     │
│  ├── lib/                                                           │
│  ├── etc/fstab                                                      │
│  ├── etc/inittab                                                    │
│  ├── etc/init.d/rcS                                                 │
│  └── linuxrc -> bin/busybox                                          │
│                                                                      │
└─────────────────────────────────────────────────────────────────────┘

6. 目录结构说明

6.1 完整目录树

imx-forge/
├── .devcontainer/              # VS Code Dev Container 配置
├── .git/                       # Git 仓库
│   └── modules/                # Submodule 检出位置
├── .gitmodules                 # Submodule 配置文件
├── document/                   # 项目文档
│   ├── architecture/           # 架构文档 (本目录)
│   │   └── SYSTEM_ARCHITECTURE.md
│   ├── logo/                   # 项目 Logo 资源
│   ├── todo/                   # 待办事项文档
│   └── tutorial/               # 教程文档
│       ├── kernel/             # 内核相关教程
│       ├── practical/          # 实践教程
│       ├── rootfs/             # Rootfs 教程
│       ├── start/              # 入门教程
│       └── uboot/              # U-Boot 教程
├── driver/                     # 驱动模块
│   └── device_tree/            # 设备树文件
│       └── alpha-board/        # 阿尔法板设备树
│           ├── linux/          # 内核设备树
│           └── uboot/          # U-Boot 设备树
├── out/                        # 构建输出目录
│   ├── busybox/                # BusyBox 构建产物
│   ├── linux/                  # Linux 内核构建产物
│   └── uboot/                  # U-Boot 构建产物
├── patches/                    # 补丁管理
│   ├── busybox/                # BusyBox 补丁
│   ├── linux-imx/              # linux-imx 轨道补丁
│   │   └── linux-imx-patch_test-20260314.patch
│   ├── linux-mainline/         # mainline 轨道补丁 (未来)
│   ├── uboot/                  # U-Boot mainline 补丁 (未来)
│   └── uboot-imx/              # U-Boot NXP fork 补丁
│       └── charlies_board.patch
├── rootfs/                     # 根文件系统
│   ├── nfs/                    # NFS Rootfs
│   │   ├── bin/                # 可执行文件
│   │   ├── dev/                # 设备文件
│   │   ├── etc/                # 配置文件
│   │   │   ├── fstab           # 文件系统挂载表
│   │   │   ├── init.d/         # 初始化脚本
│   │   │   │   └── rcS         # 系统初始化脚本
│   │   │   └── inittab         # init 配置
│   │   ├── home/               # 用户目录
│   │   ├── lib/                # 库文件
│   │   ├── mnt/                # 挂载点
│   │   ├── proc/               # proc 文件系统
│   │   ├── root/               # root 用户目录
│   │   ├── sbin/               # 系统可执行文件
│   │   ├── sys/                # sys 文件系统
│   │   ├── tmp/                # 临时文件
│   │   └── usr/                # 用户程序
│   └── src/                    # Rootfs 源文件
├── scripts/                    # 构建和工具脚本
│   ├── build_helper/           # 构建辅助脚本
│   │   ├── build-busybox.sh    # BusyBox 构建脚本
│   │   ├── build-linux.sh      # Linux 内核构建脚本
│   │   └── build-uboot.sh      # U-Boot 构建脚本
│   ├── lib/                    # 公共库
│   │   └── logging.sh          # 日志工具库
│   ├── logo_helper/            # Logo 生成工具
│   ├── patch_maker.sh          # 补丁生成脚本
│   ├── release_builder/        # 发布构建脚本
│   ├── server_helper/          # 服务器辅助脚本
│   ├── third_party_install/    # 第三方依赖安装
│   │   ├── README.md           # 安装脚本说明
│   │   └── install_libc.sh     # libc 安装脚本
│   └── varified_rootfs_ok.sh   # Rootfs 验证脚本
├── third_party/                # 第三方源码 (Submodule)
│   ├── busybox/                # BusyBox 源码
│   ├── linux-imx/              # NXP Linux 内核 fork
│   └── uboot-imx/              # NXP U-Boot fork
├── tools/                      # 工具集合
│   └── third_party/            # 第三方工具
├── LICENSE                     # 开源协议
├── README.md                   # 项目说明
└── roadmap.md                  # 项目路线图

6.2 目录功能说明表

目录路径 用途 维护策略
scripts/ 构建系统核心 项目维护,版本控制
patches/ 补丁管理 项目维护,版本控制
third_party/ 第三方源码 Submodule,独立更新
out/ 构建输出 .gitignore,本地生成
rootfs/ 根文件系统 框架版本控制,内容由脚本生成
driver/ 自研驱动 项目维护,版本控制
document/ 项目文档 项目维护,版本控制
tools/ 工具集合 项目维护,版本控制

7. 设计决策记录

7.1 为什么选择 format-patch + series

背景

嵌入式开发中,对厂商 BSP 的修改管理是一个挑战。直接修改源码无法追踪、无法复用、难以贡献回上游。

决策

采用 Git format-patch 生成的标准补丁格式,配合 series 文件管理应用顺序。

理由

优势 说明
标准化 Git 原生支持,无需额外工具
可追溯 每个补丁包含完整的提交信息和作者信息
可贡献 补丁格式与上游内核贡献格式一致
可复用 补丁可以在不同版本间尝试应用
可审查 纯文本格式,便于代码审查
灵活性 通过 series 文件控制应用顺序和条件

实现

# 生成补丁
git format-patch -o patches/linux-imx/ base_commit..HEAD

# 应用补丁
quilt import patches/linux-imx/*.patch
quilt push -a

# 或使用 patch 命令
cat patches/linux-imx/series | while read patch; do
    patch -p1 < "patches/linux-imx/$patch"
done

7.2 为什么采用双轨策略

背景

  • NXP 提供的 linux-imx 分支包含大量针对 i.MX 系列的优化和驱动
  • 主线内核 (mainline) 代表 Linux 的发展方向,长期维护更佳
  • 直接切换到 mainline 需要大量适配工作,存在风险

决策

采用双轨并行策略:以 linux-imx 为当前稳定轨道,同时探索 mainline 轨道。

理由

稳定性 (linux-imx) 前瞻性 (mainline)
NXP 官方支持 代表 Linux 未来
驱动完整 代码质量更高
立即可用 长期维护更佳
适合生产环境 适合学习和贡献

长期目标

  1. v0.x: 完善 linux-imx 轨道,确保基础功能稳定
  2. v1.x: 开始 mainline 探索,记录差异和移植经验
  3. v2.x: mainline 功能完整,成为推荐轨道
  4. 未来: 积极向上游贡献补丁,减少本地修改

7.3 为什么使用 Git Submodule

背景

项目需要集成多个第三方大型代码库: - linux-imx (~1GB+) - uboot-imx (~500MB+) - busybox (~50MB+)

决策选项对比

方案 优点 缺点
直接复制 简单 体积大,无法更新
Git Submodule 独立更新,精确版本 学习曲线
下载脚本 灵活 无版本锁定
Vendor 分支 完全控制 合并复杂

选择 Git Submodule 的理由

  1. 精确版本控制: 通过 commit hash 锁定第三方库版本
  2. 独立更新: 第三方库的更新与主项目分离
  3. 节省空间: Submodule 使用对象共享,节省存储
  4. 社区标准: 广泛使用的依赖管理方式
  5. 灵活性: 可以随时切换到任意 commit 或分支

配置策略

[submodule "third_party/linux-imx"]
    path = third_party/linux-imx
    url = https://github.com/nxp-imx/linux-imx.git
    ignore = dirty  # 忽略工作区修改,仅追踪提交

7.4 为什么输出目录独立

背景

构建产物体积大,且大部分是二进制文件,不应纳入版本控制。

决策

使用独立的 out/ 目录存放所有构建输出,并在 .gitignore 中排除。

理由

  1. 清洁仓库: 源码与产物分离
  2. 可重建: 任何时候都可以从源码重建
  3. 灵活性: 可以随时删除 out/ 释放空间
  4. 并行构建: 不同组件输出到不同子目录,互不干扰

目录结构

out/
├── busybox/    # BusyBox 构建输出
├── linux/      # Linux 内核构建输出
└── uboot/      # U-Boot 构建输出

7.5 为什么 Rootfs 采用脚本生成

背景

Rootfs 需要包含库文件、配置文件、初始化脚本等,手动维护容易出错。

决策

通过 scripts/varified_rootfs_ok.sh 脚本自动生成 Rootfs 结构和配置。

理由

  1. 可重现: 脚本确保每次生成的 Rootfs 一致
  2. 可验证: 脚本内置验证逻辑
  3. 可扩展: 通过第三方安装脚本机制扩展功能
  4. 安全性: 内置目录安全检查,防止误操作系统根目录

扩展机制

# scripts/third_party_install/ 目录下的所有 .sh 脚本
# 会在 Rootfs 构建时自动执行,支持:
# - 安装额外的库文件
# - 添加自定义配置
# - 执行特定的初始化操作

8. 构建系统架构

8.1 构建系统组件图

┌─────────────────────────────────────────────────────────────────────┐
│                        构建系统架构                                  │
├─────────────────────────────────────────────────────────────────────┤
│                                                                      │
│  用户接口层                                                          │
│  ┌──────────────────────────────────────────────────────────────┐  │
│  │  scripts/build.sh (未来实现)                                  │  │
│  │    --board=alpha --rootfs=busybox --clean                    │  │
│  └──────────────────────────────────────────────────────────────┘  │
│                           │                                          │
│                           ▼                                          │
│  构建辅助层                                                        │
│  ┌──────────────────────────────────────────────────────────────┐  │
│  │  scripts/build_helper/                                       │  │
│  │  ┌─────────────┐  ┌─────────────┐  ┌─────────────────────┐  │  │
│  │  │build-linux  │  │build-uboot  │  │  build-busybox      │  │  │
│  │  │    .sh      │  │    .sh      │  │       .sh           │  │  │
│  │  └─────────────┘  └─────────────┘  └─────────────────────┘  │  │
│  └──────────────────────────────────────────────────────────────┘  │
│                           │                                          │
│                           ▼                                          │
│  公共服务层                                                        │
│  ┌──────────────────────────────────────────────────────────────┐  │
│  │  scripts/lib/                                                │  │
│  │  ┌────────────────────────────────────────────────────────┐ │  │
│  │  │ logging.sh - 统一日志接口                               │ │  │
│  │  │   - log_info(), log_error(), log_warn(), log_debug()   │ │  │
│  │  └────────────────────────────────────────────────────────┘ │  │
│  └──────────────────────────────────────────────────────────────┘  │
│                           │                                          │
│                           ▼                                          │
│  工具支持层                                                        │
│  ┌──────────────────────────────────────────────────────────────┐  │
│  │  scripts/patch_maker.sh - 补丁生成工具                        │  │
│  │  scripts/release_builder/ - 发布打包工具                      │  │
│  │  scripts/third_party_install/ - 依赖安装脚本                  │  │
│  └──────────────────────────────────────────────────────────────┘  │
│                                                                      │
└─────────────────────────────────────────────────────────────────────┘

8.2 构建脚本依赖图

┌─────────────────────────────────────────────────────────────────────┐
│                       脚本依赖关系图                                 │
├─────────────────────────────────────────────────────────────────────┤
│                                                                      │
│  build-linux.sh                                                     │
│      │                                                               │
│      ├──▶ source scripts/lib/logging.sh                             │
│      │                                                               │
│      ├──▶ check_host_dependencies()                                 │
│      │        │                                                     │
│      │        ├── check_cmd (gcc, make, bc, bison, flex...)        │
│      │        ├── check_dpkg (libssl-dev, libncurses-dev...)        │
│      │        └── check_python_module                               │
│      │                                                               │
│      ├──▶ check_toolchain()                                         │
│      │        │                                                     │
│      │        └── ${CROSS_COMPILE}gcc, objcopy, objdump...          │
│      │                                                               │
│      ├──▶ apply patches/linux-imx/*.patch                           │
│      │                                                               │
│      ├──▶ do_configure()                                            │
│      │        │                                                     │
│      │        └── make ${DEFCONFIG}                                 │
│      │                                                               │
│      └──▶ do_build()                                                │
│               │                                                     │
│               └── make -j${NPROC}                                   │
│                                                                      │
└─────────────────────────────────────────────────────────────────────┘

8.3 环境变量与配置

┌─────────────────────────────────────────────────────────────────────┐
│                      配置变量说明                                    │
├─────────────────────────────────────────────────────────────────────┤
│                                                                      │
│  全局配置 (可在脚本中覆盖)                                           │
│  ┌──────────────────────────────────────────────────────────────┐  │
│  │  ARCH=arm                                                    │  │
│  │  CROSS_COMPILE=arm-none-linux-gnueabihf-                     │  │
│  │  NPROC=$(nproc)                                              │  │
│  │  PROJECT_ROOT=$(自动检测)                                     │  │
│  └──────────────────────────────────────────────────────────────┘  │
│                                                                      │
│  Linux 构建配置                                                      │
│  ┌──────────────────────────────────────────────────────────────┐  │
│  │  LINUX_SRC_DIR=${PROJECT_ROOT}/third_party/linux-imx         │  │
│  │  OUTPUT_DIR=${PROJECT_ROOT}/out/linux                        │  │
│  │  DEFCONFIG=imx_aes_defconfig                                 │  │
│  └──────────────────────────────────────────────────────────────┘  │
│                                                                      │
│  U-Boot 构建配置                                                     │
│  ┌──────────────────────────────────────────────────────────────┐  │
│  │  UBOOT_SRC_DIR=${PROJECT_ROOT}/third_party/uboot-imx         │  │
│  │  OUTPUT_DIR=${PROJECT_ROOT}/out/uboot                        │  │
│  │  DEFCONFIG=...                                               │  │
│  └──────────────────────────────────────────────────────────────┘  │
│                                                                      │
│  Rootfs 配置                                                         │
│  ┌──────────────────────────────────────────────────────────────┐  │
│  │  ROOTFS_DIR=${PROJECT_ROOT}/rootfs/nfs                       │  │
│  │  CROSS_COMPILE=arm-none-linux-gnueabihf-                     │  │
│  └──────────────────────────────────────────────────────────────┘  │
│                                                                      │
└─────────────────────────────────────────────────────────────────────┘

9. 扩展机制

9.1 板卡接入扩展

┌─────────────────────────────────────────────────────────────────────┐
│                       新板卡接入流程                                 │
├─────────────────────────────────────────────────────────────────────┤
│                                                                      │
│  1. 创建板卡目录                                                    │
│  ┌──────────────────────────────────────────────────────────────┐  │
│  │  boards/custom-v1/                                           │  │
│  │    ├── BOARD.yaml          # 板卡元数据                      │  │
│  │    ├── configs/            # 板级配置                         │  │
│  │    │   └── kernel_defconfig                                   │  │
│  │    └── dts/                # 设备树源文件                     │  │
│  │        └── imx6ull-custom.dts                                 │  │
│  └──────────────────────────────────────────────────────────────┘  │
│                                                                      │
│  2. 配置板卡信息 (未来实现)                                          │
│  ┌──────────────────────────────────────────────────────────────┐  │
│  │  BOARD.yaml 内容:                                            │  │
│  │    name: "Custom Board v1"                                   │  │
│  │    chip: "i.MX6ULL"                                          │  │
│  │    storage: ["eMMC", "SD"]                                   │  │
│  │    defconfig: "custom_defconfig"                             │  │
│  │    dtb: "imx6ull-custom.dtb"                                 │  │
│  └──────────────────────────────────────────────────────────────┘  │
│                                                                      │
│  3. 构建命令 (未来实现)                                              │
│     scripts/build.sh --board=custom-v1                              │
│                                                                      │
└─────────────────────────────────────────────────────────────────────┘

9.2 Rootfs 扩展机制

┌─────────────────────────────────────────────────────────────────────┐
│                   Rootfs 第三方安装脚本                              │
├─────────────────────────────────────────────────────────────────────┤
│                                                                      │
│  scripts/third_party_install/                                       │
│  │                                                                   │
│  ├── 10-install-libc.sh    # 安装 libc 库                          │
│  ├── 20-install-ssl.sh     # 安装 OpenSSL 库                       │
│  ├── 30-install-custom.sh  # 安装自定义库                          │
│  └── README.md             # 说明文档                              │
│                      │                                              │
│                      ▼                                              │
│  执行流程:                                                           │
│  1. 按文件名字母顺序执行                                             │
│  2. 导出环境变量: ROOTFS_DIR, PROJECT_ROOT                           │
│  3. 每个脚本独立运行,失败不影响其他脚本 (可选策略)                   │
│                                                                      │
│  脚本模板:                                                           │
│  ┌──────────────────────────────────────────────────────────────┐  │
│  │  #!/bin/bash                                                 │  │
│  │  : "${ROOTFS_DIR:=../../rootfs/nfs}"                         │  │
│  │  set -e                                                      │  │
│  │  # 安装逻辑...                                               │  │
│  └──────────────────────────────────────────────────────────────┘  │
│                                                                      │
└─────────────────────────────────────────────────────────────────────┘

9.3 驱动模块扩展

┌─────────────────────────────────────────────────────────────────────┐
│                       驱动模块组织                                   │
├─────────────────────────────────────────────────────────────────────┤
│                                                                      │
│  driver/                                                             │
│  │                                                                   │
│  ├── device_tree/           # 设备树 overlay                        │
│  │   └── alpha-board/                                              │
│  │       ├── linux/                                                 │
│  │       │   └── imx6ull-alpha.dts                                  │
│  │       └── uboot/                                                 │
│  │           └── imx6ull-alpha-u-boot.dts                            │
│  │                                                                   │
│  └── modules/               # 内核模块 (未来)                        │
│      ├── rs485-control/                                             │
│      │   ├── rs485_control.c                                        │
│      │   ├── Kconfig                                               │
│      │   └── Makefile                                              │
│      └── README.md                                                 │
│                                                                      │
└─────────────────────────────────────────────────────────────────────┘

附录

A. 快速参考

A.1 常用目录路径

路径 说明
third_party/linux-imx Linux 内核源码
third_party/uboot-imx U-Boot 源码
third_party/busybox BusyBox 源码
patches/linux-imx Linux 补丁
patches/uboot-imx U-Boot 补丁
out/linux Linux 构建输出
out/uboot U-Boot 构建输出
out/busybox BusyBox 构建输出
rootfs/nfs NFS Rootfs
driver/device_tree 设备树文件

A.2 常用脚本命令

# 构建 Linux 内核
scripts/build_helper/build-linux.sh

# 构建 U-Boot
scripts/build_helper/build-uboot.sh

# 构建 BusyBox
scripts/build_helper/build-busybox.sh

# 验证和完成 Rootfs
scripts/varified_rootfs_ok.sh

# 生成补丁
scripts/patch_maker.sh --submodule_path=linux-imx

# 快速构建 (跳过 distclean)
scripts/build_helper/build-linux.sh --fast-build

B. 版本控制规范

B.1 补丁命名规范

格式: [轨道类型] 简短描述

轨道类型:
  - [linux-imx]   NXP BSP 轨道补丁
  - [mainline]    主线内核轨道补丁
  - [uboot-imx]   U-Boot NXP fork 补丁
  - [uboot-main]  U-Boot 主线补丁

示例:
  [linux-imx] drivers: add alpha board support
  [mainline] net: fec: add imx6ull support
  [uboot-imx] board: enable alpha board

B.2 Commit 规范

格式: <类型>: <简短描述>

类型:
  - feat:     新功能
  - fix:      Bug 修复
  - docs:     文档更新
  - style:    代码格式
  - refactor: 代码重构
  - test:     测试相关
  - chore:    构建/工具相关

示例:
  feat(build): add linux build script
  fix(patches): correct series file order
  docs(readme): update board support table

C. 故障排查

C.1 常见问题

问题 可能原因 解决方案
编译失败 缺少依赖 运行 sudo apt install ...
补丁应用失败 版本不匹配 检查 submodule 版本
交叉编译错误 工具链未找到 检查 PATH 环境变量
Rootfs 启动失败 配置文件缺失 运行 varified_rootfs_ok.sh

C.2 日志级别

# 启用调试输出
DEBUG=1 scripts/build_helper/build-linux.sh

# 查看构建日志
cat out/linux/build.log

# 查看补丁应用日志
quilt push -v

文档修订历史

版本 日期 作者 变更说明
v1.0 2026-03-15 IMX-Forge 初始版本

联系方式


**IMX-Forge - 让 i.MX6ULL 开发更简单**