デバッグモードでLinuxカーネルバージョン3.10.107と4.13.8を構築してみました。カーネルを構築するには、次の手順を使用しました。
ホストシステムにはUbuntu 16.04オペレーティングシステムがあり、デバッグ情報を使用してカーネルを最新バージョン(4.13.8)に更新しようとします。
最新のカーネルソースコードを入手する
wget https://www.kernel.org/pub/linux/kernel/v4.x/linux-4.13.8.tar.xz
mkdir linux-4.13.8 && tar xvf linux-4.13.8.tar.xz -C $(pwd)/linux-4.13.8/
cd linux-4.13.8
ホストLinuxで.configをコピーする
cp /boot/config-`uname -r`* .config
デバッグモードでカーネルを構築するには、次のオプションを有効にします。
gedit .config
CONFIG_DEBUG_KERNEL=y
CONFIG_FRAME_POINTER=y
CONFIG_KGDB=y
CONFIG_KGDB_SERIAL_CONSOLE=y
CONFIG_DEBUG_INFO=y
menuconfigのGUIメニューを確認しました。
make menuconfig
カーネルハッキングオプション(カーネルデバッグ、カーネルデバッグメッセージのコンパイル、Printkオプション)が有効になっており、デフォルトのデバッグメッセージとコンソールレベルは7です。
make コマンドが実行されました。カーネルの構築が成功しました。
-j4を作成
カーネルのインストール
sudo make modules_install install
更新されたGrub2
sudo update-grub2
オペレーティングシステムを再起動します。
reboot
OSは最新のカーネル4.13.8にアップデートされ、正常に実行されますが、デバッグ情報とprintk出力はdmesgコンソール出力とログファイル(var/log/kern.log、dmesg、syslogなど)に表示されません。
また、gdbを使用してカーネルイメージをデバッグしようとしました(デバッグシンボルが見つかりません)。
カーネルのデバッグを手伝ってください。私の目的は、システムコール、トラップ、ユーザー空間からカーネル空間への移行、メモリ管理を詳細にデバッグして分析することです。 (strace出力よりも多くのデバッグ情報を期待しています)