-title: システムコール 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 用に作成する 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:1234 1234は、ie-virsh dumpxml で debug port を探します。 (gdb) b sys_read して、 (gdb) c VNC側から何か入力すると、sys_read で停まるはずです。