システムコール

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 用に作成する

    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 する

fedoraでlinux kernelのデバッグ環境


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 で停まるはずです。


Shinji KONO / Tue Dec 22 13:06:14 2020