尧图网络科技YAOTU DIGITAL 获取报价
获取报价
首页 / 资讯中心 / 文章详情

yocto: 07-写SD卡并测试

发布时间:2026/9/30 2:25:24

资讯中心
01
ARTICLE

yocto: 07-写SD卡并测试

yocto: 07-写SD卡并测试
摘要本文详细介绍了在Yocto Raspberry Pi 2环境下从生成SD卡镜像到烧录、启动、验证系统的完整工作流程。内容包括1) 生成.wic格式镜像文件2) 正确识别和准备SD卡设备3) 使用dd命令安全烧录镜像4) 通过串口连接验证系统启动5) 测试BusyBox功能与软链接机制6) 进行SD卡读写性能测试。通过这一完整链路读者可以深入理解Yocto构建系统、镜像组成、BusyBox集成以及嵌入式Linux系统启动的全过程实现从源码到硬件的完整闭环验证。如果你现在是在 Yocto Raspberry Pi 2 这个环境里学习我建议不要一上来就只执行 dd。我们把写 SD card 并测试拆成一条完整链路Yocto 生成镜像 → 找到 SD 卡 → 写入 → 启动 Pi → 验证系统 → 验证 BusyBox → 回头理解镜像里到底有什么。1. 先生成 SD 卡镜像你前面已经在~/yocto/build-rpi2并且构建过bitbake core-image-minimal先确认ls -lh tmp/deploy/images/raspberrypi2/通常会看到类似重点是 .wic 文件。对于 Raspberry Pi.wic 是我们最适合直接写入 SD 卡的镜像格式之一因为它不仅包含 rootfilesystem还包含分区布局、boot 分区等2. 确认你的 SD 卡设备这一步最重要。插入 SD 卡之前lsblk插入 USB-SD 卡之后VM 设备 USB 勾选 Generic Mass Storage DeviceSD card reader 已经从 Windows 转交给 Ubuntu VM。lsblk例如出现sda8:00100G0disk ├─sda18:101M0part └─sda28:20100G0part / sdb8:16129.7G0disk ├─sdb18:171130M0part └─sdb28:18125M0part那么很可能/dev/sdb ← 整张 SD 卡 /dev/sdb1 ← SD 卡第一个分区不要把 /dev/sdb1 当成目标。写 .wic 时目标通常是/dev/sdb而不是/dev/sdb1你可以进一步确认lsblk -o NAME,SIZE,MODEL,TRAN,MOUNTPOINTS例如NAME SIZE MODEL TRAN MOUNTPOINTS sda 931G Samsung SSD sata sdb29.8G SD Card usb └─sdb129.8G usb /media/xxx那么 SD 卡就是/dev/sdb3. 卸载 SD 卡如果系统自动挂载了sudo umount /dev/sdb1如果有多个分区sudoumount/dev/sdb1sudoumount/dev/sdb2也可以检查lsblk确保 SD 卡分区已经没有 MOUNTPOINTS。3.1 先把 .wic.bz2 解压bzcat core-image-minimal-raspberrypi2.rootfs-20260727133724.wic.bz2\core-image-minimal-raspberrypi2.rootfs.wic然后ls -lh *.wic应该得到类似-rw-r–r-- … core-image-minimal-raspberrypi2.rootfs.wic注意.wic 才是写 SD 卡的镜像。3.2 确认 SD 卡分区但是现在先不要 dd先执行lsblk -f我预计会看到类似sdb└─sdb1 vfat 5E59-21BA /media/cxicc/5E59-21BA然后卸载sudo umount /dev/sdb1如果 lsblk -f 显示有多个 sdb 分区就把所有 /dev/sdbX 都卸载。再确认执行lsblk -o NAME,SIZE,TYPE,FSTYPE,MOUNTPOINTS理想结果sda 100G disk ├─sda1 1M part └─sda2 100G part /sdb 29.7G disk注意这里sdb 29.7G disk没有 MOUNTPOINT。这时候 SD 卡就准备好了。4. 写入 .wic我建议你以后形成一个固定检查流程每次修改 Recipe 后# 1. Recipe 能不能 buildbitbake hello-yocto# 2. 是否加入 imagebitbake-ecore-image-minimal|grep^IMAGE_INSTALL**# 3. 文件是否进入最终 rootfs**findtmp/work-path*/core-image-minimal/*/rootfs/*|grephello# 4. 查看 rootfs 内容cdtmp/work/*/core-image-minimal/*/rootfs做到这里再烧 SD 卡基本不会有意外。假设镜像 tmp/core-image-minimal-raspberrypi2.rootfs.wic# ~/yocto/build-rpi2/tmp/deploy/images/raspberrypi2/core-image-minimal-raspberrypi2.rootfs.wicSD /dev/sdb执行sudodd\iftmp/core-image-minimal-raspberrypi2.rootfs.wic\of/dev/sdb\bs4M\statusprogress\convfsyncstatusprogressWithout this option, dd appears to do nothing until it finishes.convfsync:The kernel may report “finished” before every block has actually reached the SD card.完成后sync这里一定要理解if input fileof output filebs block size所以本质上.wic │dd▼ /dev/sdb而不是.wic ▼ /dev/sdb15. 写完以后检查分区拔掉 SD 卡再插回来然后lsblk应该能看到类似sdb ├─sdb1 128M └─sdb21.5G这一步非常有意义。因为 .wic 并不是简单的rootfs.tar.gz而是已经包含了类似-----------------------------|partition table|-----------------------------|boot partition|-----------------------------|root filesystem partition|-----------------------------|filesystem data|-----------------------------所以你可以进一步看sudo fdisk -l /dev/sdb 或者sudo parted /dev/sdb print关于写SD卡 我有两点看法供你参考用DD命令很麻烦 我大多数时间是用 balenaEtcher 或 Win32Diskimage.总是用GUI工具 智力会退化 所以偶尔用DD, 就当是脑保健了6. 把 SD 卡插到 Raspberry Pi 2然后启动 Raspberry Pi 2。接下来我们测试的不是它有没有亮灯而是要逐层验证。第一层系统是否启动串口连接 Raspberry Pi 2。如果你有 USB-TTLPi GPIO TX RX GND连接到 USB-TTL。然后 PC 上查看串口ls /dev/ttyUSB*或者ls /dev/ttyACM*例如/dev/ttyUSB0打开sudo screen /dev/ttyUSB0 115200Raspberry Pi 常见串口配置是115200 8N1然后给 Pi 上电。如果正常你会看到类似U-Boot... Loading kernel... Starting kernel... Poky... core-image-minimal最终raspberrypi2 login:7. 登录系统如果你的镜像配置允许 root 登录那么可以尝试root进入以后uname -a检查cat /etc/os-release再mount以及df -h8. 测试 BusyBox这一步和我们前面正在分析的 busybox.bb 正好接上。在 Pi 上which busybox应该类似/bin/busybox然后busybox你应该看到 BusyBox 的信息。再busybox --list你会看到[[[acpid add-shell addgroup...lsmountpssh...这时候你就能把前面学习的东西真正串起来busybox.bb ▼ busybox recipe ▼ do_fetch do_unpack do_patch do_configure do_compile do_install do_package ▼ package ▼ rootfs ▼ core-image-minimal ▼ .wic ▼ SD Card ▼ Raspberry Pi2▼ /bin/busybox这其实就是你现在这套学习路线最重要的一条线。9. 再做一个非常有价值的测试在 Pi 上ls -l /bin/busybox然后ls -l /bin/ls你很可能会发现/bin/ls - busybox或者类似的软链接关系。再readlink -f /bin/ls可能得到/usr/bin/busybox这时候就可以理解用户输入ls↓ /bin/ls ↓ symboliclinkbusybox ↓ BusyBox 根据 argv[0]↓ 执行lsapplet这比单纯跑 ls 更有学习价值。10. 最后做一个SD 卡读写测试在 Pi 上不要直接拿整个 SD 卡做危险测试。先找 rootfsdf -h假设/dev/mmcblk0p2 1.5G然后测试普通文件写入cd/tmpddif/dev/zerooftestfilebs1Mcount100sync检查ls -lh testfile然后rm testfile这测试的是userspace ↓ filesystem ↓ kernel VFS ↓ mmc driver ↓ SD card11. 我建议你现在不要急着继续折腾 SD 卡你现在最适合做的是一次完整实验。在 PCcd~/yocto/build-rpi2 bitbake core-image-minimalls-lhtmp/deploy/images/raspberrypi2/*.wic lsblksudoumount/dev/sdbsudodd\iftmp/deploy/images/raspberrypi2/core-image-minimal-raspberrypi2.rootfs.wic\of/dev/sdb\bs4M\statusprogress\convfsyncsync然后 Piuname-acat/etc/os-releasewhichbusybox busybox--listls-l/bin/ls readlink-f/bin/lsdf-hmount检查这几个命令的输出。.wic 文件到底是怎么生成的 → WIC 如何定义分区 → boot 分区里面有什么 → rootfs 分区里面有什么 →/bin/busybox 是怎么从 busybox.bb 一路进入 SD 卡的。这一步做完你前面学的 busybox.bb → task → package → rootfs 就真正闭环了。
02
RELATED NEWS

相关资讯

更多网站建设与数字化升级内容

03
WHY YAOTU

想打造同款高转化官网?

懂行业、懂生意,从建站到增长一站式陪跑

◈

场景化定制

不做模板站,围绕你的业务场景量身设计,小众不撞款。

◐

营销型架构

以转化目标组织内容与路径,让官网真正带来询盘。

▲

全周期服务

设计、开发、运营、运维一体,上线只是开始。

免费获取你的建站方案

留下需求,专属顾问 24 小时内为你输出方案建议。