From 3f8a9e3b2ce4d26e2e5785aee10c786fe330f78b Mon Sep 17 00:00:00 2001 From: mofeng-git Date: Sat, 20 Sep 2025 11:31:57 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E6=96=B0=E5=A2=9E=E9=A6=99=E6=A9=99?= =?UTF-8?q?=E6=B4=BE=20Zero=20One=20=E8=AE=BE=E5=A4=87=E6=9E=84=E5=BB=BA?= =?UTF-8?q?=E6=94=AF=E6=8C=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 在 build_img.sh 中新增 orangepi-zero 构建目标支持 --- .github/workflows/build_img.yaml | 1 + build/build_img.sh | 13 +++++++- build/functions/devices.sh | 52 +++++++++++++++++++++++++++++--- build/platform/orangepi-zero | 3 ++ 4 files changed, 64 insertions(+), 5 deletions(-) create mode 100644 build/platform/orangepi-zero diff --git a/.github/workflows/build_img.yaml b/.github/workflows/build_img.yaml index 91de3eec..c4dad8ab 100644 --- a/.github/workflows/build_img.yaml +++ b/.github/workflows/build_img.yaml @@ -15,6 +15,7 @@ on: - vm - e900v22c - octopus-flanet + - orangepi-zero - all create_release: description: 'Create GitHub Release' diff --git a/build/build_img.sh b/build/build_img.sh index 0ccd7442..d3792f81 100755 --- a/build/build_img.sh +++ b/build/build_img.sh @@ -104,6 +104,13 @@ build_target() { local network_type="" NEED_PREPARE_DNS=true ;; + orangepi-zero) + orangepizero_rootfs + local arch="armhf" + local device_type="" + local network_type="" + NEED_PREPARE_DNS=true + ;; *) echo "错误:未知或不支持的目标 '$target'" >&2 exit 1 @@ -140,6 +147,9 @@ build_target() { onecloud-pro) pack_img "Onecloud-Pro" ;; + orangepi-zero) + pack_img "Orangepi-Zero" + ;; *) echo "错误:未知的打包类型 for '$target'" >&2 ;; @@ -158,7 +168,7 @@ build_target() { # 检查是否提供了目标参数 if [ -z "$1" ]; then echo "用法: $0 " - echo "可用目标: onecloud, cumebox2, chainedbox, vm, e900v22c, octopus-flanet, onecloud-pro" + echo "可用目标: onecloud, cumebox2, chainedbox, vm, e900v22c, octopus-flanet, onecloud-pro, orangepi-zero" exit 1 fi @@ -178,6 +188,7 @@ if [ "$1" = "all" ]; then build_target "e900v22c" build_target "octopus-flanet" build_target "onecloud-pro" + build_target "orangepi-zero" echo "信息:所有目标构建完成。" else build_target "$1" diff --git a/build/functions/devices.sh b/build/functions/devices.sh index b40ca697..ce177190 100755 --- a/build/functions/devices.sh +++ b/build/functions/devices.sh @@ -266,6 +266,40 @@ onecloud_pro_rootfs() { echo "信息:Octopus-Planet Rootfs 准备完成,loop 设备 $LOOPDEV 已就绪。" } +orangepizero_rootfs() { + local source_image="$SRCPATH/image/orangepi-zero/Armbian_community_25.11.0-trunk.208_Orangepizero_bookworm_current_6.12.47_minimal.img" + local target_image="$TMPDIR/rootfs.img" + local offset=$((8192 * 512)) + local add_size_mb=600 + + echo "信息:准备 Orange Pi Zero Rootfs..." + ensure_dir "$TMPDIR" + + echo "信息:下载或使用本地 Orange Pi Zero 原始镜像..." + download_file_if_missing "$source_image" || { echo "错误:下载 Orange Pi Zero 原始镜像失败" >&2; exit 1; } + + cp "$source_image" "$target_image" || { echo "错误:复制 Orange Pi Zero 原始镜像失败" >&2; exit 1; } + + echo "信息:扩展镜像文件 (${add_size_mb}MB)..." + sudo dd if=/dev/zero bs=1M count="$add_size_mb" >> "$target_image" || { echo "错误:扩展镜像文件失败" >&2; exit 1; } + + echo "信息:调整镜像分区大小..." + sudo parted -s "$target_image" resizepart 1 100% || { echo "错误:使用 parted 调整分区大小失败" >&2; exit 1; } + + find_loop_device + sudo losetup -P "$LOOPDEV" "$target_image" || { echo "错误:设置 loop 设备失败" >&2; exit 1; } + + echo "信息:检查并调整文件系统大小..." + sudo e2fsck -y -f "${LOOPDEV}p1" || { echo "错误:文件系统检查失败" >&2; exit 1; } + sudo resize2fs "${LOOPDEV}p1" || { echo "错误:调整文件系统大小失败" >&2; exit 1; } + + # 重新设置 LOOPDEV 为分区 + sudo losetup -d "$LOOPDEV" + sudo losetup "$LOOPDEV" "$target_image" -o "$offset" || { echo "错误:重新设置 loop 设备失败" >&2; exit 1; } + + echo "信息:Orange Pi Zero Rootfs 准备完成。" +} + # --- 特定设备的文件配置函数 --- config_cumebox2_files() { @@ -290,11 +324,21 @@ config_cumebox2_files() { config_octopus_flanet_files() { echo "信息:为 Octopus-Planet 配置特定文件 (model_database.conf)..." - + # 自动下载 Octopus-Planet 相关文件(如果不存在) local config_file="$SRCPATH/image/octopus-flanet/model_database.conf" - + download_file_if_missing "$config_file" || echo "警告:下载 Octopus-Planet 配置文件失败" - + sudo cp "$config_file" "$ROOTFS/etc/model_database.conf" || echo "警告:复制 model_database.conf 失败" -} +} + +config_orangepizero_files() { + echo "信息:配置 Orange Pi Zero 特定文件..." + + # 清空 modules.conf 文件,避免加载不必要的模块 + run_in_chroot "echo 'libcomposite' > /etc/modules-load.d/modules.conf" + run_in_chroot "echo 'libcomposite' > /etc/modules" + + echo "信息:Orange Pi Zero 特定配置完成。" +} diff --git a/build/platform/orangepi-zero b/build/platform/orangepi-zero new file mode 100644 index 00000000..175d6362 --- /dev/null +++ b/build/platform/orangepi-zero @@ -0,0 +1,3 @@ +PIKVM_MODEL=v2_model +PIKVM_VIDEO=usb_video +PIKVM_BOARD=orangepi-zero \ No newline at end of file