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

ネットワーク込みの起動スクリブトはこんなのでいいらしい。

#!/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 する。

2008年9月14日日曜日

CentOS

NICを交換するとMACアドレスが違うと言われて、インタフェースが上らなくなる。

/usr/sbin/kudzu

で、旧NICを削除して、新NICを認識させる必要がある。

kudzuのデータベースは /etc/sysconfig/hwconf にある。
何故か /etc/sysconfig/network-scripts/ifcfg-eth0 にも
MACアドレスが入ってたりする。。。

Serial Consoleを使うなら
/boot/grub/menu.lstに以下を追加。
serial --unit=0 --speed=9600 --word=8 --parity=no --stop=1
terminal serial

また、Kernelのオプションに以下を追加。
console=tty0 console=ttyS0,9600n8

/etc/inittab に以下を追加。
s0:12345:respawn:/sbin/agetty -L 9600 ttyS0 vt100

/etc/securetty に ttyS0 を追加。

qemuのオプションに -serial stdio を追加して起動

2008年9月1日月曜日

dnsmasq

openblocksのdhcp serverをdnsmaqに

aptitude install dnsmasq

cat /etc/dnsmasq.conf
interface=eth0
no-dhcp-interface=eth1
dhcp-range=192.168.0.200,192.168.0.240,12h

sudo aptitude purge dhcp3-server