CUI操作マニュアル

■ FreeBSDのOVAイメージをインポートする

以下の手順で,「FreeBSD-avr-kozos.ova」(OVA形式のファイル)をインポートします. 「FreeBSD-avr-kozos」という名前のシステムがインポートされます.

インポートできたら,起動してみましょう.

■ CUIに慣れよう

CUI(キャラクタ・ユーザー・インターフェース)に慣れてみましょう. UbuntuなどのGNU/Linuxシステムも,解析などに利用する各種ツール類も, CUIベースで操作することが前提になっているものも多いので,慣れておいて 損は無いです.あと,CUIをバリバリ使えるのって,かっこいいからです.

まず,インポートした仮想PCを起動します. すると以下のようにログインプロンプトが出てきます.

login: 
以下でログインします.
ログイン名:user
パスワード:user
ログインすると,以下のコマンドプロンプトが出てコマンド入力待ちになります.
user@vboximage:~>% 
とりあえず,lsコマンドでファイル一覧を表示させてみましょう.
user@vboximage:~>% ls
...(ファイル一覧が表示される)...
さて,このVMイメージは,パスワードがザルになっています. まずはパスワードを変更しておきましょう.

以下を実行してスーパーユーザーになります. (スーパーユーザー(root)とは,管理用のAdminユーザーのことです.なんでもできて しまうので,普段の作業は一般ユーザー(user)で行って,システム変更は スーパーユーザーで行います)

user@vboximage:~>% su
Password: (スーパーユーザーのパスワードを聞いてくるので,「root」と入力しEnter)
vboximage# (スーパーユーザーになりました)
passwd user でパスワード変更をします.
vboximage# passwd user
Changing local password for user
New Password: (新しいパスワードを入力します)
Retype New Password: (もう一度入力)
vboximage# (パスワード変更が完了しました)
passwd root でスーパーユーザーのパスワードも変更します.
vboximage# passwd root
Changing local password for root
New Password: (新しいパスワードを入力します)
Retype New Password: (もう一度入力)
vboximage# (パスワード変更が完了しました)

■ bashを使いたい場合には

「bashって何?」というひとは,ここは気にしないで読み飛ばしてかまいません.

FreeBSDでは「tcsh」というシェルがデフォルトになっています. bashを使いたいひとは,以下でbashに切り替えましょう.

user@vboximage:~>% bash
[user@vboximage ~]$     (bashに切り替わりました)

■ screenコマンド

さて,ここまででCUIをある程度扱いましたが,操作画面がひとつしかなくて不便です.

screenという便利なコマンドがあります.

user@vboximage:~>% screen
これで画面を複数開けるようになります.

以下を試してみてください.(やってみるとわかります)

[Ctrl]+「j」 → 「c」 ... 新しい画面を作成
[Ctrl]+「j」 → 「p」 ... 前の画面に移動
[Ctrl]+「j」 → 「n」 ... 前の画面に移動
複数の画面を開いて,切り替えて操作することができます. 実は文字列のカットアンドペーストとかもできます. やりたいひとは各自でググってください.

■ ファイル操作

以下でファイル操作ができます.やってみましょう.
% ls                     ... ファイル一覧を表示

% ls -l
% ls -l <ファイル名>     ... ファイル一覧(詳細)を表示

% cd <ディレクトリ名>    ... ディレクトリ移動
% cd ..                  ... ディレクトリをひとつ戻る
% cd ~                   ... ホームディレクトリに戻る

% cat <ファイル名>       ... ファイルの内容を表示

% rm <ファイル名>        ... ファイルを削除

% cp <コピー元ファイル名> <コピー先ファイル名>
                         ... ファイルのコピー

% mv <コピー元ファイル名> <コピー先ファイル名>
                         ... ファイルの移動

% mkdir <ディレクトリ名> ... ディレクトリ作成

■ ファイル編集

ファイルの内容をゆっくり見たい場合には, 以下でビューワを使って見ることができます.
% less <ファイル名>
キー操作は,以下のとおりです. ファイル編集は以下でできます.テキストエディタ(メモ帳のようなもの)が使えます.
% nano <ファイル名>

■ ファイルの解凍

圧縮ファイルは以下で解凍できます.

ZIP形式

% unzip sample.zip

tar.gz形式(tgz形式)

% tar xvzf sample.tar.gz

■ バイナリファイルの参照・編集

hexeditというバイナリエディタが使えます.
% hexedit <ファイル名>
操作方法は以下です.

■ 終了方法

スーパーユーザーになって,shutdownコマンドで終了できます.
% su
Password:
# shutdown -p now

■ プログラムのコンパイル

ホームディレクトリに,サンプルプログラムが置いてあります.

以下でプログラムをコンパイルして,実行モジュールを作成できます.

user@vboximage:~>% ls
...
user@vboximage:~>% cd avr_03-hello
user@vboximage:~/avr_03-hello>% ls
...
user@vboximage:~/avr_03-hello>% cd os
user@vboximage:~/avr_03-hello/os>% ls
...
user@vboximage:~/avr_03-hello/os>% make clean (掃除)
user@vboximage:~/avr_03-hello/os>% make (コンパイル)
user@vboximage:~/avr_03-hello/os>% ls
(kozos.elfが作成されていることを確認.これが実行モジュールです)

■ GDBの使いかた

作成した実行モジュールは,以下の手順でシミュレータで実行できます.
user@vboximage:~/avr_03-hello/os>% /usr/local/cross/bin/avr-elf-gdb -tui kozos.elf

(Type  to continue, ... とか表示されていたらEnterを押して先に進めます)

(gdb) 
GDBが起動して,コマンドの入力待ちになっています.

まずは,以下を実行します.

(gdb) target sim
(gdb) load
loadを実行すると,/dev/pts/0 を開いたのでそこに繋げ,的なメッセージが 出てきます./dev/pts/1 だったり /dev/pts/2 だったりするかもしれません.

この状態で,別のコマンドプロンプトから以下を実行することで, シミュレータ上で動作しているモジュールに仮想的にシリアル接続します.
※ screenコマンドを利用している場合は [Ctrl]+「j」 → 「c」 で別画面を 開けます.screenコマンドを利用していない場合は,Alt+F1〜Alt+F8で画面を 切替えられます.

user@vboximage:~>% su
Password:
vboximage# cu -l /dev/pts/0  (/dev/pts/1 と言われた場合はそっちに繋ぐ)
これで接続できました.モジュールを起動してみましょう.
(gdb) run
cuで接続している側に以下のように出力されれば成功です.おめでとう!
vboximage# cu -l /dev/pts/0
Hello World!
終了は,以下のようにします.

■ ソースコードを改造して,出力文字列を変更する

メッセージ出力のソースコードは「avr_03-hello/os/main.c」にあります. 改造して,動作を試してみましょう.
user@vboximage:~>% cd avr_03-hello
user@vboximage:~/avr_03-hello>% cd os
user@vboximage:~/avr_03-hello/os>% nano main.c
(「puts()」で文字列出力しているあたりを改造する)
user@vboximage:~/avr_03-hello/os>% make (コンパイル)
(あとは同様にしてシミュレータで実行してみます)
まずは,自分の名前を出力してみましょう.

■ エスケープ・シーケンスで遊んでみる

エスケープ・シーケンスを利用することで,文字列出力時にカーソル移動したり 色を出したりすることができます.
puts("\033[A") ... カーソルを上に移動
puts("\033[B") ... カーソルを下に移動
puts("\033[C") ... カーソルを右に移動
puts("\033[D") ... カーソルを左に移動

puts("\033[30m") ... 黒
puts("\033[31m") ... 赤
puts("\033[32m") ... 緑
puts("\033[33m") ... 黄
puts("\033[34m") ... 青
puts("\033[35m") ... 紫
puts("\033[36m") ... 水色
puts("\033[37m") ... 白
puts("\033[39m") ... 色を元に戻す

puts("\033[40m") ... 背景を黒
puts("\033[41m") ... 背景を赤
...
puts("\033[49m") ... 背景色を元に戻す

■ OSを起動してみる

「avr_03-hello」がうまくいったら,次は「avr_03-sim」でやってみましょう.

「avr_03-hello」は文字列出力して終わりでしたが, 「avr_03-sim」ではコマンド入力ができます. 「echo hello」などと入力してみましょう.

■ 「組込みOS」のソースコードを読んでみる

avr_03-sim/os 以下にあるファイルを読んでみましょう.

資料はここまでです.あとはいろいろやってみよう!