UMLの起動 成功編

ようやく…

こんばんわ.

今回はタイトルの通り

やっとできましたよ…

UMLgdb!

とにかく今回のことをメモしておきます!

前回の失敗記事はこちら


環境設定

まずは環境設定から!

細かい部分まで書きます!

だって今回の原因だから!


手順

これは自分がやったことなので無駄なことが含まれてます(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でした.

  • mkdir umlumlディレクトリを作成し,cd umlで移動します.

  • linuxファイルのディレクトリをmv -R ../Download/linux-3.13 ./で持ってきます.

  • 次に起動する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=umUMLのデフォルトコンフィグファイルを作成

  • make menuconfig ARCH=umでなにもせずExit.これ意味ないんじゃね?

  • make -j2 ARCH=umカーネルコンパイルする.

  • 言い忘れていたけど,ARCH=umってUMLアーキテクチャって意味だよ.多分・・・ちゃんとは調べてない.
    ARCH=armとかあったし多分そう

  • これで準備完了!

  • gdbgdb起動します.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の記事が無駄にならなかった…