システムコール
Menu Menu
Fedora 上で、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 用に作成する
なんですが、ansible file が用意されてます。sudo dnf install ncurses-devel make menuconfig make >& ers & disown %m exit
これをしないと以下の課題ができません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 は下記になります。
がdebug対象になります。Fedora 24 です。password resetしないとloginできませんが、loginしなくても良いです。/mnt/whisky/os/teachers/kono/02.qcow2
にkernel sourceが置いてあります。/net/open/Linux/Kernel/fedora26
としてdebug 用にvmを定義します。この時にVNC passwordが表示されるので、それを覚えておきます。ie-virsh gdb-define 01
指定された VM image のpathに 02.qcow2 をsymbolic linkします。
定義したVmをln -s /mnt/whisky/os/teachers/kono/02.qcow2 /mnt/whisky/os/student/exx/exxxxxxx/01.qcow2
で起動します。この時、VNCで接続して Boot時に linux-4.8.12 を選択します。ie-virsh start 01
VNCは、
で画面番号を確認し、5900 + 画面番号のportでアクセスします。この時に、define 時に出たpasswordを使って接続します。dumpxml では password は見れません。(何故かそうなっている)ie-virsh vncdisplay 01
ホスト側で、
とし、cd /net/open/Linux/Kernel/fedora26 gdb vmlinux
1234は、ie-virsh dumpxml で debug port を探します。(gdb) target remote localhost:1234
して、(gdb) b sys_read
VNC側から何か入力すると、sys_read で停まるはずです。(gdb) c