システムコール
MenuFedora 上で、kernel source を install する。
以下を参考にすると良いらしいです。
http://fedoraproject.org/wiki/Docs/CustomKernel
4.4 を使うこと。kernel.org から、取ってくる。
運が良ければ、先輩たちが既に用意してくれているはず。
Yomitan / os.cr.ie.u-ryukyu.ac.jp の
/net/home/open/Linux/Kernelにあるかも!
kernel を compile する
kernel を fedora 上で gdb 用に作成する
sudo dnf install ncurses-devel make menuconfig make >& ers & disown %m exitなんですが、ansible file が用意されてます。
http://www.cr.ie.u-ryukyu.ac.jp/hg/Ansible/fedora_kernel_build/これをしないと以下の課題ができません
システムコールテーブル
arch x86_64 に関して以下のことを調べるがカーネル内部でシステムコール番号から関数ポインタに変換するテーブル。
select の番号はいくつか?
ファイルディスクリプタ
read が参照するファイルディスクリプタのカーネル内部での構造
fs/read_write.c を読む SYSCALL_DEFINE3(read, unsigned int, fd, char __user *, buf, size_t, count) struct の名称とソースファイル名を示せ。
ファイルディスクリプタの排他制御
ファイルディスクリプタ参照する際の排他制御はCレベルではどこでおこなわれているか。
hint fs/file.c
プロセスとスレッド
プロセスとスレッドが kernel の中でどのような構造を持っているかを調べる。
hint task_struct
VirtualBox や VMWare Fusion を使って、Linux kernel を gdb/lldb に接続する (option)
kernel を debug 用に config したものを使用する VM image を作成する
VM を定義している xml を debug 用に調整する
source と kernel を適切な場所に置き、kernel gdb を VM に接続する
system call table に break point をかけて、そこから trace する
OS の授業で使う kernel debug について
virsh 上にある debug 対象の VM は下記になります。
/mnt/whisky/os/teachers/kono/02.qcow2がdebug対象になります。Fedora 24 です。password resetしないとloginできませんが、loginしなくても良いです。
/net/open/Linux/Kernel/fedora26にkernel sourceが置いてあります。
ie-virsh gdb-define 01としてdebug 用にvmを定義します。この時にVNC passwordが表示されるので、それを覚えておきます。
指定された VM image のpathに 02.qcow2 をsymbolic linkします。
ln -s /mnt/whisky/os/teachers/kono/02.qcow2 /mnt/whisky/os/student/exx/exxxxxxx/01.qcow2定義したVmを
ie-virsh start 01で起動します。この時、VNCで接続して Boot時に linux-4.8.12 を選択します。
VNCは、
ie-virsh vncdisplay 01で画面番号を確認し、5900 + 画面番号のportでアクセスします。この時に、define 時に出たpasswordを使って接続します。dumpxml では password は見れません。(何故かそうなっている)
ホスト側で、
cd /net/open/Linux/Kernel/fedora26 gdb vmlinuxとし、
(gdb) target remote localhost:12341234は、ie-virsh dumpxml で debug port を探します。
(gdb) b sys_readして、
(gdb) cVNC側から何か入力すると、sys_read で停まるはずです。