お久しぶりです
この記事を見ている人はいないに等しいと思われますが,久しぶりに更新します.
というか,ブログに書くことで自分の学習意欲を向上させようと思いました…
今日は研究室に入る三年生との顔合わせがありました.
なんというか,今年の三年生は凄いです.
スペックもさることながら,将来のビジョンまで見据えているそうで,自分とは比べ物にならない気がします.
そんな将来有望な後輩を前に,私も努力せねばと思いました.
これからは日記…とまではいかなくても,私が一人前のプログラマーになるまで(なれると信じて)の軌跡をここに記していこうと思っています.
ツムツムの自動化は意外とアクセスがあったようで,近々更新しようと思っています.
今は研究が忙しく,どうも更新できてないです,申し訳ない…
現在はRaspberryPi2でKVMを動かして,クローンとかマイグレーションできるようなプログラムをPythonで書いていますが,これが終わったら機械学習に手を伸ばしていこうと思っています.
機械学習…今はかなりライブラリが充実していて簡単に使えますが,その実態を知ろうとするとかなり骨が折れる作業のようですね…
まだその氷山の一角しか見てませんが,これは自分のスキルアップにはいい機会だと思って頑張ろうと思います.
明日は研究概要の提出日…終わる気がしないですが,頑張ります.
ではでは,そういうことで…
ツムツムでFrep+Llamaを使って自動化しよう
こんにちは.
今日はツムツムでハートを自動で送る方法を書きたいと思います.
需要があるかどうかは不明...
目次
環境を整えよう!
まずは環境設定ですね.
必要なものは...
- Android (iOSじゃできません)
- USBケーブル(パソコンとAndroid,AndroidとAndroidを繋ぐ)
- パソコン(Windows,Mac,Linux,Androidでも可)
- Androidアプリ
- Frep
- Llama
Androidでの操作
まずFrepとLlamaをPlayStoreからインストールしてください.
一度Frepを起動しておきましょう.
そのあと,
設定 > 開発者向けオプション > USBデバッグ
にチェックを入れてください- 開発者向けオプションがない場合,
設定 > 端末情報 > ビルド番号
を10回ほど連続でタップしましょう
- 開発者向けオプションがない場合,
PCでの操作
PCでFrepの設定ツールをダウンロードします. こちらからダウンロード
zipファイルができるので解凍してください.
今回使うのはその中に入っている
win.bat
,win_alt.bat
やmac.bat
,mac_alt.bat
(以下バッチファイル)になります.ここでAndroidとパソコンを繋ぎます.
PCでバッチファイルを開きます.ダブルクリックしてください.(win.batやってできなかったらwin_alt.bat)
Server Started
と表示されたら成功です.AndroidでFrepを起動して画面上部にサービス実行中とでれば設定完了です.
Frepを設定しよう
今回はLlamaを使う想定でプログラムを組んでいきます.
ちなみに画像認識を使います.
最初に簡単なプログラムを作ってそこから拡張していきましょう.
Frepの設定を変更する
Frepを起動して,オプションを押してください.
システム設定から
- 撮影タイプ > BMP(高速)
- 全ビットを画像認識にしよう > off(チェックマークを外す)
これで画像認識の速さがかなり変わります.
新規プログラムを作成
ツムツムを起動して,通知タブのFrepをタップしてパネルを表示します.
おそらく左上にRecと赤い丸のパネルが出てきます.
赤い丸を押すと記録が開始され,電源ボタンを押すと記録が終了します.
今回は上にスクロールする関数を作ります.
赤い丸を押して,適当に操作します.
終わったら電源ボタンで画面オフにしてください.画面をオンにするとFrep簡易設定ってのが出てきますのでラベルに
送信
とでも名付けておきましょう.
保存して一旦ツムツムを閉じましょう.Frepを起動して,記録の管理を押してください.
するとさっき記録したプログラムがあります.
それをタッチして操作間隔の調整(プログラム変換)を押してください.
基本このページでプログラムを作っていきます.前の画面に戻ると
送信+
というプログラムが作られていると思うので送信
は 削除しちゃいましょう.(無料だと3つまでしか保存できないので)
まずは画面上の4人にハートを送るプログラム
早速ですが,ここが一番の肝です.
ここが成功するとあとは適当でも大丈夫だったりします.ハート認識用のスクショをとります.
できればこんな感じで...
ピンクのハート4つのスクショとピンクのハートなし(自分の情報見る黄色いボタンあったほうがいい)のスクショとピンクのハートを1つにして少しずつずらしたスクショ(4枚ほど)の6枚です.
あとは送信の時に使うスクショも撮っておきましょう.
ハート送るときの画面ですね.
送信+
でプログラム変換の画面にいきます.まずは何もない状態にしましょう.
送信っていう関数があるはずなのでチェック入れて右上の四角が縦に三つあるやつ(以下メニューボタン)を押して削除を選択します.最初はハートの画像を認識して押す操作です.
右下の条件を押して画像認識を選択します.
画像ファイルから選択を押してピンクのハートが4つあるスクショを選びます.
そのまま適用を押します.認識する範囲を指定となりますので,ハートの部分を選択します.
移動はスワイプ,範囲の指定は二本指で広げたり閉じたりします.認識する範囲を指定するとき,機種によってはハートのピンクの部分だけを選択するほうが正確なのと,ボタン全体を選択するほうが正確なときがあります.
- 次に検索範囲のボタンを押します.
ここで横幅をボタン全体にし,縦はランキングのスクロールできる画面全体にします.
これを確かめるために先ほどのスクショを使用します.
その前に設定です.以下を参考にしてください.
失敗のときの遷移はまだ設定しないで大丈夫です.
この設定が終わったら右上のテストを押します.
これで画像を選択すると画像が認識されているか確かめることができるので,先ほど撮ったスクショを選択してちゃんとハートが認識されていればOKです.うまくいかなかった場合は戻って調整しましょう.
できたら適用を押します.
これで画像認識は完璧(なはず)なので,4人に送るプログラムにします.
次はハートをプレゼントでOKボタンを押します.
認識する画像はこんな感じで選択してください
- 設定は以下の通りに
次はハートをプレゼントしました.の画面です.
認識する画像はこんな感じで選択してください
- 設定は以下の通りに
最後に条件 > ループ開始で繰り返しを4回にセットして,全体をループさせます.
最後にハートの画像認識の失敗のときの遷移をループ終了にして完成です.
他の画像認識の失敗はありえないはず(ハートがうまく認識できれば)
できたプログラムはこのようになってるはずです
ループ開始(4回)
画像認識(ハート)(成功:次へ,失敗:5へ)
画像認識(OK)
画像認識(TSUMTSUM)
ループ終了
次は下から全員に送れるようにしよう
ツムツムを開いてRecを押して上に3人スクロールする関数を作ってください.
3人ですよ?その方が確実なんで.
ちなみにそこまで正確じゃなくても大丈夫です.
ラベルを上スクロールとでもしておきましょう次にFrepを開いて,上スクロールをタップして,プログラム編集してください.
上スクロールの右にあるチェックマークをつけて,メニューから切り出しを選択します.
名前はそのまま上スクロール+で大丈夫です.そしたら上スクロールと上スクロール+は邪魔なんで削除して,送信+のプログラム編集を押します.
条件 > 関数呼び出し > 上スクロール+を押すと,一番下に上スクロール+が追加されています.
条件 > 待機 > 1秒にして上スクロール+の上に実行すると安定するでしょう.
あとはこれに条件 > ループ開始 > 回数は送る人数÷3にして,全体を囲めばOKです.
プログラムのフロー
ループ開始(送る人数÷3回)
ループ開始(4回)
画像認識(ハート)
画像認識(OK)
画像認識(TSUMTSUM)
ループ終了(4回)
上スクロール+
ループ終了(送る人数÷3回)
送る前に一番下に移動してくださいね.
上からやると送信中にスコアを更新した人に送られない可能性があるので下からやってます.
不測の事態が起こるかもしれないので,ループ回数は多めにセットした方がいいかもしれません(私は+5回くらい)
次に受け取りを追加します.
なるべく一括受け取りの方がおすすめです.
なぜならLlamaを使う時に時間を指定するからです.
個別受け取りだと,送られた数に比例してプログラム実行時間が長くなります.
一括受け取り
これは簡単です.
必要なスクショは4枚(追加で3枚です)
タッチ操作 メールボックスを開きます
画像認識 まとめて受け取るを画像認識でタップします
画像認識 OKを画像認識でタップします
画像認識 とじるを画像認識でタップします
画像認識 とじるを画像認識でタップします
個別受け取り
タッチ操作 メールボックスを開きます
タッチ操作 確認ボタンを押します
画像認識 OKボタンを押します
画像認識(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を使うことによってアプリを終了させたり起動させたりします.
自分のプログラムのフローはこのようになっています.
アプリ終了
待機 3秒
アプリ起動
ループ開始4回
タッチ操作(ダブルタップ) : どこでもOK
待機0.5秒
ループ終了
待機5秒
画像認識[TAP TO START]タイムアウト15秒:失敗したら8へ
待機10秒
待機0.5秒
画像認識[とじる]タイムアウト5秒:成功したら11へ失敗したら次へ
待機5秒
上記全受け取りプログラム
下スクロール[一番下にスクロールさせるプログラムを作ってください]
上記下から全員に送るプログラム
待機5秒
上記全受け取りプログラム
アプリ終了
このようになります.
簡易になりまして申し訳ありません.
そして完全自動化へ...
あとはお好みで改良しちゃってください!
自分はスコア0の人には送らないように画像認識で頑張ってましたが精度が良くないので失敗してました…
最後の方適当になってしまい本当に申し訳無いです.
時間ができましたら画像の方を追加して見やすくしようと思っています.
ここまで見てくださってありがとうございました.
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の記事が無駄にならなかった…
gdbコマンド集
UMLでgdbを使ってカーネルをデバッグしようとして気づいた…
「あれ,コマンドなんだったっけ?」
ってことで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
- アドレス番号からメモリリーク出力(16進数)
<ファイル名>の<関数名>にブレイクポイント(<ブレイクポイント番号>)を指定し,さらに<条件>になったときにブレイクする
ブレイクポイントを解除するには
condition <ブレイクポイント番号>
とするbreak <ファイル名>:<関数名> run delete watch <条件> c
<条件>以外の時にストップさせる
- deleteでブレイクポイント削除
<条件>の指定方法
watch(wa) <条件>
: <条件>の値が変化した時に停止awatch <変数>
: <変数>に値が書き込まれたときに停止
set <変数> = <値>
- 変数を変更できる
help (<コマンド>)
- コマンドのヘルプを表示する
- コマンドを入力しないとgdb全体のヘルプを表示する
ん〜こんなところかな…
なんかあったらまた追記していきます
BHyVeを使ってみよう!
目次
BHyVeとは?
- "BSD hypervisor"(BSDハイパーバイザー)の略
- FreeBSD向けに開発されたレガシーフリーなハイパーバイザー(Hypervisor)/仮想マシンマネージャ
- bhyveは、拡張ページテーブル(Extednded Page Tables, EPT)やvirtio(VirtIO)ネットワーク/ストレージドライバのようなモダンなCPUの仮想化支援機能を利用する
- FreeBSD入門
使ってみる
- 実際やってみて色々つまずいたので,ここにメモする.
実行環境
- MacOS X El Capitan v10.11.5
- VMWare Fusion v8.1.1
- FreeBSD v10.3-RELEASE
VMWare Fusionを使う理由
- BHyVeはVT-x(CPU仮想化機能)とEPT(メモリ仮想化機能)が必須となっている
- なので,EPTをサポートしてないVirtualBoxは使えない.
手順
1.まず,VMWare FusionにFreeBSDを入れる.
私はFreeBSD-10.3-RELEASE-amd64-disc1.iso
を入れた.
2.インストールしたのち,一度シャットダウンし,
設定→プロセッサとメモリ→詳細オプション→この仮想マシンでハイパーバイザアプリケーションを有効にする
にチェックを入れる
これでVT-xとEPTを有効にする.
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.FreeBSDでifconfig
を使い,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-linux
でUMLのパッケージをインストールする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=256M
でUMLを起動- rootでloginできる
linux-3.3.8
に移動make defconfig ARCH=um
でUMLのデフォルトコンフィグファイルを作成sudo apt-get install libncurses5-dev
をインストールするmake menuconfig ARCH=um
で必要な機能を設定するが,なにもせずExit
make
してAllEnter- ここ長いよ
make -j2 ARCH=um
でカーネルをコンパイルするここも長いよ
ls
でlinux
ファイルあれば成功!これが実行ファイルになる- いよいよ
./linux ubda=../CentOS6.x-x86-root_fs mem=128M
でUMLを起動する.- はい失敗.
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
- 一応
gdb
でfile linux
すればデバッグできるなぁ... - 及第点ってとこですかね.
参考サイト
- User Mode Linuxの設定
- Building from source
- LinuxカーネルHack: GDBとKVMによるカーネルデバッグ
- UserModeLinux
- The User-mode Linux Kernel Home Page
- 仮想OS「User Mode Linux」活用法
- User Mode Linux
- UML(user mode 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
は実行されてるらしいこの形式はなに…?
これ,成功編のブログ書けるのかな…