view Linux/Kernel/debug_build.md @ 51:d7cd9e415b44

backup 2021-03-29
author autobackup
date Mon, 29 Mar 2021 00:10:03 +0900
parents b6c284fd5ae4
children
line wrap: on
line source

# FedoraでLinuxのkernelをdebug buildする
- linuxをgdbでデバッグトレースしたい!!
- ansibleがなんとあるので使うといい感じにできる

## ansible
- http://www.cr.ie.u-ryukyu.ac.jp/hg/Ansible/fedora_kernel_build/

## virshを使ったやりかた
- まずdebug buildしたいfedoraのvmをつくる
    - 大学のdalmoreサーバーでやると便利
- 結構パワーが必要なので、ansibleのファイルにある通りVMの設定を書き換える
    - CPUのコア数を8コア
    - HDDの容量を30GBは確保する 
- cpuのコア数はvirshのxmlを書き換える
- HDDの容量は、qemu-imgでresizeしたあとに、VMにログインしてファイルシステムを拡張する    
- ここまで準備が出来たら実行可能! VMのmac addressをakatsukiに登録して、別のマシンから以下のコマンドでansibleを実行する
    - 実行する前にVMのipを書いたhostsファイルを用意する
    - main.ymlのユーザー名を変更するなどもしておく
```
$screen -L  ansible-playbook -i hosts main.yml --ask-become-pass
```


- 完了したらビルドしたファイルをyomitanなどに転送する
```
ssh localhost -p 2222  -l root 'cd /usr/src/kernels ; tar czf - fedora' | dd of=fedora26-kernel.tgz
```
- ここのlocalhostはVMのIPとかに変えておこう。あとユーザーとかもそんな感じで...

## 起動するkernelを切り替える
- ansibleをかけただけでは、VMが起動するkernelが切り替わってないので切り替える必要がある
- ちまたでは`awk`を使って番号を決めて`grub2-`で解決する方法が出回っている
    - 最近のFedoraでは `grub2.config`をいくらgrepしてもkernel情報が乗ってない
- 最近のfedoraでは次の通りにする

### kernelの変更
- `$ grubby --info=ALL` を実行して、切り替えたいkernelを探す
- `$grubby --set-default /boot/vmlinuz-4.2.0-1.fc23.x86_64`で切り替える

### 参考
- [Working with the GRUB 2 Boot Loader](https://docs.fedoraproject.org/en-US/fedora/rawhide/system-administrators-guide/kernel-module-driver-configuration/Working_with_the_GRUB_2_Boot_Loader/)
   


## gdbでdebugするには(学内限定)
1. debugしたいvmを`ie-virsh define-gdb`でdefineしなおす
    - すでにdefineしていたらundefineする
    - gdbのportが開放されたxmlファイルが生成される
2. `ie-virsh dumpxml 04(defineした番号)`で、gdbのportを確認する
3. `ie-virsh strart 04`して起動する
4. kernelから転送したvmlinuxをgdbで `gdb vmlinux`する
5. breakpointを設定する
6. `target remote localhost:(確認したport)`にするとVMに接続される  
7. `c`してあとは自由に!!

# Tips
- dalmoreのvirshのxmlを書き換えるにはroot権限が必要