13と14のリビジョン間の差分
2011-08-26 19:18:33時点のリビジョン13
サイズ: 2094
編集者: Naoaki Iwakiri
コメント:
2011-08-30 12:57:54時点のリビジョン14
サイズ: 2924
編集者: TakuyaKuwahara
コメント:
削除された箇所はこのように表示されます。 追加された箇所はこのように表示されます。
行 41: 行 41:
== ioctlのrequest codeについて ==

ioctl(fd,request,args)の2番目の引数requestはioctlにどのようなデバイス操作を要求するかを表す数値ですが、<<BR>>
ここに入れる数値は何でもいいというわけではないようです。<<BR>>
ググると_IOW、_IOR、_IOCなどのマクロを使った方法が紹介された記事をよく見ますが、それでもダメな人は'''1'''を使ってみてください。<<BR>>
どういう条件でカーネルが正当なリクエストコードだと認めるかどうかはよくわかりません(0,2などは通りませんでした)が、1は通るようです。<<BR>>
ioctlではMAKアドレスの指定という一つの操作が出来れば課題要件は満たせるので、これで事足りるはずです。<<BR>>

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

ioctlのrequest codeについて

ioctl(fd,request,args)の2番目の引数requestはioctlにどのようなデバイス操作を要求するかを表す数値ですが、
ここに入れる数値は何でもいいというわけではないようです。
ググると_IOW、_IOR、_IOCなどのマクロを使った方法が紹介された記事をよく見ますが、それでもダメな人は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システムコールの実装とかはここが参考になるかも

  • こことかも参考になるかもしれません。


Categoryノート

システムプログラミング実験/課題メモ (最終更新日時 2011-09-05 14:29:49 更新者 fujima)