☰
yocto: 08-为Raspberry Pi 2生成带SSH的镜像并连接Windows
2026/9/30 2:25:24 网站建设 项目流程

可以。你现在的目标不是重新写 SD 卡,而是:

重新生成一套 Yocto 镜像,然后把新镜像部署到 Raspberry Pi 2,最终让 Windows 能通过 SSH 登录 Pi 2。

这个目标很适合我们继续沿着前面的 BitBake 学习路线来做。
不过要注意:SSH 能否连接 Pi 2,不只是镜像文件生成成功的问题。至少要确认:

Yocto ├── kernel ├── device tree ├── rootfs │ ├── dropbear / openssh │ ├── 用户 │ └── 网络配置 └── .wic ▼ SD Card ▼ Raspberry Pi2├── eth0 / wlan0 └── SSH server ▼ Windows └──sshuser@PI_IP

第一步:先看看当前镜像有没有 SSH
你在:

cd~/yocto/pokysourceoe-init-build-env../build-rpi2

执行:

bitbake-ecore-image-minimal|grep'^IMAGE_INSTALL='

最关键的变化是:

原来:IMAGE_FEATURES="debug-tweaks"现在:IMAGE_FEATURES="debug-tweaks ssh-server-dropbear"

这说明我们刚才在 local.conf 中加入的:IMAGE_FEATURES:append = " ssh-server-dropbear"
已经真正进入了 core-image-minimal 的最终 BitBake 数据环境。

第二步:现在可以重新生成镜像了
直接执行:bitbake core-image-minimal
这次不要执行:bitbake -c cleanall core-image-minimal
也不需要:rm -rf tmp
因为 BitBake 会利用现有的 sstate/cache,只重新构建受到配置变化影响的部分

构建完成以后
执行:ls -lh tmp/deploy/images/raspberrypi2/core-image-minimal-raspberrypi2.rootfs.wic*
然后再执行:ls -lh tmp/deploy/images/raspberrypi2/core-image-minimal-raspberrypi2.rootfs-*.wic.bz2

我们应该能看到新的 .wic.bz2。


第三步:但这次我们不只看“编译成功”
下一步:先不要写 SD 卡
我们现在先做一个非常有价值的检查:
看看 .wic 的分区布局。

执行:fdisk -l tmp/deploy/images/raspberrypi2/core-image-minimal-raspberrypi2.rootfs.wic
你应该会看到类似:

Disk...wic:161MiB... Device Start End Sectors Size Type...wic1............M W95 FAT32...wic2............M Linux

这一步可以直接证明:
.wic
├── partition 1 → boot
└── partition 2 → rootfs
也就是说,我们现在可以从“软件构建”正式进入“磁盘镜像”。

第四步:写SD Card
非常好,现在两个输出已经把情况完全对上了。

  1. .wic 的分区布局
    你的镜像是:
160.99MiB329716sectors

分区表是 DOS/MBR:

Partition1Start8192Size 130M Type W95 FAT Boot * Partition2Start278528Size 25M Type Linux 可以画成: core-image-minimal...wic ├── MBR ├── partition1│ ├── FAT │ ├──130MiB │ └── Bootable * └── partition2├── Linux filesystem └──25MiB

这正是一个可以直接写入整张 SD 卡的磁盘镜像。


2. 你的 SD 卡已经明确是 /dev/sdb
这一点现在非常清楚:

sda 100G VBOX HARDDISK sdb29.7G Storage Device

所以:/dev/sdb = 你的 29.7G SD 卡
而且现在 SD 卡已经挂载了:

/dev/sdb1 → /media/cxicc/boot /dev/sdb2 → /media/cxicc/root

这两个分区必须先卸载。


3. 但是现在有一个非常重要的现象
你的 SD 卡目前:

/dev/sdb1 130M vfat /dev/sdb2 25M ext4

而你刚生成的 .wic:

partition1130M FAT partition225M Linux

大小和分区布局完全一致。
这非常漂亮。
但不要因此只复制文件到 /media/cxicc/boot 和 /media/cxicc/root。
我们要做的是:
把整个 .wic 写到 /dev/sdb。

因为 .wic 里面不仅包含文件系统,还包含:

MBR partition table boot flag partition1partition2

所以目标是:

.wic │ 整盘写入 ▼ /dev/sdb ├── /dev/sdb1 └── /dev/sdb2

4. 写卡之前先卸载
执行:

sudoumount/dev/sdb1sudoumount/dev/sdb2

然后确认:lsblk -o NAME,SIZE,TYPE,FSTYPE,MOUNTPOINTS,MODEL
应该变成类似:

sdb29.7G disk Storage Device ├─sdb1 130M part vfat └─sdb2 25M part ext4

也就是 MOUNTPOINTS 为空。
unzip tmp/deploy/images/raspberrypi2/core-image-minimal-raspberrypi2.rootfs.wic.bz2 using:
bunzip2 -k “$(readlink -f tmp/deploy/images/raspberrypi2/core-image-minimal-raspberrypi2.rootfs.wic.bz2)”
Use cp first to make an independent copy:

cd~/yocto/build-rpi2cp--dereference\tmp/deploy/images/raspberrypi2/core-image-minimal-raspberrypi2.rootfs.wic.bz2\/tmp/core-image-minimal.wic.bz2

Then decompress the copy:

bunzip2 /tmp/core-image-minimal.wic.bz2

Now check:

ls-lh/tmp/core-image-minimal.wic

You should get roughly: -rw-r–r-- … 161M … /tmp/core-image-minimal.wic

cp /tmp/core-image-minimal.wic
tmp/deploy/images/raspberrypi2/core-image-minimal-raspberrypi2.rootfs.wic.bz2


5. 然后写入 .wic
你的镜像只有 161 MB,所以直接写:

sudodd\if=tmp/deploy/images/raspberrypi2/core-image-minimal-raspberrypi2.rootfs.wic\of=/dev/sdb\bs=4M\status=progress\conv=fsync

这里一定注意:of=/dev/sdb
不是:of=/dev/sdb1
也不是:of=/dev/sdb2

因为我们写的是整个磁盘镜像。


6. 写完以后
再执行:sync
然后:lsblk -o NAME,SIZE,TYPE,FSTYPE,MOUNTPOINTS,MODEL
如果 Ubuntu 自动重新挂载了分区,你可能再次看到:

sdb ├─sdb1... /media/cxicc/boot └─sdb2... /media/cxicc/root

这是正常的。


7. 但这里我要提醒你一个关键问题
我们现在已经确认:

rootfs manifest ↓ dropbear

所以:
SSH server 已经在镜像里。
但是:
SSH server 存在 ≠ Windows 一定能 SSH 进去。

我们还需要验证:

Pi2├── kernel ├── rootfs ├── dropbear ├── Ethernet driver ├── eth0 └── IP address

所以写卡之后,我们下一阶段会检查:

Raspberry Pi2├── boot ├── login ├──ipaddr ├──iproute └──ps|grepdropbear

然后从 Windows:ssh root@<Pi的IP地址>


现在先做这一小步
先执行:

sudoumount/dev/sdb1sudoumount/dev/sdb2

然后:lsblk -o NAME,SIZE,TYPE,FSTYPE,MOUNTPOINTS,MODEL
把卸载后的 lsblk 输出贴给我。
确认 /dev/sdb 两个分区都没

摘要

本文详细介绍了如何为Raspberry Pi 2重新生成Yocto镜像并配置SSH服务,实现从Windows系统通过SSH登录Pi 2的完整流程。主要内容包括:

  1. 验证SSH配置:检查IMAGE_FEATURES是否包含ssh-server-dropbear,确保SSH服务已集成到镜像中
  2. 重新生成镜像:利用BitBake的增量构建功能,只重新构建受配置变化影响的部分
  3. 镜像分区分析:使用fdisk检查.wic镜像的分区布局,确认boot和rootfs分区结构
  4. SD卡写入操作:详细说明卸载分区、解压镜像、使用dd命令写入整盘镜像的完整步骤
  5. 网络配置与连接:配置Pi 2的静态IP地址,通过直连网线实现Windows与Pi 2的网络互通
  6. SSH连接验证:使用Putty从Windows SSH登录到Raspberry Pi 2

整个过程从Yocto镜像构建开始,到最终实现跨平台SSH连接,涵盖了嵌入式Linux系统部署的关键环节。

有挂载之后,我们再执行 dd。

第五步:Window connect to pi via dropbear
vi /etc/newwork/intefaces

# Wired or wireless interfaces including predictable namesauto eth0# Ethernet/RNDIS gadget (g_ether)# ... or on host side, usbnet and random hwaddriface eth0 inet static address169.254.125.50 netmask255.255.0.0#network 192.168.7.0gateway169.254.125.127

Using direct RJ45 cable connect PI2 and Windows 10
can ping each other
Install putty on Windows
pi:
IP: 169.254.125.50, PORT: 22
ID: root, PW: NIL

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询