UMLの起動 成功編
ようやく…
こんばんわ.
今回はタイトルの通り
やっとできましたよ…
UMLのgdb!
とにかく今回のことをメモしておきます!
環境設定
まずは環境設定から!
細かい部分まで書きます!
だって今回の原因だから!
- 使ったPC : Macbook Pro(OS X El Capitan v10.11.5) ⇦まぁここは関係ないかも
- アプリケーション : VMWare Fusion プロフェッショナルバージョン v8.1.1
- Ubuntu(64bit) 14.04 : ここからダウンロード
- linuxファイルシステム : ここから自分のカーネルバージョンをダウンロード
- CentOSのroot_fsファイル : ここから64bitをダウンロード
手順
これは自分がやったことなので無駄なことが含まれてます(apt-getなど)
必要最低限の検証はしていません
まずUbuntuを立ち上げる前に,VMWareのツールバー→仮想マシン→設定→プロセッサとメモリ→詳細オプションからこの仮想マシンでハイパーバイザーアプリケーションを有効にするにチェックを入れます.
Ubuntuを立ち上げます
キーボードの設定をしていなくてUSの配置になっていたので
sudo dpkg-reconfigure keyboard-configuration
でキーボードを日本語にしました.- Generic 105-key(Intl)PC -Japanese
- Japanese
- The default for the keyboard layout
- No compose key
- No
uname -a
で自分のカーネルのバージョンを確認します
Linux ubuntu 3.13.0-24-generic #47-Ubuntu SMP Fri May 2 23:30:00 UTC 2014 x86_64 x86_64 x86_64 GNU/Linux
こう表示されたらカーネルのバージョンは3.13.0
です.
これと同じバージョンのlinuxファイルシステムをダウンロードしてきます.
私の場合はv3.x→linux-3.13.tar.gzでした.次に起動するOSファイルファイルを持ってきます.
mv ../Download/CentOS6.x-AMD64-root_fs linux-3.13/root_fs
これで移動すると同時にリネームもします.まずは
apt-get
します.今回はkvmでもやろうと思っていたので余計なものも入っていますが,一応同じものを…sudo apt-get install libncurses5-dev g++-multilib libc6-dev user-mode-linux gdb
です.
必須なのはuser-mode-linuxとlibncurses5-devです.一応バージョンアップしときます.
sudo apt-get update
からのsudo apt-get upgrade
します.
sudoはなんかapt-getのくせでつけてしまいました.make defconfig ARCH=um
でUMLのデフォルトコンフィグファイルを作成make menuconfig ARCH=um
でなにもせずExit.これ意味ないんじゃね?言い忘れていたけど,
ARCH=um
ってUMLのアーキテクチャって意味だよ.多分・・・ちゃんとは調べてない.ARCH=arm
とかあったし多分そうこれで準備完了!
gdb
でgdb起動します.gdbのコマンドについてはこちら.こんな感じになります.
GNU gdb (Ubuntu 7.7.1-0ubuntu5~14.04.2) 7.7.1 Copyright (C) 2014 Free Software Foundation, Inc. License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html> This is free software: you are free to change and redistribute it. There is NO WARRANTY, to the extent permitted by law. Type "show copying" and "show warranty" for details. This GDB was configured as "x86_64-linux-gnu". Type "show configuration" for configuration details. For bug reporting instructions, please see: <http://www.gnu.org/software/gdb/bugs/>. Find the GDB manual and other documentation resources online at: <http://www.gnu.org/software/gdb/documentation/>. For help, type "help". Type "apropos word" to search for commands related to "word". (gdb)
- まずはファイルを指定します.
file ~/uml/linux-3.13/linux
です.pwd使ったり絶対パスでも可です.
しかし,linux
とやるとすでに実行ファイルがあるので違うファイルを参照してしまいます.
(gdb) file ./linux Reading symbols from ./linux...done.
- そうしたらとりあえず,
start_kernel
で止めてみましょう.b start_kernel
でstart_kernel関数にブレイクポイントを設定します.
(gdb) b start_kernel Breakpoint 1 at 0x60001527: file init/main.c, line 484.
r
をするとブレイクポイントで止まるはずです.
(gdb) run Starting program: /home/kento/uml/linux-3.13/linux Core dump limits : soft - 0 hard - NONE Checking that ptrace can change system call numbers...OK Checking syscall emulation patch for ptrace...OK Checking advanced syscall emulation patch for ptrace...OK Checking for tmpfs mount on /dev/shm.../run/shm...OK Checking PROT_EXEC mmap in /dev/shm/...OK Checking for the skas3 patch in the host: - /proc/mm...not found: No such file or directory - PTRACE_FAULTINFO...not found - PTRACE_LDT...not found UML running in SKAS0 mode Breakpoint 1, start_kernel () at init/main.c:484 484 {
- 続ける場合は
c
,やめる場合はq
です.
ふぅ...
終わり!
つまり64bitにすれば解決だったっぽいです…
linuxファイルシステムが64bitだったのかな?
そこらへんはまだ勉強不足で分かりません.
とにかくできてよかったです…
gdbの記事が無駄にならなかった…