##master-page:NoteTemplate
#format wiki
#language ja
= 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://lwn.net/Kernel/LDD3/]]
[[http://homepage3.nifty.com/rio_i/lab/driver24/000prologue.html]]
[[http://www.il.is.s.u-tokyo.ac.jp/lxr-xp/ident]]
[[http://togetter.com/li/184030]]
=== 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とか。
* その他
* flipシステムコールの実装とかは[[http://d.hatena.ne.jp/masami256/20100314/1268573016|ここ]]が参考になるかも
* [[http://pradeepkumar.org/2010/01/implementing-a-new-system-call-in-kernel-version-2-6-32.html|ここ]]とかも参考になるかもしれません。
----
[[Categoryノート]]