Skip to content

Latest commit

 

History

History
151 lines (114 loc) · 5.17 KB

qemu_persistent_disk.md

File metadata and controls

151 lines (114 loc) · 5.17 KB

在硬盘上运行 QEMU

在硬盘上运行 QEMU 就像有一个真正的硬件一样有用。

具体来说,你需要一个 /data minfs 分区和一个 /blob blobfs 分区,但是 /system/boot 来自本地构建。这就是 QEMU 解决的问题。

*注意:*以 $ 开头的是输入行,其他为输出行。

创建磁盘镜像

blk.binfrun / mrun 命令传入 -d 时查找的镜像名称。在 $FUCHSIA_DIR 创建一个 1G 大小的文件。

Linux:

$ cd $FUCHSIA_DIR
$ truncate -s 1g blk.bin

macOS:

$ cd $FUCHSIA_DIR
$ mkfile -n 1g blk.bin

启动 Zircon

你不需要完整的 Fuchsia UI 来设置磁盘镜像,所以只需要 Zircon 启动之后就可以开始安装。

$ mrun -d
[00000.000] 00000.00000> multiboot: info @ 0xffffff8000009500
[00000.000] 00000.00000> multiboot: cmdline @ 0xffffff8000253059
[00000.000] 00000.00000> multiboot: ramdisk @ 00254000..0ec607e0
[00000.000] 00000.00000> bootdata: @ 0xffffff8000254000 (245417952 bytes)
[00000.000] 00000.00000>
[00000.000] 00000.00000> welcome to lk/MP
(etc)

初始化 GPT

清空 blk.bin 镜像需要分区表。

$ gpt init /dev/class/block/000
blocksize=0x200 blocks=2097152
WARNING: You are about to permanently alter /dev/class/block/000

Type 'y' to continue, any other key to cancel
invalid header magic!
[00031.068] 02004.02044> device: 0x4e3af554b000(sata0): ref=0, busy, not
releasing
[00031.070] 01043.01046> devcoord: drv='block' bindable to dev='sata0'
[00031.072] 01043.01166> devmgr: new block device: /dev/class/block/001
GPT changes complete.
[00031.077] 01043.01166> devmgr: /dev/class/block/001: GPT?
[00031.078] 01043.01046> devcoord: dc_bind_device() '/boot/driver/gpt.so'
[00031.078] 01043.01046> devcoord: drv='gpt' bindable to dev='block'

创建分区

现在有了一个空的分区表,重新分配为 500M 的数据区和 500M 的 blob 分区

$ gpt repartition /dev/class/block/001 data data 500m blob blobfs 500m
blocksize=0x200 blocks=2097152
data: 524288000 bytes, 1024000 blocks, 48-1024063
blob: 524288000 bytes, 1024000 blocks, 1024064-2048079
[00242.582] 02004.02044> device: 0x4e3af554b000(sata0): ref=0, busy, not
releasing
[00242.584] 01043.01046> devcoord: drv='block' bindable to dev='sata0'
[00242.587] 01043.01166> devmgr: new block device: /dev/class/block/002 GPT
changes complete.
[00242.594] 01043.01166> devmgr: /dev/class/block/002: GPT?
[00242.596] 01043.01046> devcoord: dc_bind_device() '/boot/driver/gpt.so'
[00242.596] 01043.01046> devcoord: drv='gpt' bindable to dev='block'
[00242.619] 01043.01046> devcoord: drv='block' bindable to dev='part-000'
[00242.622] 01043.01166> devmgr: new block device: /dev/class/block/003
[00242.624] 01043.01046> devcoord: drv='block' bindable to dev='part-001'
[00242.628] 01043.01166> devmgr: new block device: /dev/class/block/004

创建文件系统

在新的分区上创建 minfs 文件系统和 blobfs 文件系统。

$ mkfs /dev/class/block/003 minfs
$ mkfs /dev/class/block/004 blobfs

完成后你就可以重启系统传入 -d 参数给 frun 命令运行硬盘。

备份

有时你会需要一个新的干净的磁盘镜像。那么在你创建完镜像后你可以压缩 blk.bin 作为备份。

$ gzip blk.bin

那么在你需要时你可以解压压缩的 blk.bin。

$ gunzip -k blk.bin.gz

多种实例

如果想要运行多种 QEMU 的实例,你需要使用不同的磁盘镜像。每种都有不同的磁盘镜像。你可以按照上面的操作说明传入 -D other-disk-name.binmrunfrun 指定其他位置。