gentooで KVM + qemu を動かす
1. linux kernelの設定
Processor type and features > Paravirtualized guest support
- KVM paravirtualized clock
- KVM Guest support
Virtualization
- Kernel-based Virtual Machine (KVM) support
- KVM for Intel processors support
- KVM for AMD processors support
- PCI driver for virtio devices
- Virtio balloon driver
※ Guest supportはいらないかも、processors supportも必要な方だけで良さげ
2. kernel moduleの設定
kvmのモジュール(kvm-intel)を group kvm でロードされるようにする
groupadd kvm
gpasswd -a YOURACCOUNT kvm
cat /etc/udev/rules.d/65-kvm.rules
KERNEL=="kvm", MODE="0660", GROUP="kvm"
ACTION=="add|change", SUBSYSTEM=="dmi", KERNEL=="id", RUN+="/bin/sh -c 'grep -q vmx /proc/cpuinfo && /sbin/modprobe kvm-intel; grep -q svm /proc/cpuinfo && /sbin/modprobe kvm-amd'"
※ 65-kvm.rules は
ebuild /usr/portage/app-emulation/kvm-kmod/kvm-kmod-2.6.32.7.ebuild fetch
でフェッチしたファイルの scripts/65-kvm.rules と一緒
3. qemuのコンパイル
git clone git://git.savannah.nongnu.org/qemu.git
./configure --prefix=/opt --disable-xen --enable-kvm --kerneldir=/usr/src/linux --target-list=x86_64-softmmu,i386-softmmu
make install
※ kerneldirでlinux kernel sourceを指定しないと
#error Missing KVM capability KVM_CAP_DESTROY_MEMORY_REGION_WORKS
なエラーが発生する
4. qemuの起動と確認
/opt/bin/qemu -enable-kvm
で実行して、Ctrl+Alt+2 で info kvm を実行してみる
(qemu) info kvm
kvm support: enabled
2010年2月24日水曜日
2010年1月28日木曜日
qemu on opensolaris
$ uname -a
SunOS opensolaris 5.11 snv_111b i86pc i386 i86pc Solaris
の上で qemuを動かす。
http://hub.opensolaris.org/bin/view/Project+qemu/BuildingOnOS200805
上記サイトにある
QEMU TCG (Tiny Code Generator) source SVN version 0.9.1, June 22, 2008
は ok.
subversion でチェックアウトしたヤツはdebianのインストーラが途中で固まる。
コンパイル
./configure --prefix=/opt/qemu --target-list=x86_64-softmmu,i386-softmmu --disable-kqemu
pfexec gmake install
qemuのオプション
qemu -m 512 -k en-us -hda hda.img -boot c -net user -net nic,model=rtl8139 -redir tcp:5022::22
で起動して、Host側から
ssh -X localhost -p 5022
で接続すればログインして、X11 forwardingができる。
SunOS opensolaris 5.11 snv_111b i86pc i386 i86pc Solaris
の上で qemuを動かす。
http://hub.opensolaris.org/bin/view/Project+qemu/BuildingOnOS200805
上記サイトにある
QEMU TCG (Tiny Code Generator) source SVN version 0.9.1, June 22, 2008
は ok.
subversion でチェックアウトしたヤツはdebianのインストーラが途中で固まる。
コンパイル
./configure --prefix=/opt/qemu --target-list=x86_64-softmmu,i386-softmmu --disable-kqemu
pfexec gmake install
qemuのオプション
qemu -m 512 -k en-us -hda hda.img -boot c -net user -net nic,model=rtl8139 -redir tcp:5022::22
で起動して、Host側から
ssh -X localhost -p 5022
で接続すればログインして、X11 forwardingができる。
2009年8月6日木曜日
live-android on qemu
http://code.google.com/p/live-android/
networkがダメかと思ったら、なんだ、動くんじゃん。
http://code.google.com/p/live-android/issues/detail?id=26
と言う訳で、qemuでnetworkを使う場合には
-net nic,model=pcnet
を付ければ良い。
#!/bin/bash
set -x
User=$USER
TAP=$(sudo tunctl -b -u $User)
sudo /sbin/ifconfig $TAP 0.0.0.0 promisc up
sudo /sbin/brctl addif br0 $TAP
qemu -k en-us -m 256 -cdrom liveandroidv0.2.iso -boot d -net nic,model=pcnet -net tap,ifname=$TAP,script=no
sudo tunctl -d $TAP
Mac Bookだと
Alt + fn + F1 でコンソール
Alt + fn + F7 でGUI
ミドルクリックで Home戻る
が、menuキーがないっす。"~"も入力できないっす。
"~"はコンソールだと入力できるんだけどなぁ
=> Menuキーは
xmodmap -e "keycode 133=Menu"
として、左アップルキーを割り合てて解決♪
しっかし、DNS設定するのに
setprop net.eth0.dns1 yourDNS
って、なんですかコレ。
networkがダメかと思ったら、なんだ、動くんじゃん。
http://code.google.com/p/live-android/issues/detail?id=26
と言う訳で、qemuでnetworkを使う場合には
-net nic,model=pcnet
を付ければ良い。
#!/bin/bash
set -x
User=$USER
TAP=$(sudo tunctl -b -u $User)
sudo /sbin/ifconfig $TAP 0.0.0.0 promisc up
sudo /sbin/brctl addif br0 $TAP
qemu -k en-us -m 256 -cdrom liveandroidv0.2.iso -boot d -net nic,model=pcnet -net tap,ifname=$TAP,script=no
sudo tunctl -d $TAP
Mac Bookだと
Alt + fn + F1 でコンソール
Alt + fn + F7 でGUI
ミドルクリックで Home戻る
が、menuキーがないっす。"~"も入力できないっす。
"~"はコンソールだと入力できるんだけどなぁ
=> Menuキーは
xmodmap -e "keycode 133=Menu"
として、左アップルキーを割り合てて解決♪
しっかし、DNS設定するのに
setprop net.eth0.dns1 yourDNS
って、なんですかコレ。
2009年6月4日木曜日
mips in qemu
qemu-system-mips を使ってみる。
を使ってみる。
と言っても、クロスコンパイラ用意できてないし、
とりあえず、test imageで...
http://www.nongnu.org/qemu/download.html
mips-test-0.2.tar.gz の run-qemu にある通り
qemu-system-mips -kernel vmlinux-2.6.18-3-qemu -initrd initrd.gz -append "console=ttyS0 init=/bin/sh" -nographic -m 128 -hda ../hda.img
で、あっさり起動。
qemu: Warning, could not load MIPS bios '/usr/share/qemu/mips_bios.bin'
Linux version 2.6.18-3-qemu (Debian 2.6.18-8) (waldi@debian.org) (gcc version 4.1.2 20061115 (prerelease) (Debian 4.1.1-20)) #1 Mon Dec 11 02:18:57 UTC 2006
CPU revision is: 00019300
FPU revision is: 00739300
Determined physical RAM map:
memory: 08000000 @ 00000000 (usable)
Initial ramdisk at: 0x802d7000 (2663940 bytes)
Built 1 zonelists. Total pages: 32768
Kernel command line: rd_start=0x802d7000 rd_size=2663940 console=ttyS0 init=/bin/sh
...
やっぱり、mips_bios.bin が無いって言われてるなぁ。
u-boot をコンパイルすればいいのかな...
を使ってみる。
と言っても、クロスコンパイラ用意できてないし、
とりあえず、test imageで...
http://www.nongnu.org/qemu/download.html
mips-test-0.2.tar.gz の run-qemu にある通り
qemu-system-mips -kernel vmlinux-2.6.18-3-qemu -initrd initrd.gz -append "console=ttyS0 init=/bin/sh" -nographic -m 128 -hda ../hda.img
で、あっさり起動。
qemu: Warning, could not load MIPS bios '/usr/share/qemu/mips_bios.bin'
Linux version 2.6.18-3-qemu (Debian 2.6.18-8) (waldi@debian.org) (gcc version 4.1.2 20061115 (prerelease) (Debian 4.1.1-20)) #1 Mon Dec 11 02:18:57 UTC 2006
CPU revision is: 00019300
FPU revision is: 00739300
Determined physical RAM map:
memory: 08000000 @ 00000000 (usable)
Initial ramdisk at: 0x802d7000 (2663940 bytes)
Built 1 zonelists. Total pages: 32768
Kernel command line: rd_start=0x802d7000 rd_size=2663940 console=ttyS0 init=/bin/sh
...
やっぱり、mips_bios.bin が無いって言われてるなぁ。
u-boot をコンパイルすればいいのかな...
2008年10月6日月曜日
Gentoo & qemu その2
gentoo gcc-3.4.6 で cvs版の qemu をコンパイルしようとするも...
release_0_9_0/target-i386/ops_sse.h:213: error: this is
the insn:
(insn:HI 36 35 37 3 release_0_9_0/target-i386/ops_sse.h
:207 (parallel [
(set (reg:DI 63 [.q ])
(lshiftrt:DI (reg:DI 63 [.q ])
(subreg:QI (reg/v:SI 60 [ shift ]) 0)))
(clobber (scratch:SI))
(clobber (reg:CC 17 flags))
]) 309 {lshrdi3_1} (insn_list 33 (insn_list 35 (nil)))
(expr_list:REG_DEAD (reg/v:SI 60 [ shift ])
(expr_list:REG_UNUSED (reg:CC 17 flags)
(expr_list:REG_UNUSED (scratch:SI)
(nil)))))
release_0_9_0/target-i386/ops_sse.h:213: 前のエラーにより混乱していますので、脱出します
make[1]: *** [op.o] エラー 1
gentoo の gcc-3.4.6 はダメ?らしい。
http://docs.openmoko.org/trac/ticket/1093
しかたなく...
/etc/portage/package.keywords に sys-devel/gcc:3.3 ~x86 を追加して、
emerge -av sys-devel/gcc:3.3
で、gcc-3.3.6 をインストール。
qemu は ./configure --host-cc=/usr/bin/gcc-3.3.6 --cc=/usr/bin/gcc-3.3.6
で compile できました♪
release_0_9_0/target-i386/ops_sse.h:213: error: this is
the insn:
(insn:HI 36 35 37 3 release_0_9_0/target-i386/ops_sse.h
:207 (parallel [
(set (reg:DI 63 [
(lshiftrt:DI (reg:DI 63 [
(subreg:QI (reg/v:SI 60 [ shift ]) 0)))
(clobber (scratch:SI))
(clobber (reg:CC 17 flags))
]) 309 {lshrdi3_1} (insn_list 33 (insn_list 35 (nil)))
(expr_list:REG_DEAD (reg/v:SI 60 [ shift ])
(expr_list:REG_UNUSED (reg:CC 17 flags)
(expr_list:REG_UNUSED (scratch:SI)
(nil)))))
release_0_9_0/target-i386/ops_sse.h:213: 前のエラーにより混乱していますので、脱出します
make[1]: *** [op.o] エラー 1
gentoo の gcc-3.4.6 はダメ?らしい。
http://docs.openmoko.org/trac/ticket/1093
しかたなく...
/etc/portage/package.keywords に sys-devel/gcc:3.3 ~x86 を追加して、
emerge -av sys-devel/gcc:3.3
で、gcc-3.3.6 をインストール。
qemu は ./configure --host-cc=/usr/bin/gcc-3.3.6 --cc=/usr/bin/gcc-3.3.6
で compile できました♪
2008年9月15日月曜日
Gentoo & qemu
http://gentoo-wiki.com/HOWTO:_Qemu
gcc 4.X だとコンパイルできないので、3.X を持ってくる。
emerge -av sys-devel/gcc:3.4
- x86_64環境で /etc/make.conf に CFLAGS="-O2 -march=core2 -pipe" を書いてる場合は
sudo sh -c "CFLAGS=\"-O2 -pipe\" CXXFLAGS=\"-O2 -pipe\" emerge sys-devel/gcc:3.4"
gcc-3.4 でコンパイル
sudo sh -c "CC=gcc-3.4 emerge qemu-softmmu"
ネットワークに tun を使うならコレも
emerge sys-apps/usermode-utilities
ネットワークに bridge を使うならコレも
emerge net-misc/bridge-utils
kqemuを使うなら
cat /etc/modules.autoload.d/kernel-2.6
kqemu major=0
group qemu に追加
gpasswd -a HOGE qemu
ネットワーク込みの起動スクリブトはこんなのでいいらしい。
もちろん、ネットワークはbridgeで設定してないとダメ。
/etc/init.d/net.eth0 stop
brctl addbr br0
brctl addif br0 eth0
ifconfig eth0 up
ifconfig br0 up
dhcpcd br0
gcc 4.X だとコンパイルできないので、3.X を持ってくる。
emerge -av sys-devel/gcc:3.4
- x86_64環境で /etc/make.conf に CFLAGS="-O2 -march=core2 -pipe" を書いてる場合は
sudo sh -c "CFLAGS=\"-O2 -pipe\" CXXFLAGS=\"-O2 -pipe\" emerge sys-devel/gcc:3.4"
gcc-3.4 でコンパイル
sudo sh -c "CC=gcc-3.4 emerge qemu-softmmu"
ネットワークに tun を使うならコレも
emerge sys-apps/usermode-utilities
ネットワークに bridge を使うならコレも
emerge net-misc/bridge-utils
kqemuを使うなら
cat /etc/modules.autoload.d/kernel-2.6
kqemu major=0
group qemu に追加
gpasswd -a HOGE qemu
ネットワーク込みの起動スクリブトはこんなのでいいらしい。
#!/bin/bash
set -x
User=$USER
TAP=$(sudo tunctl -b -u $User)
sudo /sbin/ifconfig $TAP 0.0.0.0 promisc up
sudo /sbin/brctl addif br0 $TAP
qemu -hda hda.img -net nic -net tap,ifname=$TAP,script=no
sudo tunctl -d $TAP
もちろん、ネットワークはbridgeで設定してないとダメ。
/etc/init.d/net.eth0 stop
brctl addbr br0
brctl addif br0 eth0
ifconfig eth0 up
ifconfig br0 up
dhcpcd br0
kgdb on linux-2.6.26
kernel 2.6.26には kgdbがマージされている。
以下のオプションを有効にしたkernelを作成。
Kernel hacking
KGDB: kernel debugging with remote gdb
KGDB: use kgdb over the serial console
grub menu.lstのkernelオプションに以下を追加。
kgdboc=ttyS1,9600 kgdbwait
qemu のserialで kgdbに接続するなら
オプションに -serial stdin -serial pty を
付けて起動し、ホスト側で gdb を起動
cd linux-2.6.26
gdb
(gdb) file vmlinux
(gdb) set remotebaud 9600
(gdb) break init_post
(gdb) target remote /dev/pts/0
で、kgdbに接続できる。
けど、gdbを Ctrl-c で止めると再接続できないよ ^^;
結局、qemu使った方がラク
qemu -s -kernel linux-2.6.26/arch/x86/boot/bzImage -h -initrd initrd-2.6.26.img da hda.img -append "root=/dev/VolGroup00/LogVol00"
(gdb) target remote localhost:1234
... gdbの接続待ってくれないのがイマイチですが...
moduleをデバッグする場合は...
linux起動後、ターゲットモジュールを insmod して、
cat /proc/modules で アドレスを確認。
...
ne2k_pci 8680 0 - Live 0xc8815000
...
gdb で symbol をロードすれば良い。
(gdb) add-symbol-file drivers/net/ne2k-pci.ko 0xc8815000
(gdb) break ne2k_pci_open
で、ifconfig eth0 X.X.X.X/24 とかすると break する。
以下のオプションを有効にしたkernelを作成。
Kernel hacking
KGDB: kernel debugging with remote gdb
KGDB: use kgdb over the serial console
grub menu.lstのkernelオプションに以下を追加。
kgdboc=ttyS1,9600 kgdbwait
qemu のserialで kgdbに接続するなら
オプションに -serial stdin -serial pty を
付けて起動し、ホスト側で gdb を起動
cd linux-2.6.26
gdb
(gdb) file vmlinux
(gdb) set remotebaud 9600
(gdb) break init_post
(gdb) target remote /dev/pts/0
で、kgdbに接続できる。
けど、gdbを Ctrl-c で止めると再接続できないよ ^^;
結局、qemu使った方がラク
qemu -s -kernel linux-2.6.26/arch/x86/boot/bzImage -h -initrd initrd-2.6.26.img da hda.img -append "root=/dev/VolGroup00/LogVol00"
(gdb) target remote localhost:1234
... gdbの接続待ってくれないのがイマイチですが...
moduleをデバッグする場合は...
linux起動後、ターゲットモジュールを insmod して、
cat /proc/modules で アドレスを確認。
...
ne2k_pci 8680 0 - Live 0xc8815000
...
gdb で symbol をロードすれば良い。
(gdb) add-symbol-file drivers/net/ne2k-pci.ko 0xc8815000
(gdb) break ne2k_pci_open
で、ifconfig eth0 X.X.X.X/24 とかすると break する。
登録:
投稿 (Atom)