# base_image_build_scripts **Repository Path**: zzuos/base_image_build_scripts ## Basic Information - **Project Name**: base_image_build_scripts - **Description**: 创建base_image.img的脚本 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2025-11-20 - **Last Updated**: 2026-09-10 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 嵌入式 Linux ARM64 根文件系统构建工具 为嵌入式 ARM64 设备定制根文件系统镜像,支持 **Ascend(华为昇腾 NPU)** 与 **Rockchip** 两条产品线,以及 **Ubuntu** / **openEuler** 两种基础 OS。通过 chroot + qemu-aarch64-static 交叉构建,模块化配置,输出 cpio+gzip 镜像。 原 `Ascend` 分支的功能已统一到 `master`,后续请使用 `master` 分支构建和维护。 ## 环境要求 - Ubuntu 22.04 x86_64 宿主机(VMware 虚拟机,不要使用云服务器) - root 权限 - 能访问软件源及实验室内网文件服务;默认配置使用 `192.168.167.145:8881`,构建前请确认可达,或修改配置中的下载 URL - 足够的磁盘空间,用于下载缓存、展开的根文件系统和输出镜像 ## 快速开始 ```bash git clone --branch master https://gitee.com/zzuos/base_image_build_scripts.git cd base_image_build_scripts sudo ./build.sh ``` 运行后按编号选择 `configs/` 中的构建配置,脚本自动完成下载、安装、打包,输出镜像到 `IMAGES/` 目录。请在仓库根目录执行命令。 ## 构建流程 1. **配置选择** — 交互式菜单选择构建配置(列出每项包含的组件) 2. **获取基础镜像** — Ascend 模式下载预置 rootfs.img + CANN 组件(cpio.gz 解压);其他下载 ubuntu-base tar.gz 解压 3. **准备构建环境** — 挂载虚拟文件系统(/proc /sys /dev /dev/pts) 4. **配置软件源** — openEuler 配清华 22.03-LTS-SP4 dnf 源;Ubuntu 自动检测代号配清华 ubuntu-ports apt 源(HTTP) 5. **chroot 安装** — 通过 qemu-aarch64-static 进入 ARM64 环境,统一安装 Python 3.10.12,再按配置顺序批量安装组件 6. **清理打包** — 清理缓存,cpio+gzip 打包输出 `.img` 文件 ## 配置说明 配置文件位于 `configs/` 目录,命名规约 `{平台}-{OS}{功能}`: - 平台:`ASCEND` / `ROCKCHIP` - OS:`E`=openEuler(仅 Ascend)、`U`=Ubuntu - 功能:`B`=基础、`C1`=+智能安全预警、`C2`=+智能安全预警+C++AI+GStreamer、`D`=+Docker、`V`=可视化桌面与中文化;`ASCEND-UDEV` 为 Ascend Ubuntu 基础开发配置 | 配置 | 平台 | OS | 包含组件 | |---|---|---|---| | ASCEND-EB | Ascend | openEuler | 基础 | | ASCEND-ED | Ascend | openEuler | 基础 + Docker | | ASCEND-UDEV | Ascend | Ubuntu | 基础开发环境 | | ASCEND-UC1 | Ascend | Ubuntu | 基础 + 智能安全预警 | | ASCEND-UC1D | Ascend | Ubuntu | 基础 + 智能安全预警 + Docker | | ASCEND-UD | Ascend | Ubuntu | 基础 + Docker | | ROCKCHIP-UB | Rockchip | Ubuntu | 基础 | | ROCKCHIP-UC1 | Rockchip | Ubuntu | 基础 + 智能安全预警 | | ROCKCHIP-UC1D | Rockchip | Ubuntu | 基础 + 智能安全预警 + Docker | | ROCKCHIP-UC2 | Rockchip | Ubuntu | 基础 + 智能安全预警 + C++AI + GStreamer | | ROCKCHIP-UC2D | Rockchip | Ubuntu | 基础 + C++AI + 智能安全预警 + Docker + GStreamer | | ROCKCHIP-UD | Rockchip | Ubuntu | 基础 + Docker | | ROCKCHIP-UV | Rockchip | Ubuntu | 基础 + 可视化桌面 + 中文字体/输入法 + Firefox | > Ascend 模式会自动在 `clean-rootfs.sh` 前运行 `ascend-download.sh`,安装 CANN Toolkit 和 ops。仅当配置包含 `cvai-download.sh` 且 `MINDSDK_URL` 非空时,才会下载并安装 mindxsdk。 > openEuler 下 ROS2 与可视化桌面不支持,会自动跳过。 ### 可用组件脚本 | 脚本 | 功能 | |---|---| | baseLinuxSoft-download.sh | 基础系统工具(含统一编译安装 Python 3.10.12) | | cvai-download.sh | 智能安全预警依赖(nginx、x264、x265) | | gstreamer-download.sh | GStreamer 多媒体框架 | | ros2-download.sh | ROS2 Humble 桌面版(仅 Ubuntu) | | visual-download.sh | Ubuntu 桌面环境 GDM(仅 Ubuntu) | | cppaiproject-download.sh | C++ AI 服务依赖(OpenCV、ffmpeg、spdlog) | | docker-download.sh | Docker Engine + Compose 插件 | | ascend-download.sh | Ascend CANN Toolkit / ops,以及按配置安装 mindxsdk(仅 Ascend) | | extraPackages-download.sh | 中文字体、中文 locale、Fcitx 输入法和 Firefox(Ubuntu,供 ROCKCHIP-UV 使用) | | clean-rootfs.sh | 清理安装脚本与缓存,放在配置脚本列表末尾 | | customSoft-download.sh | 用户自定义扩展点 | ### 配置字段 每个 `.conf` 文件定义: | 字段 | 说明 | |---|---| | `ASCEND_MODE` | `"ascend"` 启用 Ascend 路径,否则留空 | | `OS_MODE` | `"openeuler"` 走 dnf,否则走 apt | | `ROOTFS_URL` | 基础 rootfs 镜像完整 URL | | `TOOLKIT_URL` / `OPS_URL` | Ascend CANN Toolkit / ops 下载地址;Ascend 配置需提供,其他平台留空 | | `MINDSDK_URL` | 可选 mindxsdk 下载地址,仅在 Ascend 配置包含 cvai 时使用 | | `CHROOT_SCRIPTS` | 有序执行的 in_chroot 脚本数组 | ### 自定义配置 在 `configs/` 下新建 `.conf` 文件: ```bash ASCEND_MODE="" OS_MODE="" ROOTFS_URL="http://.../ubuntu-base-22.04-base-arm64.tar.gz" TOOLKIT_URL="" MINDSDK_URL="" OPS_URL="" CHROOT_SCRIPTS=( baseLinuxSoft-download.sh docker-download.sh 你的脚本.sh clean-rootfs.sh ) ``` 将自定义安装脚本放入 `scripts/in_chroot/`,在 `CHROOT_SCRIPTS` 中按执行顺序引用;保留 `baseLinuxSoft-download.sh` 在前、`clean-rootfs.sh` 在最后。 ## 输出 ``` IMAGES/<配置名>_base_<时间戳>.img # cpio+gzip 压缩镜像 logs/build.log # 构建日志(含完整 apt/dnf 安装记录) ``` ## 目录结构 ``` ├── build.sh # 主构建脚本 ├── fix.sh # 清理工具(卸载残留挂载点) ├── configs/ # 构建配置文件 ├── scripts/ │ ├── common.sh # 公共函数库(日志、包管理抽象) │ ├── in_chroot/ # chroot 内执行的安装脚本 │ └── out_chroot/ # 宿主机执行的辅助脚本 │ ├── lunch.sh # 配置选择器 │ ├── external-files-downloader.sh # tar.gz 镜像下载解压 │ └── rootfs-image-manager.sh # 环境准备、打包清理 ├── packages/ # 下载的镜像与 CANN 包缓存(gitignore) ├── IMAGES/ # 镜像输出(gitignore) └── logs/ # 构建日志(gitignore) ``` ## 注意事项 - **必须以 root 权限运行**:`sudo ./build.sh` - chroot 内脚本以 root 执行,**不要使用 sudo** - Ubuntu 安装使用 `--no-install-recommends` 最小化依赖 - 所有镜像统一使用 `/usr/local/bin/python3` 提供的 Python 3.10.12;openEuler 的系统 Python 保留给 dnf 使用 - `DEBIAN_FRONTEND=noninteractive` 禁止交互提示 - 构建中断后运行 `sudo ./fix.sh` 清理残留挂载点;异常退出也可能触发打包,请结合日志确认构建成功后再使用镜像 - 宿主机为 x86_64 时自动安装 `qemu-user-static` 以支持 ARM64 chroot - 构建日志完整记录在 `logs/build.log`,控制台只看三级摘要