読者です 読者をやめる 読者になる 読者になる

お久しぶりです

この記事を見ている人はいないに等しいと思われますが,久しぶりに更新します.

というか,ブログに書くことで自分の学習意欲を向上させようと思いました…

今日は研究室に入る三年生との顔合わせがありました.

なんというか,今年の三年生は凄いです.

スペックもさることながら,将来のビジョンまで見据えているそうで,自分とは比べ物にならない気がします.

そんな将来有望な後輩を前に,私も努力せねばと思いました.

これからは日記…とまではいかなくても,私が一人前のプログラマーになるまで(なれると信じて)の軌跡をここに記していこうと思っています.

ツムツムの自動化は意外とアクセスがあったようで,近々更新しようと思っています.

今は研究が忙しく,どうも更新できてないです,申し訳ない…

現在はRaspberryPi2でKVMを動かして,クローンとかマイグレーションできるようなプログラムをPythonで書いていますが,これが終わったら機械学習に手を伸ばしていこうと思っています.

機械学習…今はかなりライブラリが充実していて簡単に使えますが,その実態を知ろうとするとかなり骨が折れる作業のようですね…

まだその氷山の一角しか見てませんが,これは自分のスキルアップにはいい機会だと思って頑張ろうと思います.

明日は研究概要の提出日…終わる気がしないですが,頑張ります.

ではでは,そういうことで…

ツムツムでFrep+Llamaを使って自動化しよう

こんにちは.
今日はツムツムでハートを自動で送る方法を書きたいと思います.
需要があるかどうかは不明...

目次

環境を整えよう!

まずは環境設定ですね.
必要なものは...

Androidでの操作

  • まずFrepとLlamaをPlayStoreからインストールしてください.

  • 一度Frepを起動しておきましょう.

  • そのあと, 設定 > 開発者向けオプション > USBデバッグ にチェックを入れてください

    • 開発者向けオプションがない場合, 設定 > 端末情報 > ビルド番号 を10回ほど連続でタップしましょう

PCでの操作

  • PCでFrepの設定ツールをダウンロードします. こちらからダウンロード

  • zipファイルができるので解凍してください.

  • 今回使うのはその中に入っている win.bat , win_alt.batmac.bat , mac_alt.bat (以下バッチファイル)になります.

  • ここでAndroidとパソコンを繋ぎます.

  • PCでバッチファイルを開きます.ダブルクリックしてください.(win.batやってできなかったらwin_alt.bat)

  • Server Startedと表示されたら成功です.

  • AndroidでFrepを起動して画面上部にサービス実行中とでれば設定完了です.

Frepを設定しよう

今回はLlamaを使う想定でプログラムを組んでいきます.
ちなみに画像認識を使います.
最初に簡単なプログラムを作ってそこから拡張していきましょう.

Frepの設定を変更する

  • Frepを起動して,オプションを押してください.

  • システム設定から

    • 撮影タイプ > BMP(高速)
    • 全ビットを画像認識にしよう > off(チェックマークを外す)
  • これで画像認識の速さがかなり変わります.

新規プログラムを作成

  • ツムツムを起動して,通知タブのFrepをタップしてパネルを表示します.

  • おそらく左上にRecと赤い丸のパネルが出てきます.

f:id:yark0531:20160717142106p:plain:w100

  • 赤い丸を押すと記録が開始され,電源ボタンを押すと記録が終了します.

  • 今回は上にスクロールする関数を作ります.

  • 赤い丸を押して,適当に操作します.
    終わったら電源ボタンで画面オフにしてください.

  • 画面をオンにするとFrep簡易設定ってのが出てきますのでラベルに 送信 とでも名付けておきましょう.
    保存して一旦ツムツムを閉じましょう.

  • Frepを起動して,記録の管理を押してください.

  • するとさっき記録したプログラムがあります.

  • それをタッチして操作間隔の調整(プログラム変換)を押してください.
    基本このページでプログラムを作っていきます.

  • 前の画面に戻ると 送信+というプログラムが作られていると思うので 送信 は 削除しちゃいましょう.(無料だと3つまでしか保存できないので)

まずは画面上の4人にハートを送るプログラム

  • 早速ですが,ここが一番の肝です.
    ここが成功するとあとは適当でも大丈夫だったりします.

  • ハート認識用のスクショをとります.
    できればこんな感じで...

f:id:yark0531:20160717225915p:plain:w100 f:id:yark0531:20160717225937p:plain:w100 f:id:yark0531:20160717140121p:plain:w100 f:id:yark0531:20160717140125p:plain:w100 f:id:yark0531:20160717140131p:plain:w100 f:id:yark0531:20160717140132p:plain:w100

  • ピンクのハート4つのスクショとピンクのハートなし(自分の情報見る黄色いボタンあったほうがいい)のスクショとピンクのハートを1つにして少しずつずらしたスクショ(4枚ほど)の6枚です.

  • あとは送信の時に使うスクショも撮っておきましょう.
    ハート送るときの画面ですね.

f:id:yark0531:20160717233627p:plain:w100 f:id:yark0531:20160717233629p:plain:w100

  • 送信+ でプログラム変換の画面にいきます.

  • まずは何もない状態にしましょう.
    送信っていう関数があるはずなのでチェック入れて右上の四角が縦に三つあるやつ(以下メニューボタン)を押して削除を選択します.

  • 最初はハートの画像を認識して押す操作です.

  • 右下の条件を押して画像認識を選択します.

  • 画像ファイルから選択を押してピンクのハートが4つあるスクショを選びます.
    そのまま適用を押します.

  • 認識する範囲を指定となりますので,ハートの部分を選択します.
    移動はスワイプ,範囲の指定は二本指で広げたり閉じたりします.

  • 認識する範囲を指定するとき,機種によってはハートのピンクの部分だけを選択するほうが正確なのと,ボタン全体を選択するほうが正確なときがあります.

f:id:yark0531:20160717230452p:plain:w100

  • 次に検索範囲のボタンを押します.
    ここで横幅をボタン全体にし,縦はランキングのスクロールできる画面全体にします.

f:id:yark0531:20160717230512p:plain:w100

  • これを確かめるために先ほどのスクショを使用します.

  • その前に設定です.以下を参考にしてください.

f:id:yark0531:20160717222415p:plain:w200

  • 失敗のときの遷移はまだ設定しないで大丈夫です.

  • この設定が終わったら右上のテストを押します.
    これで画像を選択すると画像が認識されているか確かめることができるので,先ほど撮ったスクショを選択してちゃんとハートが認識されていればOKです.

  • うまくいかなかった場合は戻って調整しましょう.

  • できたら適用を押します.

  • これで画像認識は完璧(なはず)なので,4人に送るプログラムにします.

  • 次はハートをプレゼントでOKボタンを押します.

  • 認識する画像はこんな感じで選択してください

f:id:yark0531:20160718000909p:plain:w200

  • 設定は以下の通りに

f:id:yark0531:20160717233830p:plain:w200

  • 次はハートをプレゼントしました.の画面です.

  • 認識する画像はこんな感じで選択してください

f:id:yark0531:20160718000854p:plain:w200

  • 設定は以下の通りに

f:id:yark0531:20160717233848p:plain:w200

  • 最後に条件 > ループ開始で繰り返しを4回にセットして,全体をループさせます.

  • 最後にハートの画像認識の失敗のときの遷移をループ終了にして完成です.

  • 他の画像認識の失敗はありえないはず(ハートがうまく認識できれば)

できたプログラムはこのようになってるはずです

  1. ループ開始(4回)

  2. 画像認識(ハート)(成功:次へ,失敗:5へ)

  3. 画像認識(OK)

  4. 画像認識(TSUMTSUM)

  5. ループ終了

次は下から全員に送れるようにしよう

  • ツムツムを開いてRecを押して上に3人スクロールする関数を作ってください.
    3人ですよ?その方が確実なんで.
    ちなみにそこまで正確じゃなくても大丈夫です.
    ラベルを上スクロールとでもしておきましょう

  • 次にFrepを開いて,上スクロールをタップして,プログラム編集してください.

  • 上スクロールの右にあるチェックマークをつけて,メニューから切り出しを選択します.
    名前はそのまま上スクロール+で大丈夫です.

  • そしたら上スクロールと上スクロール+は邪魔なんで削除して,送信+のプログラム編集を押します.

  • 条件 > 関数呼び出し > 上スクロール+を押すと,一番下に上スクロール+が追加されています.

  • 条件 > 待機 > 1秒にして上スクロール+の上に実行すると安定するでしょう.

  • あとはこれに条件 > ループ開始 > 回数は送る人数÷3にして,全体を囲めばOKです.

プログラムのフロー

  1. ループ開始(送る人数÷3回)

  2. ループ開始(4回)

  3. 画像認識(ハート)

  4. 画像認識(OK)

  5. 画像認識(TSUMTSUM)

  6. ループ終了(4回)

  7. 上スクロール+

  8. ループ終了(送る人数÷3回)

送る前に一番下に移動してくださいね.
上からやると送信中にスコアを更新した人に送られない可能性があるので下からやってます.
不測の事態が起こるかもしれないので,ループ回数は多めにセットした方がいいかもしれません(私は+5回くらい)

次に受け取りを追加します.

なるべく一括受け取りの方がおすすめです.
なぜならLlamaを使う時に時間を指定するからです.
個別受け取りだと,送られた数に比例してプログラム実行時間が長くなります.

一括受け取り

これは簡単です.
必要なスクショは4枚(追加で3枚です)

  1. タッチ操作 メールボックスを開きます

  2. 画像認識 まとめて受け取るを画像認識でタップします

  3. 画像認識 OKを画像認識でタップします

  4. 画像認識 とじるを画像認識でタップします

  5. 画像認識 とじるを画像認識でタップします

個別受け取り

  1. タッチ操作 メールボックスを開きます

  2. タッチ操作 確認ボタンを押します

  3. 画像認識 OKボタンを押します

  4. 画像認識(TSUMTSUM)

以上を100回ループして,最後にとじるを画像認識します

Llamaを使って,時間を指定する

ここからはLlamaをいじっていきます.

まずはイベント1を作成します.

自分は条件でWiFiネットワーク接続を選びます.これをやらないとWiFiが繋がってない時にループしてしまって通信料が増えてしまうので…

高度機能でイベントを繰返すにチェック,繰り返し感覚を1時間2分とします

動作は画面オン(暗め)とLlama変数[x]を[1]ににします

次にイベント2を作成します.

条件を[x]が[1]ならにします.

動作にアプリショートカット実行で作成したFrepプログラムを指定します.その後Llama変数で[x]を[2]にします.

高度機能でイベントを遅らせるにチェックを入れ,3秒遅らせます.

最後にイベント3を作成します.

条件は[x]が[2] ならにします

動作は画面オフとLlama変数の[x]を[3]にします

高度機能でイベントを遅らせるにしてFrepプログラムの実行時間を指定します.

これでFrepプログラムを動かして指定した時間が経った後に画面がオフになります.自分は30分にしています.

Llama用にFrepプログラムを変更する

プログラムに変更を加えます.

Llamaを使うことによってアプリを終了させたり起動させたりします.

自分のプログラムのフローはこのようになっています.

  1. アプリ終了

  2. 待機 3秒

  3. アプリ起動

  4. ループ開始4回

  5. タッチ操作(ダブルタップ) : どこでもOK

  6. 待機0.5秒

  7. ループ終了

  8. 待機5秒

  9. 画像認識[TAP TO START]タイムアウト15秒:失敗したら8へ

  10. 待機10秒

  11. 待機0.5秒

  12. 画像認識[とじる]タイムアウト5秒:成功したら11へ失敗したら次へ

  13. 待機5秒

  14. 上記全受け取りプログラム

  15. 下スクロール[一番下にスクロールさせるプログラムを作ってください]

  16. 上記下から全員に送るプログラム

  17. 待機5秒

  18. 上記全受け取りプログラム

  19. アプリ終了

このようになります.

簡易になりまして申し訳ありません.

そして完全自動化へ...

あとはお好みで改良しちゃってください!

自分はスコア0の人には送らないように画像認識で頑張ってましたが精度が良くないので失敗してました…

最後の方適当になってしまい本当に申し訳無いです.

時間ができましたら画像の方を追加して見やすくしようと思っています.

ここまで見てくださってありがとうございました.

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の記事が無駄にならなかった…

gdbコマンド集

UMLgdbを使ってカーネルデバッグしようとして気づいた…
「あれ,コマンドなんだったっけ?」 ってことでgdbのコマンドをまとめました

使いそうなコマンド

  • gdb <実行ファイル名>

    • 起動
    • 起動するとターミナルでは(gdb)と出てくる
  • r|run (<引数>)(ファイル名)((>|>>)ファイル名)

  • q|quit

    • gdbを終了する
  • b|break <行番号>|<関数名>|<ファイル名:行番号>

    • ブレイクポイントを指定する
    • 指定した場所で実行を一時停止する
  • delete <ブレイクポイント番号>

    • 指定したブレイクポイントを削除する
    • 番号を指定しなかった場合全削除する
  • n|next

    • 関数中の処理をジャンプする
  • s|step

    • 関数中の処理を追いかける
  • c|cont

    • ブレイクポイントを指定したが,実行を継続する(continue)
  • file <ファイル名>

    • <ファイル名>を選択
  • list

    • 選択しているファイルを10行分表示する
  • p(/<format>) <変数>|*<ポインタ変数>|&<アドレス変数>

    • 変数の出力(print)
    • /<format>で出力書式を指定できる
書式 意味 書式 意味
o 8進表示 d 符号付き10進表示
x 16進表示 u 符号なし10進表示
t 2進表示 c 文字表示
f 浮動小数点表示 a アドレス
  • whatis

    • 変数の型を一覧表示する
  • info b|break

    • 設定しているブレイクポイントの一覧を表示
  • info stack

    • 関数呼び出しスタックの一覧を表示
  • info Thread

    • 存在しているスレッドの一覧を表示
    • 複数のスレッドが走っているプログラムでデッドロックなどを調査するのに使う thread <スレッド番号> where / bt up 2 で詳細を知れる.
    • thread apply <スレッド番号>|(all) <コマンド>で1つのコマンドを複数のスレッドに対して実行できる
  • info locals

    • 関数内の局所変数の名前と値をすべて表示する
  • display <変数>

    • プログラムが停止すると<変数>の値を表示する
  • jump linespec

    • linespecで指定される行において実行を再開
  • jump *address

    • addressで指定されるアドレスにある命令から実行を再開
  • p (char*)<アドレス番号>

  • x/(文字数)c <アドレス番号>

    • アドレス番号からメモリリーク出力(16進数) break <ファイル名>:<関数名> condition <ブレイクポイント番号> <条件> run
  • <ファイル名>の<関数名>にブレイクポイント(<ブレイクポイント番号>)を指定し,さらに<条件>になったときにブレイクする

  • ブレイクポイントを解除するにはcondition <ブレイクポイント番号>とする

    break <ファイル名>:<関数名> run delete watch <条件> c

  • <条件>以外の時にストップさせる

  • deleteでブレイクポイント削除
  • <条件>の指定方法

    • watch(wa) <条件> : <条件>の値が変化した時に停止
    • awatch <変数> : <変数>に値が書き込まれたときに停止
  • set <変数> = <値>

    • 変数を変更できる
  • help (<コマンド>)

    • コマンドのヘルプを表示する
    • コマンドを入力しないとgdb全体のヘルプを表示する

ん〜こんなところかな…

なんかあったらまた追記していきます

BHyVeを使ってみよう!

目次

BHyVeとは?

使ってみる

  • 実際やってみて色々つまずいたので,ここにメモする.

実行環境

VMWare Fusionを使う理由

  • BHyVeはVT-x(CPU仮想化機能)とEPT(メモリ仮想化機能)が必須となっている
  • なので,EPTをサポートしてないVirtualBoxは使えない.

手順

1.まず,VMWare FusionFreeBSDを入れる.
私はFreeBSD-10.3-RELEASE-amd64-disc1.isoを入れた.

2.インストールしたのち,一度シャットダウンし, 設定→プロセッサとメモリ→詳細オプション→この仮想マシンでハイパーバイザアプリケーションを有効にするにチェックを入れる
これでVT-xとEPTを有効にする.
スクリーンショット 2016-06-11 20.19.36.png

3.次にrootでログインする.
rootでログインしないと後にOperation not permittedとなり,実行できない.

4.FreeBSDにディスクイメージをダウンロードする.
ftpをfetchでもできるが,自分はできなかったのでホストマシンから転送した.
方法は下記に記載.

5.kldload vmmでBHyVeカーネルモジュールをロードする.
kldstatでvmm.koが追加されていればOK.

6.ifconfig tap0 createでゲストオペレーティングシステムが使用するネットワークインターフェースを作成する.
ifconfig tap0で確認する.

7.sysctl net.link.tap.up_on_open=1でtap0をオープンする.

8.ifconfig bridge0 createでブリッジを作成する.

9.ifconfigでホストの物理ネットワークインタフェースを確認する.
自分はem0だった.

10.ifconfig bridge0 addm <9の名前> addm tap0 upでtapインターフェース経由でネットワークにアクセスできるように,ブリッジに実際に利用できるネットワークインターフェースと,先ほど作成したtapインターフェースの双方を追加する.

11.truncate -s 16G guest.imgで空のimgファイルを作成する.

12.sh /usr/share/examples/bhyve/vmrun.sh -c 4 -m 1024M -t tap0 -d guest.img -i -I FreeBSD-10.3-RELEASE-amd64-disc1.iso <vmName>でディスクをBHyVeで実行する.
-cで仮想CPUの数を指定.
-mでメモリの大きさを指定
-tで使うtapデバイスを指定
-dで使うイメージディスクを指定
-iでイメージディスクからブートすることを示す
-Iでどのイメージディスクを使うかを指定
最後に仮想マシンの名前を指定
次からはsh /usr/share/examples/bhyve/vmrun.sh -c 4 -m 1024M -t tap0 -d guest.img <vmName>で実行可能

MacからFreeBSDにディスクイメージを転送する.

1.FreeBSDifconfigを使い,IPアドレスを確認する.
2.scp FreeBSD-10.3-RELEASE-amd64-disc1.iso <IPアドレス>:でファイルを転送する.
3.私はFreeBSD/home/<ユーザ名>/FreeBSD-10.3-RELEASE-amd64-disc1.isoに置かれていた.


参考ページ

1.FreeBSD as a Host with bhyve Prev Chapter 21.Virtualization
2.使ってみようハイパーバイザbhyve

UMLの起動 失敗編

UMLとは?

環境

実際にやった手順

  • mkdir umlディレクトリを作り,そこに移動
  • ダウンロードしたファイルを解凍し,そこに置く
  • sudo apt-get install user-mode-linuxUMLのパッケージをインストールする
  • sudo dpkg-reconfigure keyboard-configurationでキーボードを日本語にする
    • Generic 105-key(Intl)PC -Japanese
    • Japanese
    • The default for the keyboard layout
    • No compose key
    • No
  • chmod +x kernel32-4.3.5で実行権限を与える
  • ./kernel32-4.3.5 ubda=CentOS6.x-x86-root_fs mem=256MUMLを起動
    • rootでloginできる
  • linux-3.3.8に移動
  • make defconfig ARCH=umUMLのデフォルトコンフィグファイルを作成
  • sudo apt-get install libncurses5-devをインストールする
  • make menuconfig ARCH=umで必要な機能を設定するが,なにもせずExit
  • makeしてAllEnter
    • ここ長いよ
  • make -j2 ARCH=umカーネルコンパイルする
    • ここも長いよ
  • lslinuxファイルあれば成功!これが実行ファイルになる
  • いよいよ./linux ubda=../CentOS6.x-x86-root_fs mem=128MUMLを起動する.
    • はい失敗.
Console initialized on /dev/tty0
console [tty0] enabled
console [mc-1] enabled
VFS: Cannot open root device "98:0" or unknown-block(98,0)
Please append a correct "root=" boot option; here are the available partitions:
Kernel panic - not syncing: VFS: Unable to mount root fs on unknown-block(98,0)

...

Aborted (core dumped)
  • たぶんこの辺り.

  • あとこれが1から15まである

Using a channel type which is configured out of UML
parse_chan_pair failed for device 1 : Configuration failed
  • 一応gdbfile linuxすればデバッグできるなぁ...
  • 及第点ってとこですかね.

参考サイト

今日のまとめ.

  • なにをやっても,Aborted(Core dump)になってしまう...
  • もうやってらんないっすよ!

追記

6月19日

/usr/bin/linux.umlを実行したらUML起動できた?
linux.uml ubd0=Cent0S6.x-x86-root_fs
shutdown -h nowでシャットダウンできる

参考:UMLによるはじめてのLinuxカーネルHack

kento@ubuntu:~/uml$ sudo linux-3.3.8 ubda=CentOS6.x-x86-root_fs mem=3G
Locating the bottom of the address space ... 0x0
Locating the top of the address space ... 0xc0000000
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...nothing mounted on /dev/shm
Checking PROT_EXEC mmap in /tmp/...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
Adding 4354048 bytes to physical memory to account for exec-shield gap
CONFIG_HIGHMEM not enabled - physical memory shrunk to 3045064704 bytes
  • あとちょっとな気がする
  • いやいや,メモリ設定が多すぎって怒られてるだけw
  • linux-3.3.8/init/main.cの494行目にprintk(KERN_NOTICE "Hello, World!");を追加しmake -j 3 ARCH=umの後実行すると,
kento@ubuntu:~/uml$ ./linux-3.3.8/linux ubd0=CentOS6.x-x86-root_fs
Locating the bottom of the address space ... 0x10000
Locating the top of the address space ... 0xc0000000
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...nothing mounted on /dev/shm
Checking PROT_EXEC mmap in /tmp/...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
Adding 11927552 bytes to physical memory to account for exec-shield gap
[    0.000000] Linux version 3.3.8 (kento@ubuntu) (gcc version 4.6.3 (Ubuntu/Linaro 4.6.3-1ubuntu5) ) #2 Sun Jun 19 11:28:47 PDT 2016
[    0.000000] Hello, World!
[    0.000000] Built 1 zonelists in Zone order, mobility grouping on.  Total pages: 11017
[    0.000000] Kernel command line: ubd0=CentOS6.x-x86-root_fs root=98:0
[    0.000000] PID hash table entries: 256 (order: -2, 1024 bytes)
[    0.000000] Dentry cache hash table entries: 8192 (order: 3, 32768 bytes)
[    0.000000] Inode-cache hash table entries: 4096 (order: 2, 16384 bytes)
[    0.000000] Memory: 29148k available
[    0.000000] NR_IRQS:15
[    0.000000] Calibrating delay loop... 4780.85 BogoMIPS (lpj=23904256)
[    0.040000] pid_max: default: 32768 minimum: 301
[    0.040000] Mount-cache hash table entries: 512
[    0.040000] Checking for host processor cmov support...Yes
[    0.040000] Checking that host ptys support output SIGIO...Yes
[    0.040000] Checking that host ptys support SIGIO on close...No, enabling workaround
[    0.040000] Using 2.6 host AIO
[    0.040000] NET: Registered protocol family 16
[    0.040000] bio: create slab <bio-0> at 0
[    0.040000] Switching to clocksource itimer
[    0.040000] NET: Registered protocol family 2
[    0.040000] IP route cache hash table entries: 1024 (order: 0, 4096 bytes)
[    0.040000] TCP established hash table entries: 2048 (order: 2, 16384 bytes)
[    0.040000] TCP bind hash table entries: 2048 (order: 1, 8192 bytes)
[    0.040000] TCP: Hash tables configured (established 2048 bind 2048)
[    0.040000] TCP reno registered
[    0.040000] UDP hash table entries: 256 (order: 0, 4096 bytes)
[    0.040000] UDP-Lite hash table entries: 256 (order: 0, 4096 bytes)
[    0.040000] NET: Registered protocol family 1
[    0.040000] mconsole (version 2) initialized on /home/kento/.uml/UKlbEG/mconsole
[    0.040000] Checking host MADV_REMOVE support...
[    0.040000] MADV_REMOVE failed, err = -38
[    0.040000] Can't release memory to the host - memory hotplug won't be supported
[    0.040000] Host TLS support detected
[    0.040000] Detected host type: i386 (GDT indexes 6 to 9)
[    0.040000] VFS: Disk quotas dquot_6.5.2
[    0.040000] Dquot-cache hash table entries: 1024 (order 0, 4096 bytes)
[    0.040000] msgmni has been set to 56
[    0.040000] io scheduler noop registered
[    0.040000] io scheduler deadline registered
[    0.040000] io scheduler cfq registered (default)
[    0.040000] TCP cubic registered
[    0.040000] NET: Registered protocol family 17
[    0.040000] Initialized stdio console driver
[    0.040000] Using a channel type which is configured out of UML
[    0.040000] parse_chan_pair failed for device 1 : Configuration failed
[    0.040000] Using a channel type which is configured out of UML
[    0.040000] parse_chan_pair failed for device 2 : Configuration failed
[    0.040000] Using a channel type which is configured out of UML
[    0.040000] parse_chan_pair failed for device 3 : Configuration failed
[    0.040000] Using a channel type which is configured out of UML
[    0.040000] parse_chan_pair failed for device 4 : Configuration failed
[    0.040000] Using a channel type which is configured out of UML
[    0.040000] parse_chan_pair failed for device 5 : Configuration failed
[    0.040000] Using a channel type which is configured out of UML
[    0.040000] parse_chan_pair failed for device 6 : Configuration failed
[    0.040000] Using a channel type which is configured out of UML
[    0.040000] parse_chan_pair failed for device 7 : Configuration failed
[    0.040000] Using a channel type which is configured out of UML
[    0.040000] parse_chan_pair failed for device 8 : Configuration failed
[    0.040000] Using a channel type which is configured out of UML
[    0.040000] parse_chan_pair failed for device 9 : Configuration failed
[    0.040000] Using a channel type which is configured out of UML
[    0.040000] parse_chan_pair failed for device 10 : Configuration failed
[    0.040000] Using a channel type which is configured out of UML
[    0.040000] parse_chan_pair failed for device 11 : Configuration failed
[    0.040000] Using a channel type which is configured out of UML
[    0.040000] parse_chan_pair failed for device 12 : Configuration failed
[    0.040000] Using a channel type which is configured out of UML
[    0.040000] parse_chan_pair failed for device 13 : Configuration failed
[    0.040000] Using a channel type which is configured out of UML
[    0.040000] parse_chan_pair failed for device 14 : Configuration failed
[    0.040000] Using a channel type which is configured out of UML
[    0.040000] parse_chan_pair failed for device 15 : Configuration failed
[    0.040000] Console initialized on /dev/tty0
[    0.040000] console [tty0] enabled
[    0.040000] console [mc-1] enabled
[    0.040000] VFS: Cannot open root device "98:0" or unknown-block(98,0)
[    0.040000] Please append a correct "root=" boot option; here are the available partitions:
[    0.040000] Kernel panic - not syncing: VFS: Unable to mount root fs on unknown-block(98,0)
[    0.040000] 0a45cef4:  [<081c1bc3>] dump_stack+0x1c/0x20
[    0.040000] 0a45cf0c:  [<081c1c4a>] panic+0x62/0x14a
[    0.040000] 0a45cf24:  [<08049912>] mount_block_root+0x1d8/0x1ee
[    0.040000] 0a45cf7c:  [<08049974>] mount_root+0x4c/0x54
[    0.040000] 0a45cfa0:  [<08049a8f>] prepare_namespace+0x113/0x13a
[    0.040000] 0a45cfa8:  [<08049674>] kernel_init+0xf9/0xfe
[    0.040000] 0a45cfb8:  [<0805fa13>] run_kernel_thread+0x38/0x41
[    0.040000] 0a45cfe4:  [<080583b1>] new_thread_handler+0x8a/0xb6
[    0.040000] 0a45cffc:  [<00000000>] 0x0
[    0.040000]
[    0.040000]
[    0.040000] EIP: 0073:[<b7744428>] CPU: 0 Not tainted ESP: 007b:bff6fc48 EFLAGS: 00000296
[    0.040000]     Not tainted
[    0.040000] EAX: 00000000 EBX: 000070e5 ECX: 00000013 EDX: 000070e5
[    0.040000] ESI: 000070e1 EDI: 0000001c EBP: bff6fc74 DS: 007b ES: 007b
[    0.040000] 0a45ce84:  [<08064346>] show_regs+0xc5/0xcb
[    0.040000] 0a45ceb0:  [<0805a2fb>] panic_exit+0x23/0x39
[    0.040000] 0a45cec4:  [<0807e7b0>] notifier_call_chain+0x25/0x4a
[    0.040000] 0a45ceec:  [<0807e803>] atomic_notifier_call_chain+0x15/0x17
[    0.040000] 0a45cefc:  [<081c1c62>] panic+0x7a/0x14a
[    0.040000] 0a45cf24:  [<08049912>] mount_block_root+0x1d8/0x1ee
[    0.040000] 0a45cf7c:  [<08049974>] mount_root+0x4c/0x54
[    0.040000] 0a45cfa0:  [<08049a8f>] prepare_namespace+0x113/0x13a
[    0.040000] 0a45cfa8:  [<08049674>] kernel_init+0xf9/0xfe
[    0.040000] 0a45cfb8:  [<0805fa13>] run_kernel_thread+0x38/0x41
[    0.040000] 0a45cfe4:  [<080583b1>] new_thread_handler+0x8a/0xb6
[    0.040000] 0a45cffc:  [<00000000>] 0x0
[    0.040000]
Aborted (core dumped)
  • HelloWorldは実行されてるらしい
  • この形式はなに…?

  • これ,成功編のブログ書けるのかな…

ブログ開設

研究で調べたこととかまとめていきます。

ご参考になれば嬉しいです。

その前に続くといいな…