デバッグ可能なLinuxカーネルのコンパイル



の準備を


 

カーネルソース

  • linuxカーネルソース
  • をダウンロード
  • /usr/src下
  • に解凍
     

    gdb準備

  • gdbソースコードをダウンロードし、ftp://oss.sgi.com/www/projects/kdb/download/v4.4/
  • ダウンロードのバージョンは、カーネルをコンパイルするバージョンと一致する必要があり、kdb-v 4をダウンロードする必要がある.4-2.6.32-x86-3.bz 2とkdb-v 4.4-2.6.32-common-3.bz 2 2 2つの圧縮パケット
  • は2つのgdbパッチをコンパイルするソースコードに入力し、第1の動作テストは、カーネルと衝突しているかどうかを確認し、rootで実行し、/usr/src/linuxディレクトリの下にある必要があります.

  •  
    bzip2 -dc /usr/src/patch.bz2 | patch -p1 --dry-run
    bzip2 -dc /usr/src/patch.bz2 | patch -p1
    

     

    コンフィギュレーション


     

    カーネルの構成

  • は一般にmake menuconfigを用いて
  • を構成する.
  • ヒントncursesが見つからない場合はインストールが必要ですapt-get install ncurses-dev
  • 現在使用されているプロファイルをコピーすることができ、構成時に最後から2番目の「1つの構成を読み込む」を使用し、さらにいくつかの変更をすれば
  • になります.
     
    cp /boot/config-linux2.6.31.16-generic ./.config 
    
  • /usr/src/linux/でmake menuconfig
  • を実行
    ==配置KDB=*配置カーネルの中のKDBは、直接vi/vimで開くことができる.修正
    CONFIG_KDB=y
    CONFIG_KDB_MODULES=n
    CONFIG_KDB_OFF=n
    CONFIG_KALLSYMS=y
    CONFIG_FRAME_POINTER=y
    

     

    カーネルのコンパイル

  • make dep、コンパイル時に必要な依存ファイル
  • を確立する
    *make clean、コンパイルされたターゲットファイルをクリア
  • makeは、カーネルミラーと構成されたモジュール
  • を含むすべてのものをコンパイルする.
     

    カーネルのインストール


     

    インストール

  • make modules_install、成功するとlib/modulesディレクトリの下にロード可能なすべてのモジュールを含むディレクトリが生成されます.約5分
  • です.
  • make install、bzImageを/bootに自動的にコピーしますが、initrdはコピーしていないようです.img、おかしい
  •  

    initrdを作成します。img

  • cdからルートディレクトリの下、mkinitramfs-o/boot/initrd.img-2.6.31.62.6.31.6、initrdを作成する.img、後は2.6.31.6バージョン番号
  • に続く必要があります.
     

    起動オプションの作成

  • 修正/boot/grub/grub.cfg、ネット上の多くはgrubと呼ばれています.confは、2セグメントのコードを追加し、その経路を変更するだけで
  • が可能である.
     
    menuentry "Ubuntu, Linux 2.6.31.6" {
            recordfail=1
            if [ -n ${have_grubenv} ]; then save_env recordfail; fi
        set quiet=1
        insmod ext2
        set root=(hd0,1)
        search --no-floppy --fs-uuid --set a1ae8a36-84bd-4252-9960-2bcb73366f5a
        linux    /boot/vmlinuz-2.6.31.6 root=UUID=a1ae8a36-84bd-4252-9960-2bcb73366f5a ro   quiet splash
        initrd    /boot/initrd.img-2.6.31.6
    }
    menuentry "Ubuntu, Linux 2.6.31.6 (recovery mode)" {
            recordfail=1
            if [ -n ${have_grubenv} ]; then save_env recordfail; fi
        insmod ext2
        set root=(hd0,1)
        search --no-floppy --fs-uuid --set a1ae8a36-84bd-4252-9960-2bcb73366f5a
        linux    /boot/vmlinuz-2.6.31.6 root=UUID=a1ae8a36-84bd-4252-9960-2bcb73366f5a ro single 
        initrd    /boot/initrd.img-2.6.31.6
    }
    

     

    テスト

  • rootでecho"1">/proc/sys/kernel/kdbと入力し、インストールが正常であることに反応しなかった>
  • 仮想マシンでctrl+alt+space+F 1を同時に押すとxtermモードに入り、kdbを入力してkdbデバッグ環境に入り、goを入力して終了します.