在Linux、Zephyr中使用文件系统
Virtio-blk 使用 TF 卡第二分区 3GB 之后的所有存储空间作为块设备,默认最多 10 个 Slot,每个 3GB 整,可以给 10 个客户 OS 使用。刷写以下镜像的 Slot 会被自动识别为 Linux rootfs,ZVM 会将其分配给对应 Linux 系统使用,空 Slot 则分配给 Zephyr 使用。
TF 卡第二分区详细布局请见附录。
01 在 Linux 中使用文件系统
Linux 支持多种文件系统,发行版 rootfs 默认使用 ext4。以下镜像在资源包中,请使用 auto_dd.sh 刷写到 TF 卡第二分区。
| Rootfs | Rootfs 镜像文件名 |
|---|---|
| Buildroot | linux_diskimg_br_v2.1.bin |
| Ubuntu | linux_diskimg_u20_v2.1.bin |
| RT-linux | linux_diskimg_rt_v2.1.bin |
| OpenEuler | linux_diskimg_op_v2.1.bin |
| Android | linux_diskimg_android_v2.1.bin |
| OpenHarmony | linux_diskimg_oh_v2.1.bin |
02 在 Zephyr 中使用 ext2 文件系统
在 Zephyr 控制台中,可使用 fs 命令查看目录、读取和修改文件。以下以 /ext2 目录为例。
| 命令 | 用途 |
|---|---|
| fs cd | 切换当前工作目录 |
| fs ls | 列出目录内容 |
| fs mkdir | 创建目录 |
| fs pwd | 显示当前工作目录 |
| fs read | 读取文件内容 |
| fs cat | 读取文件并将内容输出到控制台 |
| fs rm | 删除文件 |
| fs statvfs | 显示文件系统状态 |
| fs trunc | 截断文件 |
| fs write | 写入文件 |
查看帮助和格式化文件系统
使用 fs help 查看可用命令。
格式化文件系统(此操作每个 virtio blk 只需要一次,耗时约 2 分钟):
图1. 格式化
切换目录和查看目录内容
使用 fs cd /ext2 切换工作目录,使用 fs ls /ext2 查看目录内容。
图2. 查看目录
创建目录
使用 fs mkdir /ext2/new_dir 创建目录,再执行 fs ls /ext2/ 查看新建的 new_dir。
图3. 创建目录
写入文件
(对应文本为 hello zephyr scp)
图4. 写入文件
读取文件内容
使用 fs read /ext2/hello.txt 读取文件,控制台会显示文件大小、十六进制数据及对应字符。
图5. 读取文件
查看文本文件
使用 fs cat /ext2/hello.txt 直接显示文本内容,便于查看文本文件。
图6. 查看文本文件
查看文件系统状态
使用 fs statvfs /ext2 查看文件系统状态,包括块大小、总块数和空闲块数。
图7. 查看文件系统状态
追加写入文件
执行 fs write /ext2/hello.txt 58,在文件末尾追加一个十六进制字节 0x58,对应字符 X。再次使用 fs read 查看,文件大小由 17 字节变为 18 字节。
图8. 追加写入文件
截断文件
使用 fs trunc /ext2/hello.txt 3 将文件截断为 3 字节。再次读取后,文件中仅保留"hel"。
图9. 截断文件
删除文件
使用 fs rm /ext2/hello.txt 删除文件。删除后,可执行 fs cat /ext2/hello.txt 查看文件,确认文件已移除。
图10. 删除文件
附录 第二分区镜像布局
覆盖第二分区完整的前 3072 MiB。范围包含起点、不包含终点;镜像大小表示预留槽位大小。
| 第二分区内范围(MiB) | 整卡起始 LBA | 内容 | 占用说明 |
|---|---|---|---|
| 0–100 | 0x1005000 | Guest 0 记录 | 起始 512 B,其余保留 |
| 100–200 | 0x1037000 | Guest 1 记录 | 起始 512 B,其余保留 |
| 200–300 | 0x1069000 | Guest 2 记录 | 起始 512 B,其余保留 |
| 300–400 | 0x109b000 | Guest 3 记录 | 起始 512 B,其余保留 |
| 400–500 | 0x10cd000 | Guest 4 记录 | 起始 512 B,其余保留 |
| 500–600 | 0x10ff000 | Guest 5 记录 | 起始 512 B,其余保留 |
| 600–700 | 0x1131000 | Guest 6 记录 | 起始 512 B,其余保留 |
| 700–800 | 0x1163000 | Guest 7 记录 | 起始 512 B,其余保留 |
| 800–900 | 0x1195000 | Guest 8 记录 | 起始 512 B,其余保留 |
| 900–1000 | 0x11c7000 | Guest 9 记录 | 起始 512 B,其余保留 |
| 1000–1024 | 0x11f9000 | 保留区域 | 24 MiB |
| 1024–1088 | 0x1205000 | Linux 内核 Image_5.15 | 64 MiB |
| 1088–1130 | 0x1225000 | RT Linux 内核 Image_6.12rt | 42 MiB |
| 1130–1150 | 0x123a000 | Linux/RT Linux 共用 initramfs | 20 MiB |
| 1150–1162 | 0x1244000 | Linux/RT Linux 共用 DTB 包 | 12 MiB |
| 1162–1194 | 0x124a000 | Android 内核 | 32 MiB |
| 1194–1196 | 0x125a000 | Android initramfs | 2 MiB |
| 1196–1197 | 0x125b000 | Android DTB 包 | 1 MiB |
| 1197–1229 | 0x125b800 | OpenHarmony 内核 | 32 MiB |
| 1229–1239 | 0x126b800 | OpenHarmony initramfs | 10 MiB |
| 1239–1240 | 0x1270800 | OpenHarmony DTB | 1 MiB |
| 1240–3072 | 0x1271000 | 保留区域 | 1832 MiB |
| 3072–6144 | 0x1605000 | 第一个 virtio-blk Slot | 3072 MiB |
| 6144–9216 | 0x1c05000 | 第二个 virtio-blk Slot | 3072 MiB |
| 9216–12288 | 0x2205000 | 第三个 virtio-blk Slot | 3072 MiB |
| 12288–15360 | 0x2805000 | 第四个 virtio-blk Slot | 3072 MiB |
| 15360–18432 | 0x2e05000 | 第五个 virtio-blk Slot | 3072 MiB |
| 18432–21504 | 0x3405000 | 第六个 virtio-blk Slot | 3072 MiB |
| 21504–24576 | 0x3a05000 | 第七个 virtio-blk Slot | 3072 MiB |
| 24576–27648 | 0x4005000 | 第八个 virtio-blk Slot | 3072 MiB |
| 27648–30720 | 0x4605000 | 第九个 virtio-blk Slot | 3072 MiB |
| 30720–33792 | 0x4c05000 | 第十个 virtio-blk Slot | 3072 MiB |