OS演習課題メモ
第11,12回課題
QEMU/KVMのディスクイメージのマウント方法
- ローカルでコンパイルしたカーネルモジュールを仮想マシンにコピーする方法の一つ。仮想マシン側にソフトウェアを入れる必要が無いので配布vm.imageでもそのままできる。
sudo mkdir /mnt/mntpoint sudo mount -o loop,offset=32256 vm.image /mnt/mntpoint
ホスト-ゲストでのpingは通るのに、ゲスト-ゲストでのpingがうまくいかない
- デフォルトのufwが厳しめらしく、テストしているとこの状態になる事があります。
sudo ufw disable
- これで一応ゲスト-ゲスト間通信は通るようになります。元に戻す時はsudo ufw enableで。 iptables -L が読めたり ufwの設定がわかる方はぜひ正しい解決策を教えてください。
カーネルメッセージの出し方、読み方
カーネルコード内
printk(KERN_INFO "message dayo-");
シェルコマンド
$ dmesg
とりあえずこれで見れる。KERN_*のヘッダやdmesgの詳細はmanあたりを参照してくだしい。
その他・参考URL
http://homepage3.nifty.com/rio_i/lab/driver24/000prologue.html
ioctlのrequest codeについて
ioctl(fd,request,args)の2番目の引数requestはioctlにどのようなデバイス操作を要求するかを表す数値ですが、
ここに入れる数値は何でもいいというわけではないようです。
ググると_IOW、_IOR、_IOCなどのマクロを使った方法が紹介された記事をよく見ますが、それでもダメな人は1を使ってみてください。
fd = open("dev/〜",O_RDWR); …… ioctl(fd,1,……);
どういう条件でカーネルが正当なリクエストコードだと認めるかどうかはよくわかりません(0,2などは通りませんでした)が、1は通るようです。
ioctlではMAKアドレスの指定という一つの操作が出来れば課題要件は満たせるので、これで事足りるはずです。
第10回課題
* 編集するファイル
- /linux-2.6.31/arch/x86/kernel/Makefile
- /linux-2.6.31/arch/x86/ia32/ia32entry.S
* 追加するファイル
- /linux-2.6.31/arch/x86/kernelにflip.c
- kvm上でテスト用のプログラムtest.cとか。
* その他