From e7c891353b2b24d7b4b170fef5c22bc9ef180442 Mon Sep 17 00:00:00 2001 From: mofeng-git Date: Sat, 20 Sep 2025 12:49:58 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E6=96=B0=E5=A2=9EOEC-Turbo=E8=AE=BE?= =?UTF-8?q?=E5=A4=87=E6=94=AF=E6=8C=81=E5=92=8C=E5=AE=8C=E5=96=84=E6=9E=84?= =?UTF-8?q?=E5=BB=BA=E7=B3=BB=E7=BB=9F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 新增OEC-Turbo设备构建支持,基于Debian 12 Armbian镜像 - 实现OEC-Turbo专用rootfs准备函数,支持GPT分区结构 - 添加VPU硬件编码支持,启用RK MPP加速 - 实现DTB自动下载和替换功能,避免loop设备冲突 - 修复设备特定配置函数命名机制,支持连字符转下划线 - 优化rc.local文件下载逻辑,允许文件可选不存在 - 完善系统FFmpeg包版本检测,支持bookworm和noble - 更新GitHub Actions工作流支持OEC-Turbo设备CI构建 --- .github/workflows/build_img.yaml | 1 + build/build_img.sh | 13 +++++- build/functions/devices.sh | 74 +++++++++++++++++++++++++++++++- build/functions/install.sh | 10 +++-- build/platform/oec-turbo | 3 ++ 5 files changed, 94 insertions(+), 7 deletions(-) create mode 100644 build/platform/oec-turbo diff --git a/.github/workflows/build_img.yaml b/.github/workflows/build_img.yaml index c4dad8ab..296c26dd 100644 --- a/.github/workflows/build_img.yaml +++ b/.github/workflows/build_img.yaml @@ -16,6 +16,7 @@ on: - e900v22c - octopus-flanet - orangepi-zero + - oec-turbo - all create_release: description: 'Create GitHub Release' diff --git a/build/build_img.sh b/build/build_img.sh index d3792f81..09a15a6f 100755 --- a/build/build_img.sh +++ b/build/build_img.sh @@ -111,6 +111,13 @@ build_target() { local network_type="" NEED_PREPARE_DNS=true ;; + oec-turbo) + oec_turbo_rootfs + local arch="aarch64" + local device_type="vpu" + local network_type="" + NEED_PREPARE_DNS=true + ;; *) echo "错误:未知或不支持的目标 '$target'" >&2 exit 1 @@ -150,6 +157,9 @@ build_target() { orangepi-zero) pack_img "Orangepi-Zero" ;; + oec-turbo) + pack_img "OEC-Turbo" + ;; *) echo "错误:未知的打包类型 for '$target'" >&2 ;; @@ -168,7 +178,7 @@ build_target() { # 检查是否提供了目标参数 if [ -z "$1" ]; then echo "用法: $0 " - echo "可用目标: onecloud, cumebox2, chainedbox, vm, e900v22c, octopus-flanet, onecloud-pro, orangepi-zero" + echo "可用目标: onecloud, cumebox2, chainedbox, vm, e900v22c, octopus-flanet, onecloud-pro, orangepi-zero, oec-turbo" exit 1 fi @@ -189,6 +199,7 @@ if [ "$1" = "all" ]; then build_target "octopus-flanet" build_target "onecloud-pro" build_target "orangepi-zero" + build_target "oec-turbo" echo "信息:所有目标构建完成。" else build_target "$1" diff --git a/build/functions/devices.sh b/build/functions/devices.sh index ce177190..6f0183f2 100755 --- a/build/functions/devices.sh +++ b/build/functions/devices.sh @@ -333,12 +333,82 @@ config_octopus_flanet_files() { sudo cp "$config_file" "$ROOTFS/etc/model_database.conf" || echo "警告:复制 model_database.conf 失败" } -config_orangepizero_files() { +config_orangepi_zero_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 特定配置完成。" } + +config_onecloud_pro_files() { + echo "信息:配置 Onecloud Pro 特定文件..." + echo "信息:Onecloud Pro 特定配置完成。" +} + +oec_turbo_rootfs() { + local source_image="$SRCPATH/image/oec-turbo/Flash_Armbian_25.05.0_rockchip_efused-wxy-oec_bookworm_6.1.99_server_2025.03.20.img" + local target_image="$TMPDIR/rootfs.img" + local rootfs_offset=$((1409024 * 512)) # 根据分区7的起始扇区计算 + + echo "信息:准备 OEC-Turbo Rootfs (Debian 12)..." + ensure_dir "$TMPDIR" + + echo "信息:下载或使用本地 OEC-Turbo 原始镜像..." + download_file_if_missing "$source_image" || { echo "错误:下载 OEC-Turbo 原始镜像失败" >&2; exit 1; } + + cp "$source_image" "$target_image" || { echo "错误:复制 OEC-Turbo 原始镜像失败" >&2; exit 1; } + + find_loop_device + # 设置 loop 设备指向 rootfs 分区 (分区7) + sudo losetup "$LOOPDEV" "$target_image" -o "$rootfs_offset" || { echo "错误:设置 loop 设备失败" >&2; exit 1; } + + echo "信息:OEC-Turbo Rootfs 准备完成,loop 设备 $LOOPDEV 已就绪。" +} + +config_oec_turbo_files() { + echo "信息:配置 OEC-Turbo 特定文件..." + + # 替换 override.yaml 中的硬件编码配置,启用 RK MPP 硬件编码 + echo "信息:配置 VPU 硬件编码支持..." + run_in_chroot "sed -i 's/--h264-hwenc=disabled/--h264-hwenc=rkmpp/g' /etc/kvmd/override.yaml" + + # 替换 DTB 文件 + replace_oec_turbo_dtb + + echo "信息:OEC-Turbo 特定配置完成。" +} + +replace_oec_turbo_dtb() { + local dtb_source="$SRCPATH/image/oec-turbo/rk3566-onething-oec-box.dtb" + local target_image="$TMPDIR/rootfs.img" + local boot_offset=$((360448 * 512)) # boot 分区6的偏移 + local boot_mount="$TMPDIR/oec_boot_mount" + local dtb_target_path="dtb/rockchip/rk3566-onething-oec-box.dtb" + local boot_loopdev="" + + echo "信息:替换 OEC-Turbo DTB 文件..." + + if [ ! -f "$dtb_source" ]; then + echo "信息:尝试下载 DTB 文件..." + download_file_if_missing "$dtb_source" + fi + + echo "信息:为 boot 分区查找独立的 loop 设备..." + # 查找一个新的loop设备用于boot分区 + boot_loopdev=$(losetup -f) + ensure_dir "$boot_mount" + + losetup -o "$boot_offset" "$boot_loopdev" "$target_image" + mount "$boot_loopdev" "$boot_mount" + + # 确保目标目录存在并复制 DTB 文件 + mkdir -p "$boot_mount/$(dirname "$dtb_target_path")" + cp "$dtb_source" "$boot_mount/$dtb_target_path" + echo "信息:DTB 文件替换成功: $dtb_target_path" + + umount "$boot_mount" + losetup -d "$boot_loopdev" + rmdir "$boot_mount" +} diff --git a/build/functions/install.sh b/build/functions/install.sh index bc6e6ebf..4b10bc2d 100755 --- a/build/functions/install.sh +++ b/build/functions/install.sh @@ -78,7 +78,7 @@ config_base_files() { sudo chmod +x "$ROOTFS/usr/bin/kvmd-gencert" "$ROOTFS/usr/bin/kvmd-bootconfig" "$ROOTFS/usr/bin/kvmd-certbot" "$ROOTFS/usr/bin/kvmd-udev-hdmiusb-check" "$ROOTFS/usr/bin/kvmd-udev-restart-pass" "$ROOTFS/usr/bin/kvmd-firstrun.sh" # 尝试下载或使用本地 rc.local 文件 - download_rc_local "$platform_id" + download_rc_local "$platform_id" || echo "信息:rc.local 文件不存在,跳过" if [ -f "$SRCPATH/image/$platform_id/rc.local" ]; then echo "信息:复制设备特定的 rc.local 文件..." sudo cp "$SRCPATH/image/$platform_id/rc.local" "$ROOTFS/etc/" @@ -304,9 +304,11 @@ install_and_configure_kvmd() { config_base_files "$TARGET_DEVICE_NAME" # 使用全局变量传递设备名 # 特定设备的额外文件配置 (如果存在) - if declare -f "config_${TARGET_DEVICE_NAME}_files" > /dev/null; then - echo "信息:执行特定设备的文件配置函数 config_${TARGET_DEVICE_NAME}_files ..." - "config_${TARGET_DEVICE_NAME}_files" + # 将设备名中的连字符转换为下划线以匹配函数名 + local device_func_name="${TARGET_DEVICE_NAME//-/_}" + if declare -f "config_${device_func_name}_files" > /dev/null; then + echo "信息:执行特定设备的文件配置函数 config_${device_func_name}_files ..." + "config_${device_func_name}_files" fi # 某些镜像可能需要准备DNS和换源 diff --git a/build/platform/oec-turbo b/build/platform/oec-turbo new file mode 100644 index 00000000..5d27a119 --- /dev/null +++ b/build/platform/oec-turbo @@ -0,0 +1,3 @@ +PIKVM_MODEL=v2_model +PIKVM_VIDEO=usb_video +PIKVM_BOARD=oec-turbo