在香橙派5pro上的ubuntu22.04系统烧录镜像

尚未完成,谨慎参考。。。后面成功之后会在把步骤优化一下

目录

一、准备工作

1、

2、核心思路

二、

步骤一:准备工作与环境检查

步骤二:生成原始系统镜像

步骤3:安装必要工具(在源香橙派上)

步骤4:手动压缩镜像(代替PiShrink)

步骤5:压缩镜像(dd完成后执行)

第四阶段:创建新镜像(关键步骤)

第五阶段:优化新镜像

第六阶段:烧录测试

三、

orangepi5pro_emmc_backup.img

orangepi5pro_final.img

shrink_existing_image.sh

现在已经完成生成这三个文件,接下来的步骤

第一步:检查最终镜像状态

第一步:通用化处理(清理硬件信息)

第二步:准备烧录到SD卡

[A. 插入空白SD卡](#A. 插入空白SD卡)

[B. 确认设备名](#B. 确认设备名)

设备识别结果

现在执行完整烧录流程

第一步:返回工作目录并清理镜像

第二步:烧录到SD卡

第三步:验证烧录结果

第四步:安全移除SD卡

四、在新板上启动测试

硬件连接:

启动过程:

五、

方案A:直接DD覆盖(最彻底)

方案B:只替换系统分区(更安全)

[1. 硬件兼容性检查](#1. 硬件兼容性检查)

[2. 镜像完整性检查](#2. 镜像完整性检查)

[3. 目标板备份(极其重要!)](#3. 目标板备份(极其重要!))


一、准备工作

1、

源设备和目标设备都是同一型号(香橙派5 Pro RK3588S),并且你有一个大容量的外部存储(128G SD卡挂载在 /media/orangepi/6661-3031),那么完全可以在这块香橙派上完成所有工作,无需x86电脑

2、核心思路

利用挂载的128G SD卡作为工作盘和存储盘,直接在源香橙派5 Pro上完成系统备份、处理,并最终烧录到新卡

二、

步骤一:准备工作与环境检查

1、确认存储 :确保挂载在 /media/orangepi/6661-3031 的128G SD卡有足够空间(应大于你系统已使用的空间,而非总容量)。在终端查看:

复制代码
df -h /media/orangepi/6661-3031

2、切换到工作目录:所有操作都在这个外置存储上进行,避免占用内部存储

复制代码
cd /media/orangepi/6661-3031

步骤二:生成原始系统镜像

这个镜像会包含整个系统盘(包括bootloader、内核、系统分区)的所有数据sudo apt clean # 清理软件包缓存 (可以跳过这一步不清理)

复制代码
sudo journalctl --vacuum-time=3d  # 清理3天前的系统日志
rm -rf ~/.cache/*  # 清理用户缓存
复制代码
# 2. 确认存储空间(应显示约119G可用)
复制代码
df -h .

2.关键:找到系统根分区设备

这是最重要的一步,绝对不能搞错。运行:

复制代码
lsblk -f

(base) orangepi@orangepi5pro:/media/orangepi/6661-3031$ lsblk -f

NAME FSTYPE FSVER LABEL UUID FSAVAIL FSUSE% MOUNTPOINTS

mmcblk1

├─mmcblk1p1

│ vfat FAT32 opi_boot

│ EF67-BD3B 899.5M 12% /boot

└─mmcblk1p2

ext4 1.0 opi_root

140be987-4b3c-4ea1-a96f-80e84c822007 17.2G 35% /var/log.hdd

/

mmcblk1boot0

mmcblk1boot1

mmcblk0

└─mmcblk0p1

exfat 1.0 6661-3031 119.1G 0% /media/orangepi/6661-3031

zram0

SWAP

zram1

171.4M 1% /var/log

(base) orangepi@orangepi5pro:/media/orangepi/6661-3031$

从输出可以清楚看到:

  1. 系统根设备是 /dev/mmcblk1

    • 根目录 / 挂载在 mmcblk1p2 分区上,这证实该系统是从 eMMC 启动的。需要备份的整个设备就是 /dev/mmcblk1(包含p1和p2两个分区)。
  2. 128G外置SD卡是 /dev/mmcblk0

    • 它被格式化为exFAT,挂载在 /media/orangepi/6661-3031,有119G可用空间,足够存放备份镜像

可以100%确定目标设备是 /dev/mmcblk1

复制代码
# 确保在128G外置卡目录
cd /media/orangepi/6661-3031

# 开始备份整个eMMC(mmcblk1)
sudo dd if=/dev/mmcblk1 of=./orangepi5pro_emmc_backup.img bs=4M status=progress

预计时间:这会将整个eMMC(比如32GB或64GB)的数据复制出来。根据eMMC速度和容量,可能需要20-60分钟

验证备份 检查备份文件ls -lh orangepi5pro_emmc_backup.img
sudo fdisk -l orangepi5pro_emmc_backup.img1. 文件大小正常

显示两个分区

关键细节

  • if=/dev/mmcblk1绝对正确,备份整个eMMC设备

  • 生成的文件约为eMMC总容量(如32GB/64GB)

  • 过程中可按 Ctrl+T 查看进度

步骤3:安装必要工具(在源香橙派上)
复制代码
sudo apt update && sudo apt install -y e2fsprogs util-linux
步骤4:手动压缩镜像(代替PiShrink)

以下是手动压缩的完整流程,我将其写成一个脚本方便执行:

已经生成的 orangepi5pro_emmc_backup.img 文件

复制代码
cd /media/orangepi/6661-3031

# 创建针对已存在镜像的压缩脚本
cat > shrink_existing_image.sh << 'EOF'
#!/bin/bash
# 压缩已存在的香橙派镜像脚本

INPUT_IMG="orangepi5pro_emmc_backup.img"
OUTPUT_IMG="orangepi5pro_final.img"

echo "=== 检查现有镜像 ==="
ls -lh "$INPUT_IMG"
sudo fdisk -l "$INPUT_IMG"

echo -e "\n=== 获取分区信息 ==="
# 获取第二个分区(系统分区)信息
PARTITION_INFO=$(sudo fdisk -l "$INPUT_IMG" | grep "img2")
if [ -z "$PARTITION_INFO" ]; then
    # 尝试其他可能的分区标识
    PARTITION_INFO=$(sudo fdisk -l "$INPUT_IMG" | grep "Linux filesystem" | tail -1)
fi

echo "分区信息: $PARTITION_INFO"

# 提取起始扇区
START_SECTOR=$(echo "$PARTITION_INFO" | awk '{print $2}')
SECTOR_SIZE=512
OFFSET=$((START_SECTOR * SECTOR_SIZE))

echo "系统分区起始扇区: $START_SECTOR"
echo "偏移量: $OFFSET 字节"

echo -e "\n=== 挂载系统分区 ==="
sudo losetup -f --show -o $OFFSET "$INPUT_IMG"
LOOP_DEV=$(sudo losetup -j "$INPUT_IMG" | grep offset | cut -d: -f1)
echo "使用的loop设备: $LOOP_DEV"

echo -e "\n=== 检查并修复文件系统 ==="
sudo e2fsck -pf "$LOOP_DEV"
CHECK_RESULT=$?
if [ $CHECK_RESULT -eq 0 ] || [ $CHECK_RESULT -eq 1 ]; then
    echo "文件系统检查通过"
else
    echo "文件系统有错误,尝试修复..."
    sudo e2fsck -fy "$LOOP_DEV"
fi

echo -e "\n=== 缩小文件系统到最小 ==="
sudo resize2fs -M "$LOOP_DEV"

echo -e "\n=== 获取缩小后的块信息 ==="
TUNE2FS_OUTPUT=$(sudo tune2fs -l "$LOOP_DEV" 2>/dev/null)
BLOCK_SIZE=$(echo "$TUNE2FS_OUTPUT" | grep "Block size:" | awk '{print $3}')
BLOCK_COUNT=$(echo "$TUNE2FS_OUTPUT" | grep "Block count:" | awk '{print $3}')

echo "块大小: $BLOCK_SIZE 字节"
echo "块数量: $BLOCK_COUNT"

# 计算文件系统实际大小(字节)
FS_SIZE=$((BLOCK_SIZE * BLOCK_COUNT))
# 计算需要的扇区数(每个扇区512字节)
FS_SECTORS=$(( (FS_SIZE + SECTOR_SIZE - 1) / SECTOR_SIZE ))

echo "文件系统需要扇区数: $FS_SECTORS"

echo -e "\n=== 卸载loop设备 ==="
sudo losetup -d "$LOOP_DEV"

echo -e "\n=== 创建新镜像文件 ==="
# 计算新分区结束扇区(预留2048扇区空间)
NEW_END=$((START_SECTOR + FS_SECTORS + 2048))

echo "新分区结束扇区: $NEW_END"

# 1. 复制MBR和分区表(前2048扇区,约1MB)
dd if="$INPUT_IMG" of="$OUTPUT_IMG" bs=512 count=2048 status=progress

echo -e "\n=== 调整分区表 ==="
# 使用fdisk调整第二个分区大小
cat << FDISK_CMDS | sudo fdisk "$OUTPUT_IMG"
d
2
n
p
2
$START_SECTOR
$NEW_END
n
p
w
FDISK_CMDS

echo -e "\n=== 复制文件系统数据 ==="
dd if="$INPUT_IMG" bs=512 skip=$START_SECTOR count=$FS_SECTORS | \
  dd of="$OUTPUT_IMG" bs=512 seek=$START_SECTOR conv=notrunc status=progress

echo -e "\n=== 扩展文件系统到分区大小 ==="
# 重新设置loop设备
sudo losetup -f --show -o $OFFSET "$OUTPUT_IMG"
NEW_LOOP_DEV=$(sudo losetup -j "$OUTPUT_IMG" | grep offset | cut -d: -f1)

# 检查并扩展文件系统
sudo e2fsck -pf "$NEW_LOOP_DEV"
sudo resize2fs "$NEW_LOOP_DEV"

# 最后检查
sudo fsck -y "$NEW_LOOP_DEV"

# 清理
sudo losetup -d "$NEW_LOOP_DEV"

echo -e "\n=== 完成! ==="
echo "原始镜像大小: $(du -h "$INPUT_IMG" | cut -f1)"
echo "压缩后镜像大小: $(du -h "$OUTPUT_IMG" | cut -f1)"
echo "节省空间: $(echo "scale=1; (1 - $(du -k "$OUTPUT_IMG" | cut -f1) / $(du -k "$INPUT_IMG" | cut -f1)) * 100" | bc)%"

# 验证镜像结构
echo -e "\n=== 验证镜像结构 ==="
sudo fdisk -l "$OUTPUT_IMG"
EOF

# 赋予执行权限
chmod +x shrink_existing_image.sh

# 运行脚本
sudo ./shrink_existing_image.sh
步骤5:压缩镜像(dd完成后执行)
复制代码
# 使用PiShrink自动收缩并压缩
复制代码
# 1. 查看分区信息
sudo fdisk -l orangepi5pro_emmc_backup.img
# 记录:img2的Start值(如2158592)

# 2. 挂载系统分区
OFFSET=$((2158592 * 512))
sudo losetup -f --show -o $OFFSET orangepi5pro_emmc_backup.img
LOOP_DEV=$(sudo losetup -a | grep "offset" | grep "backup" | awk -F: '{print $1}')

# 3. 检查并压缩文件系统
sudo e2fsck -pf $LOOP_DEV
sudo resize2fs -M $LOOP_DEV

# 4. 获取压缩后信息
sudo tune2fs -l $LOOP_DEV | grep -E "(Block count|Block size)"
# 记录:Block count和Block size

完成后

  • 得到

    复制代码
    orangepi5pro_emmc_backup.img
  • 可删除原始文件释放空间:

    复制代码
第四阶段:创建新镜像(关键步骤)
复制代码
# 1. 计算参数
BLOCK_COUNT=2973220    # 实际获取的值
BLOCK_SIZE=4096        # 实际获取的值
FS_SIZE=$((BLOCK_COUNT * BLOCK_SIZE))
FS_SECTORS=$(( (FS_SIZE + 511) / 512 ))
START_SECTOR=2158592   # 实际获取的值
NEW_END=$((START_SECTOR + FS_SECTORS + 2048))
TOTAL_MB=$(( (NEW_END + 2048) * 512 / 1024 / 1024 ))

# 2. 创建空白镜像
dd if=/dev/zero of=orangepi5pro_final.img bs=1M count=$TOTAL_MB status=progress

# 3. 复制引导分区
dd if=orangepi5pro_emmc_backup.img of=orangepi5pro_final.img bs=512 count=$START_SECTOR conv=notrunc status=progress

# 4. 创建GPT分区表
cat << EOF | sudo fdisk orangepi5pro_final.img
g
n
1
61440
2158591
n
2
2158592
$NEW_END
w
EOF

# 5. 复制系统数据
sudo losetup -f --show -o $OFFSET orangepi5pro_emmc_backup.img
ORIG_LOOP=$(sudo losetup -a | grep "backup" | grep "offset" | awk -F: '{print $1}')
dd if=$ORIG_LOOP of=orangepi5pro_final.img bs=512 seek=$START_SECTOR skip=$START_SECTOR count=$FS_SECTORS conv=notrunc status=progress
sudo losetup -d $ORIG_LOOP

第五阶段:优化新镜像

复制代码
# 1. 扩展文件系统
sudo losetup -f --show -o $OFFSET orangepi5pro_final.img
NEW_LOOP=$(sudo losetup -a | grep "final" | grep "offset" | awk -F: '{print $1}')
sudo resize2fs $NEW_LOOP

# 2. 清理硬件信息
sudo mount $NEW_LOOP /mnt
sudo rm -f /mnt/etc/udev/rules.d/70-persistent-net.rules
sudo rm -f /mnt/etc/ssh/ssh_host_*
echo "uninitialized" | sudo tee /mnt/etc/machine-id
sudo umount /mnt
sudo losetup -d $NEW_LOOP

第六阶段:烧录测试

复制代码
# 1. 插入空白SD卡,确认设备名(如/dev/sdb)
sudo lsblk

# 2. 烧录
sudo dd if=orangepi5pro_final.img of=/dev/sdb bs=4M status=progress conv=fsync

# 3. 在新香橙派5 Pro上测试

三、

orangepi5pro_emmc_backup.img
orangepi5pro_final.img
shrink_existing_image.sh
现在已经完成生成这三个文件,接下来的步骤

第一步:检查最终镜像状态

复制代码
cd /media/orangepi/6661-3031

# 检查最终镜像
复制代码
ls -lh orangepi5pro_final.img
sudo fdisk -l orangepi5pro_final.img

输出:

  1. orangepi5pro_final.img 的文件大小是多少

  2. fdisk 显示的分区信息是什么

(base) orangepi@orangepi5pro:/media/orangepi/6661-3031$ ls -lh orangepi5pro_final.img

sudo fdisk -l orangepi5pro_final.img

-rwxr-xr-x 1 orangepi orangepi 14G 12月 20 11:13 orangepi5pro_final.img

sudo orangepi 的密码:

Disk orangepi5pro_final.img:13.61 GiB,14612955136 字节,28540928 个扇区

单元:扇区 / 1 * 512 = 512 字节

扇区大小(逻辑/物理):512 字节 / 512 字节

I/O 大小(最小/最佳):512 字节 / 512 字节

磁盘标签类型:gpt

磁盘标识符:063BEFB7-91B2-0B4D-B723-111C205CB05B

设备 起点 末尾 扇区 大小 类型

orangepi5pro_final.img1 61440 2158591 2097152 1G Linux 文件系统

orangepi5pro_final.img2 2158592 25946400 23787809 11.3G Linux 文件系统

(base) orangepi@orangepi5pro:/media/orangepi/6661-3031$

现在进入最终步骤

第一步:通用化处理(清理硬件信息)

复制代码
cd /media/orangepi/6661-3031

# 1. 挂载系统分区(第二分区)
OFFSET=$((2158592 * 512))
sudo mkdir -p /mnt/img_root
sudo mount -o loop,offset=$OFFSET orangepi5pro_final.img /mnt/img_root

# 2. 清理硬件特定文件
echo "清理硬件信息..."
sudo rm -f /mnt/img_root/etc/udev/rules.d/70-persistent-net.rules
sudo rm -f /mnt/img_root/etc/ssh/ssh_host_*
sudo rm -f /mnt/img_root/etc/machine-id
echo "uninitialized" | sudo tee /mnt/img_root/etc/machine-id

# 3. 可选:清理临时文件
sudo rm -rf /mnt/img_root/tmp/*
sudo rm -rf /mnt/img_root/var/tmp/*

# 4. 卸载
sudo umount /mnt/img_root
sudo rmdir /mnt/img_root

echo "镜像清理完成!"

第二步:准备烧录到SD卡

A. 插入空白SD卡

  1. 准备一张至少16GB的空白SD卡

  2. 通过读卡器插入香橙派USB口

B. 确认设备名

复制代码
# 插入前查看当前设备
sudo lsblk

# 插入SD卡后再查看
sudo lsblk

找到新增的设备,通常是:

  • /dev/sda(USB读卡器)

  • /dev/mmcblk2(SD卡槽)

重要 :确认不是 /dev/mmcblk1(你的系统盘)!

(base) orangepi@orangepi5pro:/media/orangepi/6137-3232$ sudo lsblk

sudo orangepi 的密码:

NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS

mmcblk1 179:0 0 28.9G 0 disk

├─mmcblk1p1 179:1 0 1G 0 part /boot

└─mmcblk1p2 179:2 0 27.6G 0 part /var/log.hdd

/

mmcblk1boot0 179:32 0 4M 1 disk

mmcblk1boot1 179:64 0 4M 1 disk

mmcblk0 179:96 0 119.1G 0 disk

└─mmcblk0p1 179:97 0 119.1G 0 part /media/orangepi/6661-3031

zram0 254:0 0 3.9G 0 disk SWAP

zram1 254:1 0 200M 0 disk /var/log

(base) orangepi@orangepi5pro:/media/orangepi/6137-3232$ sudo lsblk

NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS

sdb 8:16 1 119.1G 0 disk

└─sdb1 8:17 1 119.1G 0 part

mmcblk1 179:0 0 28.9G 0 disk

├─mmcblk1p1 179:1 0 1G 0 part /boot

└─mmcblk1p2 179:2 0 27.6G 0 part /var/log.hdd

/

mmcblk1boot0 179:32 0 4M 1 disk

mmcblk1boot1 179:64 0 4M 1 disk

mmcblk0 179:96 0 119.1G 0 disk

└─mmcblk0p1 179:97 0 119.1G 0 part /media/orangepi/6661-3031

zram0 254:0 0 3.9G 0 disk SWAP

zram1 254:1 0 200M 0 disk /var/log

(base) orangepi@orangepi5pro:/media/orangepi/6137-3232$

可以清楚地看到:

设备识别结果

插入SD卡前:

  • mmcblk1:你的系统盘(eMMC)

  • mmcblk0:128G外置卡(工作盘)

插入SD卡后新增:

  • sdb新插入的空白SD卡(119.1G)

确认目标设备:/dev/sdb


现在执行完整烧录流程

第一步:返回工作目录并清理镜像

复制代码
# 返回存放镜像的目录
cd /media/orangepi/6661-3031

# 通用化处理(如果还没做)
OFFSET=$((2158592 * 512))
sudo mkdir -p /mnt/img_root
sudo mount -o loop,offset=$OFFSET orangepi5pro_final.img /mnt/img_root

# 清理硬件信息
sudo rm -f /mnt/img_root/etc/udev/rules.d/70-persistent-net.rules
sudo rm -f /mnt/img_root/etc/ssh/ssh_host_*
sudo rm -f /mnt/img_root/etc/machine-id
echo "uninitialized" | sudo tee /mnt/img_root/etc/machine-id

# 卸载
sudo umount /mnt/img_root
sudo rmdir /mnt/img_root

echo "✅ 镜像清理完成"

第二步:烧录到SD卡

复制代码
# 重要:确认目标设备
TARGET_DEV="/dev/sdb"
echo "目标设备: $TARGET_DEV"

# 检查目标设备是否正确
sudo fdisk -l $TARGET_DEV
# 应该显示空白或已有分区的信息

# 开始烧录(使用dd命令)
echo "开始烧录14GB镜像到SD卡..."
echo "预计时间:3-5分钟"
sudo dd if=orangepi5pro_final.img of=$TARGET_DEV bs=4M status=progress conv=fsync

# 等待完成
sync
echo "✅ 烧录完成!"

第三步:验证烧录结果

复制代码
# 检查SD卡分区
sudo fdisk -l $TARGET_DEV

# 应该显示:
# 设备                       起点     末尾     扇区  大小 类型
# /dev/sdb1                 61440  2158591  2097152    1G Linux 文件系统
# /dev/sdb2               2158592 25946400 23787809 11.3G Linux 文件系统

# 检查文件系统
sudo fsck.ext4 -n ${TARGET_DEV}2

第四步:安全移除SD卡

复制代码
# 确保所有数据写入
sync

# 等待10秒
sleep 10

echo "可以安全拔出SD卡了"
echo "物理拔出后插入新香橙派5 Pro"

四、在新板上启动测试

硬件连接:

  1. 插入SD卡:到新香橙派5 Pro的SD卡槽

  2. 连接外设

    • 电源(5V/4A适配器)

    • HDMI显示器

    • USB键盘

    • 网线(可选)

启动过程:

首次启动时间线:

0-30秒:U-Boot启动,LED闪烁

30-90秒:内核启动,系统扩展文件系统

90-180秒:进入登录界面

五、

如果不是新开发板需要覆盖

方案A:直接DD覆盖(最彻底)

适用场景:目标板系统问题严重,需要完全重置

复制代码
# 在新板(目标板)上操作步骤:
# 1. 将你的镜像SD卡通过读卡器插入目标板USB口
# 2. 确认设备名(假设为/dev/sda)
sudo lsblk

# 3. 确认目标板eMMC设备(通常是/dev/mmcblk1)
#    绝对不要搞错!

# 4. 开始覆盖(示例,请根据实际情况调整)
sudo dd if=/dev/sda1 of=/dev/mmcblk1 bs=4M status=progress conv=fsync
# 或直接使用镜像文件
sudo dd if=/media/orangepi/xxx/orangepi5pro_final.img of=/dev/mmcblk1 bs=4M status=progress conv=fsync

# 5. 重启
sudo reboot

方案B:只替换系统分区(更安全)

适用场景:保留用户数据,只修复系统环境

复制代码
# 1. 挂载你的镜像和目标板系统
# 挂载你的镜像系统分区
sudo mount /dev/sda2 /mnt/source

# 挂载目标板系统分区
sudo mount /dev/mmcblk1p2 /mnt/target

# 2. 备份目标板重要数据
sudo cp -r /mnt/target/home/orangepi /备份位置/

# 3. 清理目标板系统但保留home
sudo rm -rf /mnt/target/{etc,usr,var,lib,opt,sbin,bin,boot} 2>/dev/null

# 4. 复制新系统(排除home)
sudo cp -a /mnt/source/{etc,usr,var,lib,opt,sbin,bin,boot} /mnt/target/

# 5. 卸载
sudo umount /mnt/source /mnt/target

1. 硬件兼容性检查

复制代码
# 在你的镜像系统和目标板系统都运行:
cat /proc/cpuinfo | grep "model name"
cat /proc/device-tree/model
uname -a

# 比较结果,确保:
# - 都是香橙派5 Pro (RK3588S)
# - 内核版本相近
# - 架构相同(aarch64)

2. 镜像完整性检查

复制代码
# 检查你的镜像
sudo fdisk -l orangepi5pro_final.img
# 应该有2个分区:1G的boot和11G的系统分区

# 检查是否可以挂载
sudo mount -o loop,offset=$((2158592*512)) orangepi5pro_final.img /mnt/test
ls /mnt/test
sudo umount /mnt/test

3. 目标板备份(极其重要!)

复制代码
# 在目标板上备份当前状态
# A. 备份重要文件
sudo tar czf /tmp/backup_home.tar.gz /home/orangepi
sudo tar czf /tmp/backup_etc.tar.gz /etc

# B. 备份整个系统(如果空间足够)
sudo dd if=/dev/mmcblk1 of=/tmp/full_backup.img bs=4M status=progress

# C. 备份到外部存储
# 插入U盘或通过网络传输
相关推荐
大树881 小时前
金刚石散热越强,管路越先见顶
大数据·运维·服务器·人工智能·ai
摇滚侠1 小时前
Linux CentOS7 rpm 安装 MySQL 5.7
linux·运维·mysql
霸道流氓气质1 小时前
领域驱动设计(DDD)在 Spring Boot 微服务中的实践指南
运维·spring boot·微服务
bush41 小时前
嵌入式linux学习记录十四、术语
linux·嵌入式
载数而行5202 小时前
Linux 11 动态监控指令top
linux
小宇宙Zz2 小时前
Maven依赖冲突
java·服务器·maven
Inhand陈工2 小时前
基于台达PLC与映翰通IG502的智慧水产养殖精准投喂与远程运维解决方案
运维·人工智能·物联网·阿里云·信息与通信
酣大智3 小时前
ARP代理--工作原理
运维·网络·arp·arp代理
不会C语言的男孩3 小时前
Linux 系统编程 · 第 8 章:进程基础
linux·c语言
shushangyun_3 小时前
2026年快消品B2B系统推荐:支持终端门店订货、促销政策自动化的工具?
java·运维·网络·数据库·人工智能·spring·自动化