返回首页

在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 分钟):

ext2_setup erase
格式化

图1. 格式化

切换目录和查看目录内容

使用 fs cd /ext2 切换工作目录,使用 fs ls /ext2 查看目录内容。

查看目录

图2. 查看目录

创建目录

使用 fs mkdir /ext2/new_dir 创建目录,再执行 fs ls /ext2/ 查看新建的 new_dir。

创建目录

图3. 创建目录

写入文件

fs write /ext2/hello.txt 68 65 6c 6c 6f 20 7a 65 70 68 79 72 20 73 63 70

(对应文本为 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–1000x1005000Guest 0 记录起始 512 B,其余保留
100–2000x1037000Guest 1 记录起始 512 B,其余保留
200–3000x1069000Guest 2 记录起始 512 B,其余保留
300–4000x109b000Guest 3 记录起始 512 B,其余保留
400–5000x10cd000Guest 4 记录起始 512 B,其余保留
500–6000x10ff000Guest 5 记录起始 512 B,其余保留
600–7000x1131000Guest 6 记录起始 512 B,其余保留
700–8000x1163000Guest 7 记录起始 512 B,其余保留
800–9000x1195000Guest 8 记录起始 512 B,其余保留
900–10000x11c7000Guest 9 记录起始 512 B,其余保留
1000–10240x11f9000保留区域24 MiB
1024–10880x1205000Linux 内核 Image_5.1564 MiB
1088–11300x1225000RT Linux 内核 Image_6.12rt42 MiB
1130–11500x123a000Linux/RT Linux 共用 initramfs20 MiB
1150–11620x1244000Linux/RT Linux 共用 DTB 包12 MiB
1162–11940x124a000Android 内核32 MiB
1194–11960x125a000Android initramfs2 MiB
1196–11970x125b000Android DTB 包1 MiB
1197–12290x125b800OpenHarmony 内核32 MiB
1229–12390x126b800OpenHarmony initramfs10 MiB
1239–12400x1270800OpenHarmony DTB1 MiB
1240–30720x1271000保留区域1832 MiB
3072–61440x1605000第一个 virtio-blk Slot3072 MiB
6144–92160x1c05000第二个 virtio-blk Slot3072 MiB
9216–122880x2205000第三个 virtio-blk Slot3072 MiB
12288–153600x2805000第四个 virtio-blk Slot3072 MiB
15360–184320x2e05000第五个 virtio-blk Slot3072 MiB
18432–215040x3405000第六个 virtio-blk Slot3072 MiB
21504–245760x3a05000第七个 virtio-blk Slot3072 MiB
24576–276480x4005000第八个 virtio-blk Slot3072 MiB
27648–307200x4605000第九个 virtio-blk Slot3072 MiB
30720–337920x4c05000第十个 virtio-blk Slot3072 MiB