- Fedora21
- libvirt
- virt-manager
- qemu-system-arm
- libguestfs-tools-c
- Raspbian
- Pidora20
qemu-system-armとlibguestfs-tools-cをインストールする。
# yum install qemu-system-arm libguestfs-tools-c
- Raspbianイメージのマウント
# fdisk -l 2014-12-24-wheezy-raspbian.img
Disk 2014-12-24-wheezy-raspbian.img: 7.1 GiB, 7571767296 bytes, 14788608 sectors
単位: セクタ (1 * 512 = 512 バイト)
セクタサイズ (論理 / 物理): 512 バイト / 512 バイト
I/O サイズ (最小 / 推奨): 512 バイト / 512 バイト
ディスクラベルのタイプ: dos
ディスク識別子: 0x000c45c9
Device Boot Start End Sectors Size Id Type
2014-12-24-wheezy-raspbian.img1 8192 122879 114688 56M c W95 FAT32
2014-12-24-wheezy-raspbian.img2 122880 14788607 14665728 7G 83 Linux
セクタサイズが512、開始セクタが122880なので、512×122880=62914560をオフセットにしてマウントする。
# mount -o loop,offset=62914560 <イメージ> <マウントポイント>
- <マウントポイント>/etc/ld.so.preloadのコメントアウト
#/usr/lib/arm-linux-gnueabihf/libcofi_rpi.so
Jessieの場合でも、ここでロードされているモジュールはコメントアウトしておく。
- デバイスファイルのマッピング <マウントポイント>/etc/udev/rules.d/90-qemu.rulesの新規作成 ※Jessieでは不要。その代わり、/etc/fstabのmmcblkのマウントポイントをコメントアウトしておく。
KERNEL=="sda", SYMLINK+="mmcblk0"
KERNEL=="sda?", SYMLINK+="mmcblk0p%n"
KERNEL=="sda2", SYMLINK+="root"
- タイムゾーン変更
# cp <マウントポイント>/usr/share/zoneinfo/Asia/Tokyo <マウントポイント>/etc/localtime
- アンマウント
# qemu-img resize <イメージ> +<サイズ>
# fdisk <イメージ>
この手順でqemu-imgがエラーを吐く場合は、 -f raw
を追加する。
一旦2番目のパーティションを削除削除し、同じ開始セクタでパーティションを作り直す。
<domain type='qemu'>
<name>Raspbian</name>
<uuid><!-- UUID。uuidgenで生成可能。 --></uuid>
<memory unit='KiB'>262144</memory>
<currentMemory unit='KiB'>262144</currentMemory>
<vcpu placement='static'>1</vcpu>
<os>
<type arch='armv7l' machine='versatileab'>hvm</type>
<kernel><!-- QEMU用ARMカーネル https://github.com/polaco1782/raspberry-qemu --></kernel>
<boot dev='hd'/>
<cmdline>root=/dev/sda2 panic=1 rootfstype=ext4 rw</cmdline>
</os>
<features>
<acpi/>
</features>
<cpu mode='custom' match='exact'>
<model fallback='allow'>arm1176</model>
</cpu>
<clock offset='utc'/>
<on_poweroff>destroy</on_poweroff>
<on_reboot>restart</on_reboot>
<on_crash>restart</on_crash>
<devices>
<emulator>/usr/bin/qemu-system-arm</emulator>
<disk type='file' device='disk'>
<driver name='qemu' type='raw'/>
<source file='イメージファイル'/>
<target dev='hdc' bus='scsi'/>
<address type='drive' controller='0' bus='0' target='0' unit='2'/>
</disk>
<controller type='scsi' index='0'/>
<graphics type='vnc' port='-1' autoport='yes'/>
<video>
<model type='xen' vram='4096' heads='1'/>
</video>
<interface type='network'>
<source network='default'/>
<model type='smc91c111'/>
</interface>
</devices>
<seclabel type='dynamic' model='selinux' relabel='yes'/>
</domain>
- メモリは256MB固定。それ以外だと起動しない。
- アーキテクチャはarmv7l、マシンはversatileabにする。
- 様々なサイトでマシンにversatilepbを指定するとあるが、versatilepbだとPCIバスがないとエラーになる
- CPUはarm1176
- videoはxen。これ以外だと起動しない。
- NICはsm91c111。これ以外だとvirbr0につながらない。
# virsh define <ドメイン定義ファイル>
virshでもvirt-managerでも、好きな方法で。 でも、初期設定が走るのでvirt-manager経由がオススメ。 起動が終わったら
# resize2fs /dev/sda2
でパーティションサイズを変更しておく。
最近のQEMUはRaspberry Pi 2にも対応しているらしい。