玄箱Pro、直します。

超初心者が、玄箱PROでLinuxを勉強する無謀なブログです。

スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。
別窓 | スポンサー広告
∧top | under∨

ビルド練習で四苦八苦(1)~wget編~

ひとまず何か適当にビルドして慣れていこうと思いまして、玄箱Proをまたもや工場出荷状態まで戻しました。

HDDを完全消去して再度背面ボタンでフォーマット。
共有フォルダにCD-ROM内のhddrootfs.tar.gzをコピーして

~ # mkdir /mnt/disk1/devel
~ # cd /mnt/disk1
/mnt/disk1 # tar xvzf hddrootfs.tar.gz -C /mnt/disk1/devel


これで開発環境が/mnt/disk1/devel以下に構築されました。

余談ですが、ある作業中にchrootし忘れて./configureをしたら

configure: error: no acceptable C compiler found in $PATH


とエラーが出ました。導入したはずのコンパイラがない・・。
なんかやっとchrootの意味がわかったかも(笑)。

さて、余談で知ったふうに「./configure」などという言葉を使いましたが、これこそ私にとっての難関でした。
いや、現在進行形ですから「難関です」。

ためしにwgetというものをソースからビルドしてみようかと思います。
ソースをGNUから取ってきまして共有フォルダ(/mnt/disk1)にWindowsからコピーします。
そして

~ # cd /mnt/disk1
/mnt/disk1 # tar xvzf wget-1.10.2.tar.gz -C /mnt/disk1/devel/


するとズラズラ~と展開していきました。
再度プロンプトが出たら

/mnt/disk1 # cd
~ # chroot /mnt/disk1/devel


で開発環境に切り替えます。

BusyBox v1.1.1 (2006.11.29-02:37+0000) Built-in shell (ash)
Enter 'help' for a list of built-in commands.

/ # cd ./wget-1.10.2


としたところから、いよいよビルド開始です。

まずは

/wget-1.10.2 # ./configure


と入力。
お、なんかメッセージがズラズラ~と・・ありゃすぐ止まりました。

configure: configuring for GNU Wget 1.10.2
checking build system type... armv5tejl-unknown-linux-gnu
checking host system type... armv5tejl-unknown-linux-gnu
checking whether make sets $(MAKE)... yes
checking for a BSD-compatible install... /usr/bin/install -c
checking for gcc... gcc
checking for C compiler default output file name... a.out
checking whether the C compiler works... yes
checking whether we are cross compiling... no
checking for suffix of executables...
checking for suffix of object files... o
checking whether we are using the GNU C compiler... yes
checking whether gcc accepts -g... yes
checking for gcc option to accept ANSI C... none needed
checking how to run the C preprocessor... gcc -E
configure: error: C preprocessor "gcc -E" fails sanity check
See `config.log' for more details.


gcc -Eって何だ。
Manpage of GCCによると

-E

プリプロセス処理が終了したところで停止します。コンパイルはしません。出力はプリプロセス済みのソースコードであり、標準出力へと送られます。
GCC はプリプロセスを必要としない入力ファイルを全て無視します。



とのこと。なんのこっちゃ意味がわかりません。
まぁ実験なんであまり気張らずに、思いつくままにまずは入力してみます。
そういえば前回「--prefix」というものを使いましたので、「導入先」ということしかわからないまま今回もつけてみました。
前回、「標準ファームにlighttpd(1)」で記事中にあった「/opt」を今回も使ってみようかと思います。

/wget-1.10.2 # ./configure --prefix=/opt
configure: configuring for GNU Wget 1.10.2
checking build system type... armv5tejl-unknown-linux-gnu
checking host system type... armv5tejl-unknown-linux-gnu
checking whether make sets $(MAKE)... yes
checking for a BSD-compatible install... /usr/bin/install -c
checking for gcc... gcc
checking for C compiler default output file name... a.out
checking whether the C compiler works... yes
checking whether we are cross compiling... no
checking for suffix of executables...
checking for suffix of object files... o
checking whether we are using the GNU C compiler... yes
checking whether gcc accepts -g... yes
checking for gcc option to accept ANSI C... none needed
checking how to run the C preprocessor... /lib/cpp
configure: error: C preprocessor "/lib/cpp" fails sanity check
See `config.log' for more details.


んん・・・今度はさっきと違うぞ・・。
てか「--prefix」ってあるのと無いのじゃ結果が違ってくるんだ。単なる「保存先」とはわけが違うのかな・・。
で、今度は「/lib/cpp」と。
Wikipediaで調べると

プログラム言語C言語の標準プリプロセッサであるC Preprocessorの略。


って何じゃそりゃ。これがどうしたっていうんだ!!
ひとまず開発環境を

/wget-1.10.2 # exit


で抜けて探してみました。

/ # find -name cpp
./mnt/disk1/devel/usr/bin/cpp
./mnt/disk1/devel/usr/lib/cpp
./mnt/disk1/devel/usr/src/perl-5.8.8/qnx/cpp


一番最後のはperlのっぽいので1番か2番だろうなぁ。
まず怪し目の2番。

/ # cd /mnt/disk1/devel/usr/lib
/mnt/disk1/devel/usr/lib # ls -l | grep cpp
lrwxrwxrwx 1 root root 10 Jul 30 17:05 cpp -> ../bin/cpp


やっぱりリンクかぁ。てことはオオモトは1番ですね。
そこで

/mnt/disk1/devel/usr/bin # ln -s cpp /mnt/disk1/devel/lib


で対処。再度chrootに切り替えてチャレンジ。

/ # chroot /mnt/disk1/devel
/ # cd ./wget-1.10.2
/wget-1.10.2 # ./configure --prefix=/opt


すると、またもや同じ「/lib/cpp」エラー。う~ん、リンクじゃダメなのかなぁ。
それなら

/wget-1.10.2 # exit
/ # rm /mnt/disk1/devel/lib/cpp
/ # cp /mnt/disk1/devel/usr/bin/cpp /mnt/disk1/devel/lib


とコピー。そして再々チャレンジ。

/ # chroot /mnt/disk1/devel
/ # cd ./wget-1.10.2
/wget-1.10.2 # ./configure --prefix=/opt


おお!!!なんか良かったっぽい(笑)。
ズラズラ出てます。そして

creating po/Makefile
/wget-1.10.2 #


と止まりました。無事にMakefileは作れたらしいです。
今のところネックは

・./configureにつける「--prefix=」
・mnt/disk1/devel/lib/cppは「/mnt/disk1/devel/usr/bin/cpp」のコピー

です。

(2007.8.3追記)
もう一度、はじめから実験してみましたが、どうやら「--prefix=/opt」は関係ないみたいです。最初から/libにcppを用意しておいてやるとすんなり./configureだけでmakefile作ってくれました。


さて、今の状態で/optには何が入ってるんでしょうか。
ということで

/ # ls
bin      sys      wget-1.10.2
boot     home     root     tmp
dev      lib     sbin     usr
etc      mnt     share     var



・・ない。/optなんてない
んんんんん・・。あ、なるほど。
prefixって「保存先フォルダ」って感じの実効性のものじゃなくて、Makefileに組み込むための設定なんですね・・?
つまり今現在このディレクトリがなくても問題はないんだ・・。むむ・・。
さて、いよいよmakeです。人生初の自力makeです(笑)。

/wget-1.10.2 # make


ズラズラ~と気持ちのいい感じ。
するとログが

make[1]: Entering directory `/wget-1.10.2/po'
file=./`echo bg | sed 's,.*/,,'`.gmo \
&& rm -f $file && PATH=../src:$PATH msgfmt -o $file bg.po
/bin/sh: msgfmt: not found
make[1]: *** [bg.gmo] Error 127
make[1]: Leaving directory `/wget-1.10.2/po'
make: *** [po] Error 2
/wget-1.10.2 #


と止まりました。
「/bin/sh: msgfmt: not found」。
msgfmt・・メッセージフォーマットかな?
これ何?調べると「gettextというパッケージに入っているらしい」とのこと。
うへぇ・・もうわけわかりませんよ・・。

何とかそのgettextのソースを落として展開。

/mnt/disk1 # tar xvzf gettext-0.16.1.tar.gz -C /mnt/disk1/devel


そして

/mnt/disk1 # cd
~ # chroot /mnt/disk1/devel
/ # cd ./gettext-0.16.1
/gettext-0.16.1 # ./configure


すると

configure: error: C preprocessor "/lib/cpp" fails sanity check
See `config.log' for more details.
configure: error: ./configure failed for autoconf-lib-link
/gettext-0.16.1 #



またcpp・・。もうダメポ・・。

(2007.8.2追記)
Pyon's Diaryさんの「KURO-BOX/PRO (其乃廿參) Debian (etch) を入れる。」によると、wgetのエラーについて

コンパイルがエラーで終了するが、「玄箱 PRO の Debian Etch 化の手順」に據れば此は gettext の msgfmt が無い爲に起こるが、実用上は無視して構は無いとの事。


と解説されていました。実際にmake installしてみると、エラーは出たものの確かに/mnt/disk1/devel/opt/binにwgetがありました。嬉しいやらしっくりこないやら(笑)。
しかも/lib/cppの問題をとっくに解決されていたみたいだし・・もっと早くここ読んでおけば良かった・・。

スポンサーサイト
別窓 | 標準ファームで遊ぶ | コメント:1 | トラックバック:0
∧top | under∨

標準ファームにlighttpd(1)

いろいろと後回しにしていた「理解すべき項目」たちをやっつけていくために、また玄箱Proを標準ファーム・フラッシュブートに戻し、日経Linuxの2007.6月号の特集3「玄箱PROを堪能する/Part2 高速Webサーバー「lighttpd」を動作させる」を試してみました。
米田さんの記事です。

概略として

・標準ファーム・フラッシュブートのままで導入
・シリアルコンソールは必要なし
・lighttpdをHDDに展開し、/にシンボリック・リンクを作成
・ソースファイル一式をアーカイブしたファイル「lighttpd_src.tar.gz」が本誌付録にあり、それを使用


という内容です。
誌面を見ながら順番通りに導入しますので、失敗はありません。誰でもできます。

ひとまず導入の流れを理解するために、まずはこの誌面通りにやってみます。
今回の自分ポイントは

・chrootの理解
・ソースからビルドする方法

などです。

1.玄箱PROをネットに接続する

/etc/netinfoでIPアドレスなどをスタティックに設定します。
私はルータで玄箱Proに固定IPを払い出しているのでこの項目は飛ばしました。


2.開発環境を導入する

玄箱Pro付属CD-ROMから開発環境を導入します。
要するに製品仕様書30P「Appendix B:開発環境の構築方法」をほぼそのまま実行します。

まずは背面のリセットボタンを長押ししてHDDのフォーマットからです。
フォーマットされたHDDは/mnt/disk1でマウントされますので、そこにCD-ROMの開発環境である
hddrootfs.tar.gz
をコピーします。
さらに、開発環境の導入先として/mnt/disk1/develディレクトリを用意し、ここに先ほどの開発環境を展開します。

~ # mkdir /mnt/disk1/devel
~ # tar xvzf /mnt/disk1/hddrootfs.tar.gz -C /mnt/disk1/devel


この後ログで8490行、ひたすら待ちます。
この時点で、/mnt/disk1/devel以下に開発環境が整い、chrootすることで/以下と同じように構築することができる、ということですよね・・。


3.ソースのビルドとインストール

CGIスクリプト「Perl」、FastCGIのライブラリ「fcgi」およびlighttpd本体をソースからインストールします。FastCGIを利用するために「ExtUtils-Embed」および「FCGI」というPerlのモジュールも必要です。これら必要なソース・ファイル一式をアーカイブしたファイル(lighttpd_src.tar.gz)を本誌付録メディアに収録しておきました。先ほどと同じく、玄箱PROの/mnt/disk1にコピーした後、展開します。


とのことなので、その通りにします。

/mnt/disk1 # ls
devel hddrootfs.tar.gz lighttpd_src.tar.gz
/mnt/disk1 # tar xvzf /mnt/disk1/lighttpd_src.tar.gz -C /mnt/disk1/devel/usr/


約6500行のログが生成されます。

ここからがchrootの出番なんですが、

/optにlighttpdなど一式をインストールする設定で進めます。


と本誌にも説明があるように、/mnt/disk1/develが仮想的に/になり、ビルドされるソース一式にも「/optに自分たちは構築されるんだ」と認識させるように振舞う感じでしょうか。

/mnt/disk1 # chroot /mnt/disk1/devel


先ほど展開した開発環境は/usr/srcにありますので、Perlのインストールを/usr/src以下で行います。

/ # cd /usr/src/perl-5.8.8/
/usr/src/perl-5.8.8 # ./configure.gnu -Dprefix=/opt
/usr/src/perl-5.8.8 # make
/usr/src/perl-5.8.8 # make test
/usr/src/perl-5.8.8 # make install


今は詳しく触れませんが、この./configureについている様々なオプションの意味もよくわかっていません。
.gnuとかDprefixのDとか。
全然調べてもいないので、また後で調べます。とにかく今は書かれている通りに進めます。

次にFastCGIモジュールをインストールします。

/usr/src/perl-5.8.8 # cd /usr/src/FCGI-0.67
/usr/src/FCGI-0.67 # /opt/bin/perl Makefile.PL
/usr/src/FCGI-0.67 # make
/usr/src/FCGI-0.67 # make install


続いてFastCGIのディスパッチャで使用するPerlモジュールEmbed::PresistentとFastCGIのインストールです。

/usr/src/FCGI-0.67 # cd /usr/src/ExtUtils-Embed-1.14
/usr/src/ExtUtils-Embed-1.14 # /opt/bin/perl Makefile.PL
/usr/src/ExtUtils-Embed-1.14 # make install
/usr/src/ExtUtils-Embed-1.14 # cd /usr/src/fcgi-2.4.0
/usr/src/fcgi-2.4.0 # ./configure --prefix=/opt
/usr/src/fcgi-2.4.0 # make
/usr/src/fcgi-2.4.0 # make install


そしてlighttpd本体をインストールし、chroot環境を抜けます。

/usr/src/fcgi-2.4.0 # cd /usr/src/lighttpd-1.4.13
/usr/src/lighttpd-1.4.13 # ./configure --prefix=/opt
/usr/src/lighttpd-1.4.13 # make
/usr/src/lighttpd-1.4.13 # make install
/usr/src/lighttpd-1.4.13 # exit


これでひとまず必要なものを一式詰め込んだ状態です。


4.lighttpdの設定

仮想/optに展開したものを実際の/optに配置します。
本誌では玄箱Proの少ないフラッシュメモリに配置することをあまり推奨せず、/mnt/disk1/devel/optのシンボリック・リンクを/に作成する方法を一番に挙げています。
事実上HDD上でlighttpdは動作しているわけですね。

/mnt/disk1 # ln -s /mnt/disk1/devel/opt /



5.設定ファイルを作成する

設定ファイル「lighttpd.conf」も付録にありましたので、これをサクっと/opt/etc以下に置きます。
ここではデフォルトで公開用ディレクトリは/mnt/disk1/htdocsになっているようです。
確かにこれなら容量に余裕があり、尚且つ更新作業時などでも簡単に共有フォルダへWindowsからでもアクセスできかなり便利ですよね。
では、その/mnt/disk1/htdocsを作成します。

/mnt/disk1 # mkdir /mnt/disk1/htdocs
/mnt/disk1 # chmod 777 /mnt/id disk1/htdocs


ここで、本誌に以下の解説があります。

FastCGIの設定には、CGIのスクリプトごとに設定する方法と、すべてのCGIをFastCGIとして動作させる方法があります。前者の方がパフォーマンスは高くなりますが、後者の方が、Apache HTTP Serverのmod_perlに近い汎用性が得られるというメリットがあります。今回は後者を試すことにします。


そして、この「後者」の場合、perlで記述されたCGIを呼び出すディスパッチャが必要になるそうです。
それが/opt/bin/dispatch.fcgiとして以下の内容。

#!/opt/bin/perl
use strict;
use CGI::Fast;
use Embed::Persistent;
{
  my $p = Embed::Persistent->new();
  while (new CGI::Fast) {
    my $filename = $ENV{SCRIPT_FILENAME};
    my $package = $p->valid_package_name($filename);
    my $mtime;
    if ($p->cached($filename, $package, \$mtime)) {
      eval {$package->handler;};
    } else {
      $p->eval_file($ENV{SCRIPT_FILENAME});
    }
  }
}


そして所有者と所有グループをlighttpdの実行ユーザーapache、同グループであるapacheに変え、実行権限を付けておきます。

/mnt/disk1/devel/opt/bin # chmod +x /opt/bin/dispatch.fcgi
/mnt/disk1/devel/opt/bin # chown apache:apache /opt/bin/dispatch.fcgi


導入自体はこれで完了です。
その後、Busyboxのhttpdを止め、lighttpdを起動させます。
あとはchmodでa+xをつけたテスト.cgiファイルで実験して動作確認です。

/mnt/disk1/devel/opt/bin # /etc/init.d/httpd.sh stop
/mnt/disk1/devel/opt/bin # /opt/sbin/lighttpd -f /opt/etc/lighttpd.conf


自動起動の設定は/etc/init.d/httpd.shを以下のように書き換えます。

#!/bin/sh

PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:/opt/bin:/opt/sbin:

HTTPD=/opt/sbin/lighttpd
CONF=/opt/etc/lighttpd.conf
PIDFILE=/var/run/lighttpd.pid

HTTPD_START(){
    if [ -f $CONF ] ; then
        $HTTPD -f $CONF
    fi
}

HTTPD_STOP(){
    kill `cat $PIDFILE`
}

HTTPD_RESTART(){
    HTTPD_STOP
    sleep 1
    HTTPD_START
}

case $1 in
start)
    HTTPD_START
    ;;
stop)
    HTTPD_STOP
    ;;
restart)
    HTTPD_RESTART
    ;;
*)
    ;;
esac



6.スワップ領域を作っておこう

FastCGIを利用する場合、perlのプロセスが常駐するため、メモリ不足を解消する必要があります。
HDD上に容量256MBのスワップ・ファイル(swapfile)を作成し、mkswap、swaponコマンドを使います。

~ # dd if=/dev/zero of=/mnt/disk1/swapfile bs=1024 count=262144
~ # mkswap /mnt/disk1/swapfile
~ # chown root:root /mnt/disk1/swapfile
~ # chmod 600 /mnt/disk1/swapfile
~ # swapon /mnt/disk1/swapfile


/etc/init.d/rcSファイルの末尾にswaponコマンドを追加すればスワップ・ファイルが起動時に有効になります。


以上が私が日経Linuxの特集を見ながら実行した作業です。
順調にlighttpdは動作しました。

今回の作業で疑問に思ったことを挙げておいて、次回までになんとか解決するようにします。
そして次回は付録のデータを一切使わずに同じ内容を再現してみようかと思います。
別窓 | 標準ファームで遊ぶ | コメント:0 | トラックバック:0
∧top | under∨

メモ

ちょっとメモ。
私自身が理解できない項目の羅列。
以後調べるべきものたち。

■カーネルの再構築
サイトでもよく見かけ、書籍でも触れているけど、いまいち理解できない。

■セルフコンパイル
言葉そのものの意味は理解できるけど、内容はまったくわからない。

■chroot
理解度はまだあやしい。なぜこれが必要なのか今ひとつわからない。

■mtdblock
いまだによくわかっていない(笑)。

■debootstrap
これもよく見かけるがわからない。

■lib
どうして必要なlibが導入前にわかるのか謎。

■tarコマンドにつく「-C」
調べても見つけられない。調べ方が悪いのかも・・。
(2007.7.25追記)
Wikipediaに載ってました(汗)。明らかに検索の仕方が悪かった。

-C directory アーカイブからファイルを取り出して、指定したディリクトリに入れる



■ldの役割
これもまったくわからない(笑)。

■gccとmakeの関係
いや、なんとなくわかりかけてるんだけど・・一応あげとく。

思いつくのは今のところこれだけ。
先に進めば進むほど増えていくのは覚悟しています(笑)。


サイトを巡っていると、玄人な方たちが様々な実験報告や検証結果を紹介してくださっています。
しかし、そこに書かれていることそのものの目的や動機が理解できないので、私の勉強も遅々として進みません。

楽しいので苦ではないですが、いかに私がコンピューターについて無知だったか思い知りました・・。

頑張ります。
別窓 | 日記のようなもの | コメント:2 | トラックバック:0
∧top | under∨

miconaplなどの導入(2)

前回、miconapl・nvramに必要なライブラリとmiconapl・nvramそのものをコピーしました。
その結果、ライブラリへのPATHとコマンドそのものへのPATHを毎回指定さえすれば動かすことができました。

例)
kurobox:~# LD_LIBRARY_PATH=/usr/local/kurobox/lib /usr/local/kurobox/bin/miconapl -b -a temp_get
#[miconapl.temp_get]
temp=33
kurobox:~# LD_LIBRARY_PATH=/usr/local/kurobox/lib /usr/local/kurobox/bin/nvram -c printenv
1: [baudrate=115200]
2: [loads_echo=0]
・・(略)・・
40: [bootcmd=ide reset; ext2load ide 0:1 $(default_kernel_addr) /$(kernel); bootm $(default_kernel_addr)]
41: [nand_boot=no]


まぁ・・個人的にものすごく感動したんですが・・ちょっと仕組みが理解しやすい項目だったので、こういうのは本当に楽しいです(笑)。

で、今回はこのめんどくさいPATHの指定を省くやり方と、電源ボタンの有効化・ファンコントロールの自動化を導入します。

参考にしたサイト
エレキジャックさん
nvram, miconapl を使えるようにする
ファンの制御と電源スイッチ

まず、私が理解できた手順です。

■PATHをコマンドに渡す仲介役が必要

→この仲介役にもともとPATHの情報を持っててもらって、必要な時にコマンド(/usr/local/kurobox/bin内にある)にPATHとオプション情報を渡してくれればいい



■普通にコマンドを呼び出した時に、自動で仲介役を呼べばいい

→呼び出された仲介役は前述の通り本来のコマンドを呼び処理してくれる



おそらくこういう流れではないかと・・。
まず1番目の仲介役、これがエレキジャックさんの

miconapl-nvram.tar.gzをダウンロードし、適当なディレクトリ (/home/kurobox など)にコピーします。コピーしたら、/usr/local/sbin に展開します。


です。/usr/local/sbinに展開されたmiconapl(これは仲介役のmiconapl)には

# !/bin/sh

CMD=/usr/local/kurobox/bin/`basename $0`
LD_LIBRARY_PATH=/usr/local/kurobox/lib $CMD $*


という内容が記述されているらしいです。細かいことはわかりませんが、CMDのPATHがコマンドのPATHだということは眺めればわかります。エレキジャックさんも

ダイナミックライブラリの検索パスを指定し、呼び出されたコマンド名の /usr/local/kurobox/bin/ 内の相当するバイナリを呼び出しています。


と説明してくださってます。まさに仲介役な仕事です。

2番目の、普通に呼べば仲介役が返事をする、これがまだ不安なんですが・・。
結局、どうしてこれが実現できているのかはわかっていません。
またまた研究します。

とりあえず、これを導入した時点で、miconapl、nvramの最終的な意味でのコマンド導入は終了です。

次に電源ボタンとファンコントロールです。
ファンの制御と電源スイッチ」の通りに作業すれば簡単簡単♪

念のために電源ボタンを3秒程度押してhaltするかどうか、後部のリセットボタンを押してrebootするかどうか試してみます。
コンソール上に「System halted.」と出ているのに玄箱本体の電源が落ちない場合は

kurobox:~# cat /etc/default/halt


で確認。

# Default behaviour of shutdown -h / halt. Set to "halt" or "poweroff".
HALT=poweroff


となっていれば

HALT=halt


と編集すればOK。

あと余談ですが、エレキジャックさんのエントリではなくコメント欄に「ブート完了したらピロリロ~♪」の小技がありました。

rc.localのexit 0の前の行に
${MICONAPL} -a bz_melody “30 b4 b5 b4 b6″
を挿入


これで工場出荷時と同じブート完了音が鳴ります。ちょっと便利かも(笑)。
別窓 | Debianで遊ぶ | コメント:0 | トラックバック:0
∧top | under∨

miconaplなどの導入(1)

前回、よくわからないまま導入したmiconaplとnvramですが、玄箱Proをまた工場出荷時に戻してじっくりと調べてみました。
少しまとめてみます。

参考にしたサイト

エレキジャックさん
オリジナルファイルのバックアップ
nvram, miconapl を使えるようにする

開発人生さん
玄箱プロにDebian



まず素人な私の頭の整理から。

・ファンコントロールや電源ボタンなどはmiconaplというコマンドらしい
・miconaplは玄箱Pro特有のコマンドらしい
・miconaplは著作権の関係で第三者が勝手に配布できない


エレキジャックさんの「nvram,miconaplを使えるようにする」を何度も読み返しました。
私のような初心者にUnix系のOSを「難しい」と感じさせる原因の一つは「ディレクトリ」の表現ではないでしょうか?
「/usr/local/sbin」「home/mtd2/sbin」などと文字で書かれると訳がわからなくなりバーチャル迷子になってしまいます。

というわけで、自分なりに図にして理解に努めました。
それと、C言語がまったくわかりませんので、他の方と違い、スクリプトを眺めても苦悶するばかりです。いろいろな方々が残してくれたサイト上の貴重な記録を片っ端から読んで、なんとか自分なりの理解まで漕ぎつけました。
Googleがあれば本当に大半は答えがみつかりますね・・。

まず、エレキジャックさんの「nvram,miconaplを使えるようにする」からのこの文章

■Debian 化で使えなくなった理由は?
 Debian 化で使えなくなった理由は、nvram も miconapl も玄箱PROに特有で Debian のパッケージがないことが、その理由です。では、フラッシュメモリやhddroofs.tar.gz内からコピーすればいいかというと、それだけではダメです。理由は必要なライブラリも用意しないといけないからです。EABI, OABI の問題は、これらのコマンドでは起きないようです。


の「理由は必要なライブラリも用意しないといけないからです」という箇所。そうか、コマンドにはライブラリという付属品が必要なのか。

ライブラリという観点で様々なサイトを調べている内に、開発人生さんの「玄箱プロにDebian」にたどり着く。読むと

現行のDebianとはちがってEABIでビルドされています(というかそのほうが普通でしょう)。だったら依存してるライブラリをコピーしてLD_LIBRARY_PATHを指定すれば動きそうです。


との一文が。「LD_LIBRARY_PATHを指定」とは、コマンドにライブラリの場所を教える、という意味だとわかり、だんだん何をするべきかが見えてきた。

エレキジャックさんと開発人生さんお二方のmiconapl導入方法をじっくりと見比べると、

必要なライブラリとPATH
ld-2.3.6.so(/usr/local/kurobox/lib)
libc.so.6(/usr/local/kurobox/lib)
libc-2.3.6.so(/usr/local/kurobox/lib)
libgcc_s.so.1(/usr/local/kurobox/lib)
libbuffalo_bin.so(/usr/local/kurobox/lib)
ld-linux.so.3(/lib)


ということがわかりました。となると、エレキジャックさんの

cd /home/mtd2/lib
 ....
ln -s /usr/local/kurobox/lib/ld-linux.so.3
cp /home/mtd2/usr/local/lib/lib* /usr/local/kurobox/lib/


が理解できないことになります。
最後のlib*は、開発人生さんによると「libbuffalo_bin.so」と特定されていますので、これで試してみます。
---------------------------------------------------------
sushi-kさんの「KURO-BOX/PRO Debian化決定版?」を終え、エレキジャックさんの「オリジナルファイルのバックアップ」を終えているとした上で以下を実行。(エレキジャックさんの「nvram, miconapl を使えるようにする」をベースにしています)

kurobox:~# mkdir /usr/local/kurobox
kurobox:~# mkdir /usr/local/kurobox/bin
kurobox:~# mkdir /usr/local/kurobox/lib
kurobox:~# cp -p /home/mtd2/lib/ld-2.3.6.so /usr/local/kurobox/lib
kurobox:~# ln -s /usr/local/kurobox/lib/ld-2.3.6.so /lib/ld-linux.so.3
kurobox:~# cd /home/mtd2/lib
kurobox:/home/mtd2/lib# cp -p libc-2.3.6.so libgcc_s.so.1 /usr/local/kurobox/lib/
kurobox:/home/mtd2/lib# ln -s libc-2.3.6.so /usr/local/kurobox/lib/libc.so.6
kurobox:/home/mtd2/lib# cp -a /home/mtd2/usr/local/lib/libbuffalo_bin.so /usr/local/kurobox/lib/
kurobox:/home/mtd2/lib# cd /home/mtd2/usr/local/sbin
kurobox:/home/mtd2/usr/local/sbin# cp -p nvram miconapl /usr/local/kurobox/bin/
*太字の箇所はエレキジャックさんのオリジナルから変更点がある箇所です*
「ln -s /usr/local/kurobox/lib/ld-linux.so.3」は意味がわからなかったので削除しました。


ここまでで、開発人生さんと同じように、LD_LIBRARY_PATH付きでコマンドを実行してみました。

kurobox:~# LD_LIBRARY_PATH=/usr/local/kurobox/lib /usr/local/kurobox/bin/miconapl -b -a temp_get
#[miconapl.temp_get]
temp=36


動きました。
てか

cd /usr/local/kurobox/bin
LD_LIBRARY_PATH=/usr/local/lurobox/lib ./miconapl -b -a temp_get

の方がスッキリしてますね・・。

まだ作業の途中ですが、ひとまずmiconapl、nvramはDebian玄箱に導入できました。
この段階の難点は、いちいちライブラリのPATHとコマンドのPATHを入力しなければならない点です。
これを解決してくれるのがエレキジャックさんの「ファンの制御と電源スイッチ」です。

ということで、次回はファンコントロールと電源ボタンの制御です。
別窓 | Debianで遊ぶ | コメント:0 | トラックバック:1
∧top | under∨

sushi-kさんのDebian化をtelnetでやってみよう(2)

本体の電源が落ちない件ですが・・。

Ellinikonblue.com Pukiwikiさんに

またインストール直後ではシャットダウンコマンドで電源が落ちませんので、/etc/default/haltを以下のように修正します。

HALT=halt


とありまして、無事完了です。

nvramとmiconaplの件はまったくわかりませんので、ちょっとまだ仕組みは理解できておりません(笑)。
ひとまず「書いてあるとおりにやったらできました」という報告と備忘録まで。
別窓 | memo:Debian化 | コメント:0 | トラックバック:0
∧top | under∨

sushi-kさんのDebian化をtelnetでやってみよう

ちょっと突っ込んでみたくなりましたので、telnetでのDebian化に挑戦してみました。
telnetクライアントは「Tera Term Pro」です。
ずっとシリアルコンソールでの環境でしたから、久しぶりにtelnetでちょっと緊張しました(笑)。

以下、コンソールを交えての記録です。

sushi-kさんの紹介通りに進めると、まずは「BusyboxなtarをGNUなtarと入れ替える」作業ですが、前回やっちゃってますので、私はこれはパス。

2.

OABIなfsckでHDDを初期化すればOABIなカーネルでマウントできることが分ったので、OABIなmkfs.ext3を含むDebian化キットを作成しました(無保証)。

# wget http://w3.quake3.jp/sushi-k/pool/kuropro/debian/debian_kit.tar.gz [Enter]

# tar xvzpf debian_kit.tar.gz -C / [Enter]


ここから行きます。
wgetは使用せず、Windowsでダウンロードしたものを、ネットワーク上のmtd deviceに転送しました。
そして

~ # cd /mnt/mtd
/mnt/mtd # ls -l


と確認。

-rwxrw-rw- 1 nobody nogroup 0 Feb 8 17:07 ChangeMeDevHDD
-rwxrw-rw- 1 nobody nogroup 0 Feb 8 18:01 ChangeMyUbootEnv
-rwxrw-rw- 1 nobody nogroup 1154759 Jul 16 2007 debian_kit.tar.gz
-rwxrw-rw- 1 nobody nogroup 50483200 Jul 16 2007 hddrootfs.tar.gz
-rwxrw-rw- 1 nobody nogroup 1717540 Jul 16 2007 uImage.buffalo


このように指定のものはすべて揃いました。
次は「debian_kit.tar.gz」を展開します。

/mnt/mtd # tar xvzpf debian_kit.tar.gz -C /
bin/tar
sbin/mkfs.ext3
sbin/mkfs.ext3.Orig
usr/local/bin/InitDisk1.sh
usr/local/sbin/SetupDevEnv.sh
usr/oabi/
usr/oabi/libuuid.so.1.2
usr/oabi/libblkid.so.1
usr/oabi/libext2fs.so.2.4
usr/oabi/libcom_err.so.2
usr/oabi/libgcc_s.so.1
usr/oabi/ld-2.3.6.so
usr/oabi/libdevmapper.so.1.02
usr/oabi/libselinux.so.1
usr/oabi/libcom_err.so.2.1
usr/oabi/libuuid.so.1
usr/oabi/libpthread-0.1
usr/oabi/libdl-2.3.6.so
usr/oabi/libblkid.so.1.0
usr/oabi/libpthread.so.0
usr/oabi/libpthread-0.10.so
usr/oabi/libe2p.so.2
usr/oabi/mkfs.ext3
usr/oabi/libext2fs.so.2
usr/oabi/libe2p.so.2.3
usr/oabi/libsepol.so.1
usr/oabi/libc-2.3.6.so
usr/oabi/ld-linux.so.2
usr/oabi/libdl.so.2
usr/oabi/libc.so.6


展開が済んで、いよいよ背面のresetスイッチを長押し。
ピっという音のあと、オレンジ色のLEDが点滅を始めます。
コンソールには何も変化なし。

私は80GBのHDDで試していますが、時間にして約10分弱。
オレンジの点滅が消えたのを確認し、

/mnt/mtd # reboot


と入力。
玄箱は再起動処理を始めます。
コンソールは一旦閉じ、玄箱が起動した頃を見計らって今度はsshでログイン。

初期状態では192.168.1.81/255.255.255.0になっているので、SSHクライアントで192.168.1.81にアクセスして設定屋なんかを換えてください。


とsushi-kさんも書かれていますので注意が必要です。

ユーザー名:root
パスワード:kuroadmin


で接続すると、

Last login: Fri Mar 9 16:42:48 2007 from localhost.localdomain
Linux kurobox 2.6.12.6-mda1 #2 Sun Apr 22 16:16:39 JST 2007 armv5tejl

The programs included with the Debian GNU/Linux system are free software;
the exact distribution terms for each program are described in the
individual files in /usr/share/doc/*/copyright.

Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent
permitted by applicable law.
kurobox:~#


と出ました。
Debian化には成功しているようです。

さて、しかしこのままでは電源ボタンもファンコントロールも効きません。
とりあえずてっとり早く何とかしたいので、エレキジャックさんの記事を試してみます。

kurobox:~# mount -t jffs2 /dev/mtd2 /mtd
mount: mount point /mtd does not exist
kurobox:~# mkdir /mtd
kurobox:~# mount -t jffs2 /dev/mtd2 /mtd
kurobox:~# cd /mtd
kurobox:/mtd# tar czvf /home/mtd2-bkup.tar.gz *
bin/
bin/dd
bin/cp
bin/df
bin/ip
bin/ln
bin/ls
bin/mt
bin/mv
bin/ps
 ・
 ・
(中略)
 ・
 ・
www/img/kuro.gif
www/index.html
kurobox:/mtd# cd /
kurobox:/# umount /mtd
kurobox:/# cd /home
kurobox:/home# mkdir mtd2
kurobox:/home# cd mtd2
kurobox:/home/mtd2# tar xzf ../mtd2-bkup.tar.gz
kurobox:/home/mtd2# mkdir /usr/local/kurobox
kurobox:/home/mtd2# mkdir /usr/local/kurobox/bin
kurobox:/home/mtd2# mkdir /usr/local/kurobox/lib
kurobox:/home/mtd2# cp -p /home/mtd2/lib/ld-2.3.6.so /usr/local/kurobox/lib
kurobox:/home/mtd2# ln -s /usr/local/kurobox/lib/ld-2.3.6.so /lib/ld-linux.so.3
kurobox:/home/mtd2# cd /home/mtd2/lib
kurobox:/home/mtd2/lib# cp -p ld-2.3.6.so libc-2.3.6.so \ _ _ \ \ \ libgcc_s.so.1 /usr/local/kurobox/l ib/
kurobox:/home/mtd2/lib# ln -s libc-2.3.6.so /usr/local/kurobox/lib/libc.so.6
kurobox:/home/mtd2/lib# ln -s /usr/local/kurobox/lib/ld-linux.so.3
ln: creating symbolic link `./ld-linux.so.3' to `/usr/local/kurobox/lib/ld-linux.so.3': File exists
kurobox:/home/mtd2/lib# cp /home/mtd2/usr/local/lib/lib* /usr/local/kurobox/lib/
kurobox:/home/mtd2/lib# cd /home/mtd2/usr/local/sbin
kurobox:/home/mtd2/usr/local/sbin# cp -p nvram miconapl /usr/local/kurobox/bin/


ここまで来てはたと「あ、sambaが入ってないんだ」と気づき、sambaを慌てて導入。

kurobox:~# apt-get update
kurobox:~# apt-get install samba


そしてsambaの設定。
使用者の作成と細かいあれこれ。

kurobox:~# nano /etc/samba/smb.conf


[homes]
comment = Home Directories
browseable = no
# By default, the home directories are exported read-only. Change next
# parameter to 'yes' if you want to be able to write to them.
writable = yes



kurobox:~# smbpasswd -a kurobox
New SMB password:(パスワード入力)
Retype new SMB password:(再度パスワード入力)
kurobox:~# /etc/init.d/samba restart


そしてmiconapl-nvram.tar.gzをsambaの共有スペース(/home/kurobox)にWindowsから転送し、

kurobox:/usr/local/sbin# tar xzf /home/kurobox/miconapl-nvram.tar.gz


さて、一応これで完了・・・のハズです。
エラー(というほどのものじゃないですけど)も一箇所出てましたから不安でいっぱいですが(笑)。

まずは確認の

kurobox:/usr/local/sbin# nvram -c printenv


すると

1: [baudrate=115200]
2: [loads_echo=0]
3: [rootpath=/nfs/arm]
4: [cpuName=926]
5: [CASset=min]
6: [MALLOC_len=4]
7: [bootargs_end=:::DB88FXX81:eth0:none]
8: [ethact=egiga0]
9: [ethaddr=00:16:01:A4:D5:55]
10: [buffalo_ver=BOOTVER=1.091]
11: [build_time=18:10:02]
12: [nand_uImage_offset=20000]
13: [def_tftp=tftp $(default_kernel_addr) $(kernel); tftp $(default_initrd_addr) $(initrd); setenv bootargs $(bootargs_base) $(bootargs_root) rw initrd=0x02000040,20M panic=5 $(buffalo_ver); bootm $(default_kernel_addr) $(default_initrd_addr)]
14: [kernel=uImage.buffalo]
15: [initrd=initrd.buffalo]
16: [filesize=1a7fa4]
17: [fileaddr=0]
18: [ipaddr=192.168.1.9]
19: [serverip=192.168.1.25]
20: [default_initrd_addr=0x02000000]
21: [uImage_block=0]
22: [uImage_offset=0x00020000]
23: [stdin=serial]
24: [stdout=serial]
25: [stderr=serial]
26: [enaMonExt=no]
27: [enaFlashBuf=yes]
28: [enaCpuStream=no]
29: [ethprime=egiga0]
30: [bootdelay=3]
31: [disaMvPnp=no]
32: [overEthAddr=no]
33: [usb0Mode=host]
34: [usb1Mode=host]
35: [default_kernel_addr=0x00100000]
36: [bootargs_base=console=ttyS0,115200]
37: [bootargs_root=root=/dev/sda2 rw panic=5]
38: [bootargs=console=ttyS0,115200 root=/dev/sda2 rw panic=5 BOOTVER=1.09]
39: [bootcmd=ide reset; ext2load ide 0:1 $(default_kernel_addr) /$(kernel); bootm $(default_kernel_addr)]
40: [nand_boot=no]


おぉ、出た出た(笑)。
お次は

kurobox:/usr/local/sbin# miconapl -b -a bz_on button


これも鳴った!

kurobox:/usr/local/sbin# miconapl -b -a temp_get


と入力すれば

#[miconapl.temp_get]
temp=37


いいですね。順調です。
どうやら問題ないみたいです。
残る手順をやっつけてしまいましょう。

kurobox:/usr/local/sbin# cd /tmp
kurobox:/tmp# tar xzvf /home/kurobox/daemon.tar.gz
Fand
Keventd
fan.prof
rc.local
kurobox:/tmp# cp Fand Keventd /usr/local/sbin/
kurobox:/tmp# cp fan.prof /usr/local/etc/
kurobox:/tmp# cp rc.local /etc/


これで電源ボタンとファンの制御の設定終了です。
では電源ボタンを3秒ほど押してみましょう。

Broadcast message from root@kurobox (Mon Jul 16 01:15:50 2007):

The system is going down for system halt NOW!


ピっと音がなってこの表示。
よっしゃ、ひとまず完成です。


・・・・・・・あれ?(笑)

コンソールは勝手に閉じられたのですが・・本体の電源が待てど暮らせど落ちません(笑)。

次回はそこを考察してみます。
別窓 | memo:Debian化 | コメント:1 | トラックバック:0
∧top | under∨

起動手順の研究(1)

せっかくシリアルコンソールで起動画面を眺めることができるんだから、勉強がてら解読してみます。

いやいや、意味なんてありません(笑)。
しかももう誰かやってそうだから、そのサイト探す方が手っ取り早いんですけどね・・。

備忘録と研究を兼ねています。
長い道のりになりそうなので、この時点で「(1)」を付けておきます(笑)。

今の私なりに理解した(つもりの)内容です。


玄箱Proの起動プロセスには大きく分けて7つのパートがあります。

##パート1(U-bootの起動とブートイメージの認識)
U-bootを起動して、カーネルイメージを見つけるまで。自分に接続されたあらゆる周辺機器を簡易に認識して表示しFound boot imageまでです。

Orion1 CPU = Low

=== KURO U-Boot. ===
** LOADER **
** KUROBOX BOARD: KURO_BOX LE (CFG_ENV_ADDR=fffff000)


U-Boot 1.1.1 (Apr 10 2007 - 18:10:08) Marvell version: 1.12.1 - TINY

DRAM CS[0] base 0x00000000 size 128MB
DRAM Total size 128MB←DDR2メモリの認識
[256kB@fffc0000] Flash: 256 kB←NORメモリの認識
Addresses 20M - 0M are saved for the U-Boot usage.
Mem malloc Initialization (20M - 16M): Done
NAND: 256 MB←NANDメモリの認識

Soc: 88F5182 A2←SoC名の表示
CPU: ARM926 (Rev 0) running @ 500Mhz←CPU名の表示
Orion 1 streaming disabled
SysClock = 250Mhz , TClock = 166Mhz


USB 0: host mode
USB 1: host mode
PCI 0: PCI Express Root Complex Interface
PCI 1: Conventional PCI, speed = 33000000
Net: egiga0 [PRIME]
Using 88E1118 phy
Found boot image←これが大事
hit any key to switch tftp boot.
Hit any key to stop autoboot: 0
<<system_bootend>>
Hit any key to stop autoboot: 0



##パート2(カーネルをメモリ上に読み込む)
発見したカーネルイメージの情報を表示しメモリ上に読み込みます。

Loading from device 0: at 0xfa000000 (offset 0x20000)
Image Name: Linux-2.6.12.6-arm1
Created: 2007-04-10 13:45:13 UTC
Image Type: ARM Linux Kernel Image (uncompressed)
Data Size: 1736548 Bytes = 1.7 MB
Load Address: 00008000
Entry Point: 00008000
<<stop_sound>>
## Booting image at 00100000 ...
Image Name: Linux-2.6.12.6-arm1
Created: 2007-04-10 13:45:13 UTC
Image Type: ARM Linux Kernel Image (uncompressed)
Data Size: 1736548 Bytes = 1.7 MB
Load Address: 00008000
Entry Point: 00008000
Verifying Checksum ... OK
OK



##パート3(カーネルを起動)
メモリ上に読み込んだカーネルを各種パラメータにしたがって起動します。

Starting kernel ...

arg:console=ttyS0,115200 root=/dev/mtdblock2 rw BOOTVER=1.091
CONFIG_KUROBOX_PLATFORM CONFIG_KUROBOX_KUROBOX ---
Uncompressing Linux................................................................................................................. done, booting the kernel.
Linux version 2.6.12.6-arm1 (root@dev-hara) (gcc version 3.4.4 (release) (CodeSourcery ARM 2005q3-2)) #27 Tue Apr 10 22:47:16 JST 2007



##パート4(メモリやCPUなど基本的なハードウェアのチェックと初期化)
カーネルに格納されたドライバの適用。initrd相当の働きをここでカーネルがしている。
内容はまだよくわかりません(笑)。ゆっくり解読します・・。

CPU: ARM926EJ-Sid(wb) [41069260] revision 0 (ARMv5TEJ)
CPU0: D VIVT write-back cache
CPU0: I cache: 32768 bytes, associativity 1, 32 byte lines, 1024 sets
CPU0: D cache: 32768 bytes, associativity 1, 32 byte lines, 1024 sets
Machine: MV-88fxx81
Using UBoot passing parameters structure
Sys Clk = 250000000, Tclk = 166664740
Memory policy: ECC disabled, Data cache writeback
Built 1 zonelists
Kernel command line: console=ttyS0,115200 root=/dev/mtdblock2 rw BOOTVER=1.091
PID hash table entries: 1024 (order: 10, 16384 bytes)
Console: colour dummy device 80x30
Dentry cache hash table entries: 32768 (order: 5, 131072 bytes)
Inode-cache hash table entries: 16384 (order: 4, 65536 bytes)
Memory: 128MB 0MB 0MB 0MB = 128MB total
Memory: 126208KB available (3037K code, 426K data, 112K init)
Mount-cache hash table entries: 512
CPU: Testing write buffer coherency: ok
NET: Registered protocol family 16
serial_initialize_ttyS1 (Debug): ttyS1 is initialized.
config_device_cs Error : Unknown board

CPU Interface
-------------
SDRAM_CS0 ....base 00000000, size 128MB
SDRAM_CS1 ....disable
SDRAM_CS2 ....disable
SDRAM_CS3 ....disable
PEX0_MEM ....base e0000000, size 128MB
PEX0_IO ....base f2000000, size 1MB
PCI0_MEM ....base e8000000, size 128MB
PCI0_IO ....base f2100000, size 1MB
INTER_REGS ....base f1000000, size 1MB
DEVICE_CS0 ....base fa000000, size 2MB
DEVICE_CS1 ....base f4000000, size 32MB
DEVICE_CS2 ....base fa800000, size 1MB
DEV_BOOCS ....base ff800000, size 8MB
CRYPTO ENG ....no such
Flash bankwidth 1, base ff800000, size 400000
KUROBOX FLASH size 4096[KB]

Marvell Development Board (LSP Version 1.10.3.patch5_DB_NAS)-- KUROBOX_BOARD_KUROBOX Soc: 88F5182 A2

Detected Tclk 166664740 and SysClk 250000000
Marvell USB EHCI Host controller #0: c04e4b00
Marvell USB EHCI Host controller #1: c04e4a40
pexBarOverlapDetect: winNum 2 overlap current 0
mvPexInit:Warning :Bar 2 size is illigal
it will be disabled
please check Pex and CPU windows configuration
PCI: bus0: Fast back to back transfers enabled
PCI: bus1: Fast back to back transfers enabled
SCSI subsystem initialized
usbcore: registered new driver usbfs
usbcore: registered new driver hub
Use the XOR engines (offloading) for enhancing the following functions:
o RAID 5 Xor calculation
o kernel memcpy
o kenrel memzero
o copy user to/from kernel buffers
Number of XOR engines to use: 2
cesadev_init(c00122e4)
Fast Floating Point Emulator V0.9 (c) Peter Teichmann.
inotify device minor=63
JFFS2 version 2.2. (NAND) (C) 2001-2003 Red Hat, Inc.←jffsモジュールの読み込み?
SGI XFS with no debug enabled←xfsモジュールの読み込み?
Serial: 8250/16550 driver $Revision: 1.90 $ 4 ports, IRQ sharing disabled←シリアルの初期化?
ttyS0 at MMIO 0x0 (irq = 3) is a 16550A
ttyS1 at MMIO 0x0 (irq = 4) is a 16550A
io scheduler noop registered
io scheduler anticipatory registered
io scheduler deadline registered
io scheduler cfq registered
RAMDISK driver initialized: 3 RAM disks of 32768K size 1024 blocksize
loop: loaded (max 8 devices)
Marvell Gigabit Ethernet Driver 'egiga':←ethernetの初期化?
o Ethernet descriptors in DRAM
o DRAM SW cache-coherency
o Checksum offload enabled
o Loading network interface ** egiga_init_module (10)
'eth0'
Intergrated Sata device found←HDD環境の初期化?
scsi0 : Marvell SCSI to SATA adapter
scsi1 : Marvell SCSI to SATA adapter
Vendor: Seagate Model: ST380815AS Rev: 3.AA
Type: Direct-Access ANSI SCSI revision: 03
SCSI device sda: 156301488 512-byte hdwr sectors (80026 MB)
SCSI device sda: drive cache: write back
SCSI device sda: 156301488 512-byte hdwr sectors (80026 MB)
SCSI device sda: drive cache: write back
sda:
Attached scsi disk sda at scsi0, channel 0, id 0, lun 0
Attached scsi generic sg0 at scsi0, channel 0, id 0, lun 0, type 0
physmap flash device: 400000 at ff800000←NORメモリ
Found: SST 39LF020
phys_mapped_flash: Found 1 x8 devices at 0x0 in 8-bit bank←mtd0(NORメモリ)
number of JEDEC chips: 1
cfi_cmdset_0002: Disabling erase-suspend-program due to code brokenness.
RedBoot partition parsing not available
Debug nand_scan : nand_flash_ids[i].pagesize is exist←NANDメモリ
Debug nand_scan : mtd->erasesize=0x00020000
Debug nand_scan : mtd->oobblock=0x00000800
Debug nand_scan : mtd->oobsize=0x00000040
NAND device: Manufacturer ID: 0x20, Chip ID: 0xda (ST Micro NAND 256MiB 3,3V 8-bit)
Scanning device for bad blocks
Using static partition definition
Creating 3 MTD partitions on "nand_mtd":
0x00000000-0x00400000 : "uImage"←mtd1
0x00400000-0x04400000 : "rootfs"←mtd2
0x04400000-0x10000000 : "extra"←mtd3
usbmon: debugs is not available←USB2.0
ehci_platform ehci_platform.4523: EHCI Host Controller
ehci_platform ehci_platform.4523: new USB bus registered, assigned bus number 1
ehci_platform ehci_platform.4523: irq 17, io mem 0x00000000
ehci_platform ehci_platform.4523: park 0
ehci_platform ehci_platform.4523: USB 0.0 initialized, EHCI 1.00, driver 10 Dec 2004
hub 1-0:1.0: USB hub found
hub 1-0:1.0: 1 port detected
ehci_platform ehci_platform.16781: EHCI Host Controller
ehci_platform ehci_platform.16781: new USB bus registered, assigned bus number 2
ehci_platform ehci_platform.16781: irq 12, io mem 0x00000000
ehci_platform ehci_platform.16781: park 0
ehci_platform ehci_platform.16781: USB 0.0 initialized, EHCI 1.00, driver 10 Dec 2004
hub 2-0:1.0: USB hub found
hub 2-0:1.0: 1 port detected
USB Universal Host Controller Interface driver v2.2
Initializing USB Mass Storage driver...
usbcore: registered new driver usb-storage
USB Mass Storage support registered.
usbcore: registered new driver usbhid
drivers/usb/input/hid-core.c: v2.01:USB HID core driver
mice: PS/2 mouse device common for all mice
md: raid0 personality registered as nr 2
md: raid1 personality registered as nr 3
md: raid5 personality registered as nr 4
raid5: measuring checksumming speed
arm4regs : 304.000 MB/sec
8regs : 215.200 MB/sec
32regs : 249.200 MB/sec
raid5: using function: arm4regs (304.000 MB/sec)
md: md driver 0.90.1 MAX_MD_DEVS=256, MD_SB_DISKS=27
Buffalo Platform Linux Driver(Light) 0.01 installed.
MICON ctrl (C) BUFFALO INC. V.1.00 installed.
Kernel event proc (C) BUFFALO INC. V.1.00 installed.
MICON V2 (C) BUFFALO INC. V.1.00 installed.
NET: Registered protocol family 2
IP: routing cache hash table of 1024 buckets, 8Kbytes
TCP established hash table entries: 8192 (order: 4, 65536 bytes)
TCP bind hash table entries: 8192 (order: 3, 32768 bytes)
TCP: Hash tables configured (established 8192 bind 8192)
NET: Registered protocol family 1
NET: Registered protocol family 17
md: Autodetecting RAID arrays.
md: autorun ...
md: ... autorun DONE.
Empty flash at 0x00df85f8 ends at 0x00df8800



##パート5(ルート・ファイル・システムのマウント)
bootargs_rootに指定した場所のルート・ファイル・システムを/にマウントします。

VFS: Mounted root (jffs2 filesystem).



##パート6(initの各種実行)
マウントしたルート・ファイル・システムの/etc/inittabにしたがってrcスクリプトを実行し初期化をします。

Freeing init memory: 112K
--- rcStart (NANDroot) ---←NANDメモリにルートを置いてrcスクリプト開始
===== Starting MountSystemFolders =====
mounting procfs ... [Success]
mounting sysfs ... [Success]
mouting usbfs ... [Success]
remouting rootfs ... [Success]
mounting all devices ... [Success]


===== Starting checkroot.sh =====
rm: /var/lock/perfmon: is a directory
rm: /var/lock/printing: is a directory
rm: /var/lock/subsys: is a directory
[Success]


===== Starting Kevent.sh =====
[Success]


===== Starting mount_share.sh =====
Mounting /dev/sda on /mnt/disk1 as a xfs file system.
XFS: bad magic number
XFS: SB validate failed
mount: Mounting /dev/sda on /mnt/disk1 failed: Invalid argument
Failed.
Mounting /dev/sda on /mnt/disk1 as a ext3 file system.
mount: Mounting /dev/sda on /mnt/disk1 failed: Invalid argument
Failed.
Mounting /dev/mtd3 on /mnt/mtd as a jffs2 file system.
Success.

[Success]


===== Starting sethostname.sh =====
hostname is setted to KUROBOX-PRO
[Success]


===== Starting networking.sh =====
create network files..
IP=[dhcp], netmask=[], dgw=[], dns1=[], dns2=[]
killall: dhcpcd: no process killed
route: SIOC[ADD|DEL]RT: No such process
Configuration network interface: lo eth0
requesting DHCP tout=30[s]
eth0: link down
eth0: link up<5>, full duplex<5>, speed 100 Mbps<5>
/etc/dhcpc/dhcpcd.exe ::: /etc/dhcpc/dhcpcd-eth0.info up
dhcpcd.exe: interface eth0 has been configured with old IP=192.168.1.9
hostname is setted to KUROBOX-PRO
[Success]


===== Starting httpd.sh =====
[Success]


===== Starting telnet.sh =====
[Success]


===== Starting inetd.sh =====
[Success]


===== Starting smb.sh =====
$Starting SMB services:
$Starting NMB services:
[Success]


===== Starting clientUtil_servd.sh =====
Starting clientUtil_server:starting on eth0
[Success]


===== Starting bootcomplete.sh =====
[Success]


===== Starting FanController.sh =====
[Success]


===== Starting boss.sh =====
(サングラス男のAA省略)
[Success]



##パート7(ログイン)
最後にログインを促して玄箱Proの起動処理は無事終了です。

KUROUTOSHIKOU KUROBOX Series KUROBOX/PRO(KOSHO)
KUROBOX-PRO login:

いやほんと、だからどうしたの世界なんですが(笑)。
Linux一般の起動を学ぶのに玄箱Proのそれを参考にしてはいけないのかもしれませんが、なんとなくLinuxが起動するまでの大きな流れがイメージできました。

次回はそれぞれの詳細を追跡してみます。
別窓 | memo:起動処理 | コメント:0 | トラックバック:0
∧top | under∨

sushi-kさんのDebian化を試す

玄箱くんで特にすることも見つからないので、とりあえず3度目のDebian化です(笑)。
毎回同じエレキジャックさんのブログでのDebian化も芸がないので、今回は有名なsushi-kさんのブログでのDebian化に挑戦です。
まぁ挑戦もなにも誰でもできる話ですが・・(汗)。

私は勉強のために「日経Linux」を始めとする各種の雑誌を定期購読しています。
Linux系の雑誌を読んでいると、自然にsushi-kさんが誰なのかわかっちゃいます(笑)。
別にご本人も伏せているわけではないようですけど。
個人的に特に好きなライターさんです。

話をもとに戻しまして・・・。

KURO-BOX/PRO Debian化決定版?」の通りに進めます。
ちなみに私はシリアルコンソールを利用しています。

1.

とにかくBusyboxなtarが駄目駄目なので、GNU tarに入れ替えます(以降、wgetを使用しますが、wgetを使用せずにWindowsでダウンロードしてWindowsからKURO-BOX/PROに転送してももちろんOKです)。

# wget http://w3.quake3.jp/sushi-k/pool/kuropro/debian/gnutar_kuropro.gz [Enter]

# gzip -dc gnutar_kuropro.gz >/bin/tar [Enter]

# chmod a+x /bin/tar [Enter]

これでOK


とのことなので、その通りに。

~ # wget http://w3.quake3.jp/sushi-k/pool/kuropro/debian/gnutar_kuropro.gz
wget: w3.quake3.jp: Unknown host


いきなりです。
まぁsushi-kさんも「Windowsから~」と書かれていますので、これに従い、gnutar_kuropro.gzをWindowsでダウンロードして、ネットワーク上の「mtd device」にコピー。これはマウスでスイーっと簡単。

(2007.8.1追記)
追記を忘れていました。これは玄箱PROが「インターネットに繋がるという状況を想定されていない」という不思議な設定のためです。
具体的には、/etc/netinfoを

my_ipaddress=ここに玄箱PROの静的IPアドレス
my_subnetmask=255.255.255.0
my_dgw=ここにルータのIPアドレス

と編集。ただしルータ側でスタティック(静的)にIPを払い出す設定をしているならmy_ipaddressのデフォルトの「dhcp」のままでも構わない。
次に/etc/resolv.confを

nameserver ここにルータのIPアドレス

と編集。ここは「=」がいらない。
もうひとつ、/etc/nsswitch.conf。これが一番大事なのかな。

hosts: files dns

と、後ろに「dns」を追加。これで/etc/resolv.confで設定したネームサーバ(今の場合はルータです)を参照しますので、外部への接続が可能になりwgetも使えます。


さぁ、次だ、次。

~ # gzip -dc gnutar_kuropro.gz >/bin/tar
-sh: cannot create /bin/tar: Text file busy


・・なんなんだよ、Text file busyって。
と、しばらく考えてたんですが・・Windowsで「使用中」のことを「busy」って言いますから、これは「そりゃ使用中だよ!」と怒られてるんだろうな、と。
でも、この入力文のそもそもの目的は「tarをbusyboxのものからGNUのものに入れ替える」ということですから・・・消しましょう!(笑)
どうせGNUなtarをこれから入れるわけなんですから・・いいでしょ。最悪また工場出荷状態に戻せば済む話です。
・・・たぶん(笑)。

~ # rm /bin/tar
~ # cd /mnt/mtd
/mnt/mtd # gzip -dc gnutar_kuropro.gz >/bin/tar
/mnt/mtd # chmod a+x /bin/tar


簡単ですね。sushi-kさんの細かい指示が助かります。
では次。

2.

OABIなfsckでHDDを初期化すればOABIなカーネルでマウントできることが分ったので、OABIなmkfs.ext3を含むDebian化キットを作成しました(無保証)。

# wget http://w3.quake3.jp/sushi-k/pool/kuropro/debian/debian_kit.tar.gz [Enter]

# tar xvzpf debian_kit.tar.gz -C / [Enter]


同じようにWindowsでダウンロードしてmtd deviceにコピーして

/mnt/mtd # tar xvzpf debian_kit.tar.gz -C /
bin/tar
sbin/mkfs.ext3
sbin/mkfs.ext3.Orig
usr/local/bin/InitDisk1.sh
usr/local/sbin/SetupDevEnv.sh
usr/oabi/
usr/oabi/libuuid.so.1.2
usr/oabi/libblkid.so.1
usr/oabi/libext2fs.so.2.4
usr/oabi/libcom_err.so.2
usr/oabi/libgcc_s.so.1
usr/oabi/ld-2.3.6.so
usr/oabi/libdevmapper.so.1.02
usr/oabi/libselinux.so.1
usr/oabi/libcom_err.so.2.1
usr/oabi/libuuid.so.1
usr/oabi/libpthread-0.1
usr/oabi/libdl-2.3.6.so
usr/oabi/libblkid.so.1.0
usr/oabi/libpthread.so.0
usr/oabi/libpthread-0.10.so
usr/oabi/libe2p.so.2
usr/oabi/mkfs.ext3
usr/oabi/libext2fs.so.2
usr/oabi/libe2p.so.2.3
usr/oabi/libsepol.so.1
usr/oabi/libc-2.3.6.so
usr/oabi/ld-linux.so.2
usr/oabi/libdl.so.2
usr/oabi/libc.so.6
/mnt/mtd #


あー、いいですねぇ。順調です。
何が出てるのかはさっぱりわかりませんが(笑)。

3.

OABIなカーネルイメージuImage.buffaloとDebianのミニルートhddrootfs.tar.gz、そしてChangeMeDevHDD、ChangeMyUbootEnv(この2つは付属CD-ROMので可)をここらあたりからダウンロードしてWindowsからKURO-BOX/PROのmtd deviceに転送します。

そして、おもむろにRESETボタン長押し。ピッという音とともにINFOランプが点滅して、10分くらいしたら終わるので(HDDの容量によって時間は違います)再起動。これでOABIなカーネル+OABIなDebian etchにKURO-BOX/PROが切り替わります。カーネルおよびユーザーランドがOABIで統一されているので安心して運用できます。


その通りにやってみました。
resetボタンを長押しすると

~ # SCSI device sda: 156301488 512-byte hdwr sectors (80026 MB)
SCSI device sda: drive cache: write back
sda: sda1 sda2 sda3 sda4
SCSI device sda: 156301488 512-byte hdwr sectors (80026 MB)
SCSI device sda: drive cache: write back
sda: sda1 sda2 sda3 sda4
kjournald starting. Commit interval 5 seconds
EXT3 FS on sda1, internal journal
EXT3-fs: mounted filesystem with ordered data mode.
kjournald starting. Commit interval 5 seconds
EXT3 FS on sda2, internal journal
EXT3-fs: mounted filesystem with ordered data mode.


でオレンジのピコピコが止まりました。画面には入力を促すプロンプトは出ません。
エンターキーを押すと

~ #


と出ます。
そこで

~ # reboot


さて、一応Debian化は出来ているはずです。
以下、起動のコンソール画面。

Orion1 CPU = Low

=== KURO U-Boot. ===
** LOADER **
** KUROBOX BOARD: KURO_BOX LE (CFG_ENV_ADDR=fffff000)


U-Boot 1.1.1 (Apr 10 2007 - 18:10:08) Marvell version: 1.12.1 - TINY

DRAM CS[0] base 0x00000000 size 128MB
DRAM Total size 128MB
[256kB@fffc0000] Flash: 256 kB
Addresses 20M - 0M are saved for the U-Boot usage.
Mem malloc Initialization (20M - 16M): Done
NAND: 256 MB

Soc: 88F5182 A2
CPU: ARM926 (Rev 0) running @ 500Mhz
Orion 1 streaming disabled
SysClock = 250Mhz , TClock = 166Mhz


USB 0: host mode
USB 1: host mode
PCI 0: PCI Express Root Complex Interface
PCI 1: Conventional PCI, speed = 33000000
Net: egiga0 [PRIME]
Using 88E1118 phy
hit any key to switch tftp boot.
Hit any key to stop autoboot: 0
<<system_bootend>>
Hit any key to stop autoboot: 0

Reset IDE:
Marvell Serial ATA Adapter
Integrated Sata device found
Device 0: OK
Model: ST380815AS Firm: 3.AAC Ser#: 9QZ15T5J
Type: Hard Disk
Supports 48-bit addressing
Capacity: 76319.0 MB = 74.5 GB (156301488 x 512)

Using device ide0, partition 1

Loading from block device ide device 0, partition 1: Name: hda1
Type: U-Boot File:/uImage.buffalo

1717540 bytes read
<<stop_sound>>
## Booting image at 00100000 ...
Image Name: Linux-2.6.12.6-mda1
Created: 2007-04-22 7:17:43 UTC
Image Type: ARM Linux Kernel Image (uncompressed)
Data Size: 1717476 Bytes = 1.6 MB
Load Address: 00008000
Entry Point: 00008000
Verifying Checksum ... OK
OK

Starting kernel ...

arg:console=ttyS0,115200 root=/dev/sda2 rw panic=5 BOOTVER=1.09
CONFIG_KUROBOX_PLATFORM CONFIG_KUROBOX_KUROBOX ---
Uncompressing Linux............................................................................................................... done, booting the kernel.
Linux version 2.6.12.6-mda1 (root@kurobox) (gcc version 4.1.2 20061115 (prerelease) (Debian 4.1.1-21)) #2 Sun Apr 22 16:16:39 JST 2007
CPU: ARM926EJ-Sid(wb) [41069260] revision 0 (ARMv5TEJ)
CPU0: D VIVT write-back cache
CPU0: I cache: 32768 bytes, associativity 1, 32 byte lines, 1024 sets
CPU0: D cache: 32768 bytes, associativity 1, 32 byte lines, 1024 sets
Machine: MV-88fxx81
Using UBoot passing parameters structure
Sys Clk = 250000000, Tclk = 166664740
Memory policy: ECC disabled, Data cache writeback
Built 1 zonelists
Kernel command line: console=ttyS0,115200 root=/dev/sda2 rw panic=5 BOOTVER=1.09
PID hash table entries: 1024 (order: 10, 16384 bytes)
Console: colour dummy device 80x30
Dentry cache hash table entries: 32768 (order: 5, 131072 bytes)
Inode-cache hash table entries: 16384 (order: 4, 65536 bytes)
Memory: 128MB 0MB 0MB 0MB = 128MB total
Memory: 126208KB available (2987K code, 421K data, 108K init)
Mount-cache hash table entries: 512
CPU: Testing write buffer coherency: ok
NET: Registered protocol family 16
serial_initialize_ttyS1 (Debug): ttyS1 is initialized.
config_device_cs Error : Unknown board

CPU Interface
-------------
SDRAM_CS0 ....base 00000000, size 128MB
SDRAM_CS1 ....disable
SDRAM_CS2 ....disable
SDRAM_CS3 ....disable
PEX0_MEM ....base e0000000, size 128MB
PEX0_IO ....base f2000000, size 1MB
PCI0_MEM ....base e8000000, size 128MB
PCI0_IO ....base f2100000, size 1MB
INTER_REGS ....base f1000000, size 1MB
DEVICE_CS0 ....base fa000000, size 2MB
DEVICE_CS1 ....base f4000000, size 32MB
DEVICE_CS2 ....base fa800000, size 1MB
DEV_BOOCS ....base ff800000, size 8MB
CRYPTO ENG ....no such
Flash bankwidth 1, base ff800000, size 400000
KUROBOX FLASH size 4096[KB]

Marvell Development Board (LSP Version 1.10.3.patch5_DB_NAS)-- KUROBOX_BOARD_KUROBOX Soc: 88F5182 A2

Detected Tclk 166664740 and SysClk 250000000
Marvell USB EHCI Host controller #0: c04d5b00
Marvell USB EHCI Host controller #1: c04d5a40
pexBarOverlapDetect: winNum 2 overlap current 0
mvPexInit:Warning :Bar 2 size is illigal
it will be disabled
please check Pex and CPU windows configuration
PCI: bus0: Fast back to back transfers enabled
PCI: bus1: Fast back to back transfers enabled
SCSI subsystem initialized
usbcore: registered new driver usbfs
usbcore: registered new driver hub
Use the XOR engines (offloading) for enhancing the following functions:
o RAID 5 Xor calculation
o kernel memcpy
o kenrel memzero
o copy user to/from kernel buffers
Number of XOR engines to use: 2
cesadev_init(c0012240)
Fast Floating Point Emulator V0.9 (c) Peter Teichmann.
inotify device minor=63
JFFS2 version 2.2. (NAND) (C) 2001-2003 Red Hat, Inc.
SGI XFS with no debug enabled
Serial: 8250/16550 driver $Revision: 1.90 $ 4 ports, IRQ sharing disabled
ttyS0 at MMIO 0x0 (irq = 3) is a 16550A
ttyS1 at MMIO 0x0 (irq = 4) is a 16550A
io scheduler noop registered
io scheduler anticipatory registered
io scheduler deadline registered
io scheduler cfq registered
RAMDISK driver initialized: 3 RAM disks of 32768K size 1024 blocksize
loop: loaded (max 8 devices)
Marvell Gigabit Ethernet Driver 'egiga':
o Ethernet descriptors in DRAM
o DRAM SW cache-coherency
o Checksum offload enabled
o Loading network interface ** egiga_init_module (6)
'eth0'
Intergrated Sata device found
scsi0 : Marvell SCSI to SATA adapter
scsi1 : Marvell SCSI to SATA adapter
Vendor: Seagate Model: ST380815AS Rev: 3.AA
Type: Direct-Access ANSI SCSI revision: 03
SCSI device sda: 156301488 512-byte hdwr sectors (80026 MB)
SCSI device sda: drive cache: write back
SCSI device sda: 156301488 512-byte hdwr sectors (80026 MB)
SCSI device sda: drive cache: write back
sda: sda1 sda2 sda3 sda4
Attached scsi disk sda at scsi0, channel 0, id 0, lun 0
Attached scsi generic sg0 at scsi0, channel 0, id 0, lun 0, type 0
physmap flash device: 400000 at ff800000
Found: SST 39LF020
phys_mapped_flash: Found 1 x8 devices at 0x0 in 8-bit bank
number of JEDEC chips: 1
cfi_cmdset_0002: Disabling erase-suspend-program due to code brokenness.
RedBoot partition parsing not available
NAND device: Manufacturer ID: 0x20, Chip ID: 0xda (ST Micro NAND 256MiB 3,3V 8-bit)
Scanning device for bad blocks
Using static partition definition
Creating 3 MTD partitions on "nand_mtd":
0x00000000-0x00400000 : "uImage"
0x00400000-0x04400000 : "rootfs"
0x04400000-0x10000000 : "extra"
usbmon: debugs is not available
ehci_platform ehci_platform.4523: EHCI Host Controller
ehci_platform ehci_platform.4523: new USB bus registered, assigned bus number 1
ehci_platform ehci_platform.4523: irq 17, io mem 0x00000000
ehci_platform ehci_platform.4523: park 0
ehci_platform ehci_platform.4523: USB 0.0 initialized, EHCI 1.00, driver 10 Dec 2004
hub 1-0:1.0: USB hub found
hub 1-0:1.0: 1 port detected
ehci_platform ehci_platform.16781: EHCI Host Controller
ehci_platform ehci_platform.16781: new USB bus registered, assigned bus number 2
ehci_platform ehci_platform.16781: irq 12, io mem 0x00000000
ehci_platform ehci_platform.16781: park 0
ehci_platform ehci_platform.16781: USB 0.0 initialized, EHCI 1.00, driver 10 Dec 2004
hub 2-0:1.0: USB hub found
hub 2-0:1.0: 1 port detected
USB Universal Host Controller Interface driver v2.2
Initializing USB Mass Storage driver...
usbcore: registered new driver usb-storage
USB Mass Storage support registered.
usbcore: registered new driver usbhid
drivers/usb/input/hid-core.c: v2.01:USB HID core driver
mice: PS/2 mouse device common for all mice
md: raid0 personality registered as nr 2
md: raid1 personality registered as nr 3
md: raid5 personality registered as nr 4
raid5: measuring checksumming speed
arm4regs : 308.800 MB/sec
8regs : 269.200 MB/sec
32regs : 200.000 MB/sec
raid5: using function: arm4regs (308.800 MB/sec)
md: md driver 0.90.1 MAX_MD_DEVS=256, MD_SB_DISKS=27
Buffalo Platform Linux Driver(Light) 0.01 installed.
MICON ctrl (C) BUFFALO INC. V.1.00 installed.
Kernel event proc (C) BUFFALO INC. V.1.00 installed.
MICON V2 (C) BUFFALO INC. V.1.00 installed.
NET: Registered protocol family 2
IP: routing cache hash table of 1024 buckets, 8Kbytes
TCP established hash table entries: 8192 (order: 4, 65536 bytes)
TCP bind hash table entries: 8192 (order: 3, 32768 bytes)
TCP: Hash tables configured (established 8192 bind 8192)
NET: Registered protocol family 1
NET: Registered protocol family 17
md: Autodetecting RAID arrays.
md: autorun ...
md: ... autorun DONE.
kjournald starting. Commit interval 5 seconds
EXT3 FS on sda2, internal journal
EXT3-fs: recovery complete.
EXT3-fs: mounted filesystem with ordered data mode.
VFS: Mounted root (ext3 filesystem).
Freeing init memory: 108K
INIT: version 2.86 booting
Activating swap...Adding 136544k swap on /dev/sda3. Priority:-1 extents:1
done.
Checking root file system...fsck 1.40-WIP (14-Nov-2006)
/dev/sda2 has gone 36002 days without being checked, check forced.
/dev/sda2: 8298/367616 files (0.8% non-contiguous), 204892/2939892 blocks
done.
EXT3 FS on sda2, internal journal
Setting the system clock..
Cleaning up ifupdown....
Loading device-mapper support.
Checking file systems...fsck 1.40-WIP (14-Nov-2006)
/dev/sda1: recovering journal
/dev/sda1: clean, 12/7056 files, 6718/56196 blocks
done.
Setting kernel variables...done.
Mounting local filesystems...kjournald starting. Commit interval 5 seconds
EXT3 FS on sda1, internal journal
EXT3-fs: mounted filesystem with ordered data mode.
done.
Activating swapfile swap...done.
Setting up networking....
Configuring network interfaces...eth0: link down
done.
eth0: link up<5>, full duplex<5>, speed 100 Mbps<5>
INIT: Entering runlevel: 2
Starting system log daemon: syslogd.
Starting kernel log daemon: klogd.
* Not starting internet superserver: no services enabled.
Starting OpenBSD Secure Shell server: sshd.
Starting periodic command scheduler: crond.

Debian GNU/Linux 4.0 kurobox ttyS0

kurobox login:


Debian化成功です。
別窓 | memo:Debian化 | コメント:0 | トラックバック:0
∧top | under∨

mtdblockとは?(2)

いまだによくわかりません。
しかし先日の記事で

まぁいずれにしても、rootfsはcramfsというファイルシステムかもしれない、ということと、mtdblock2とはパーティションではなくrootfsそのものだということになるのかな。


と書きましたが、おかしいですよね・・。
起動時のコンソールにも

VFS: Mounted root (jffs2 filesystem).


と出力されていますから、やっぱりルート・ファイル・システムはjffs2でマウントされています。
聞きかじった情報から憶測で仮定していました。まだまだ甘い・・。

さらに調べていく内に、IBM社のdeveloperWorks:Linuxというサイトにたどり着き、そこから「組み込みデバイスでのLinuxシステム開発」というPDF書類を見つけた。以下に部分引用してみる。

MTDドライバーのセットアップ
あるフラッシュ・デバイスにアクセスし、その上にファイルシステムを設けたい場合、MTDサブシステムをカーネルに含める形でコンパイルする必要があります。それには、適当なMTDハードウェアとユーザー・モジュールを選択します。MTDサブシステムは、現在でも、さまざまな種類のフラッシュ・デバイスをサポートしていますが、いろいろなフラッシュ・チップに対応したドライバーが次々と出されてきています。

フラッシュへのアクセスを可能にするユーザー・モジュールとして人気のあるものに、MTD_CHARとMTD_BLOCKの2つがあります。

MTD_CHARには、フラッシュのキャラクタを直接する機能があるのに対して、MTD_BLOCKは、フラッシュを通常の(IDEディスクのような)ブロック・デバイスとして取り扱い、その上にファイルシステムを作成できるようにしています。MTD_CHARに関係付けられるデバイスは/dev/mtd0、mtd1、mtd2(など)で、MTD_BLOCKに関係付けられるデバイスは/dev/mtdblock0、mtdblock1(など)です。MTD_BLOCKデバイスは、ブロック・デバイスに似せたエミュレーションを行いますので、多くの場合、このエミュレーションの上にFTLやJFFS2のようなファイルシステムを作成すればよいでしょう。


との一文がありました。
やっと出ました・・mtdblock・・。
この辺りの理解を深めようとさらに調べていくと、このMTD_CHAR、MTD_BLOCKというのはそれぞれ「キャラクタ・デバイス」「ブロック・デバイス」という考え方のようです。
ITproの「デバイス・ファイルとは」に説明がありました。

cramfsの影も形もでてきません・・。やはり私の早とちりだったようです。

とりあえず気を取り直してlsコマンドで/devを覗きます。

~ # ls -al /dev/
drwxr-xr-x 3 root root 0 Jun 17 2004 .
drwxr-xr-x 18 root root 0 Jul 13 14:57 ..
crw-r--r-- 1 root root 5, 1 Jul 13 14:59 console
crw-r--r-- 1 root root 205, 16 Oct 10 2001 cuaam0
crw-r--r-- 1 root root 205, 17 Oct 10 2001 cuaam1
lrwxrwxrwx 1 root root 3 Apr 10 22:45 disk1 -> sda
lrwxrwxrwx 1 root root 4 Apr 10 22:45 disk1_1 -> sda1
lrwxrwxrwx 1 root root 4 Apr 10 22:45 disk1_2 -> sda2
lrwxrwxrwx 1 root root 4 Apr 10 22:45 disk1_3 -> sda3
lrwxrwxrwx 1 root root 4 Apr 10 22:45 disk1_4 -> sda4
lrwxrwxrwx 1 root root 4 Apr 10 22:45 disk1_5 -> sda5
lrwxrwxrwx 1 root root 4 Apr 10 22:45 disk1_6 -> sda6
lrwxrwxrwx 1 root root 4 Apr 10 22:45 disk1_7 -> sda7
lrwxrwxrwx 1 root root 4 Apr 10 22:45 disk1_8 -> sda8
lrwxrwxrwx 1 root root 4 Apr 10 22:45 disk1_9 -> sda9
lrwxrwxrwx 1 root root 13 Apr 10 22:45 fd -> /proc/self/fd
prw-r--r-- 1 root root 0 Jun 24 2005 initctl
brw-r--r-- 1 root root 1, 250 Oct 10 2001 initrd
brw-r--r-- 1 root root 9, 0 Feb 1 08:42 md0
brw-r--r-- 1 root root 9, 1 Feb 1 08:42 md1
brw-r--r-- 1 root root 9, 2 Feb 1 08:42 md2
brw-r--r-- 1 root root 9, 3 Feb 1 08:42 md3
brw-r--r-- 1 root root 9, 4 Feb 1 08:43 md4
brw-r--r-- 1 root root 9, 5 Feb 1 08:43 md5
brw-r--r-- 1 root root 9, 6 Feb 1 08:43 md6
brw-r--r-- 1 root root 9, 7 Feb 1 08:43 md7
crw-r--r-- 1 root root 1, 1 Nov 17 2001 mem
brw-r--r-- 1 root root 28, 0 Jan 4 2003 mmc
brw-r--r-- 1 root root 31, 0 Jan 11 2007 mtd0
brw-r--r-- 1 root root 31, 1 Jan 11 2007 mtd1
brw-r--r-- 1 root root 31, 2 Jan 11 2007 mtd2
brw-r--r-- 1 root root 31, 3 Jan 11 2007 mtd3
brw-r--r-- 1 root root 31, 4 Jan 11 2007 mtd4
brw-r--r-- 1 root root 31, 5 Jan 11 2007 mtd5
brw-r--r-- 1 root root 31, 6 Jan 11 2007 mtd6
brw-r--r-- 1 root root 31, 7 Jan 11 2007 mtd7
brw-r--r-- 1 root root 31, 0 Jan 11 2007 mtdblock0
brw-r--r-- 1 root root 31, 1 Jan 11 2007 mtdblock1
brw-r--r-- 1 root root 31, 2 Jan 11 2007 mtdblock2
brw-r--r-- 1 root root 31, 3 Jan 11 2007 mtdblock3
brw-r--r-- 1 root root 31, 4 Jan 11 2007 mtdblock4
brw-r--r-- 1 root root 31, 5 Jan 11 2007 mtdblock5
brw-r--r-- 1 root root 31, 6 Jan 11 2007 mtdblock6
brw-r--r-- 1 root root 31, 7 Jan 11 2007 mtdblock7
crw-r--r-- 1 root root 90, 0 Jan 11 2007 mtdchar0
crw-r--r-- 1 root root 90, 2 Jan 11 2007 mtdchar1
crw-r--r-- 1 root root 90, 4 Jan 11 2007 mtdchar2
crw-r--r-- 1 root root 90, 6 Jan 11 2007 mtdchar3
crw-r--r-- 1 root root 90, 8 Jan 11 2007 mtdchar4
crw-r--r-- 1 root root 90, 10 Jan 11 2007 mtdchar5
crw-r--r-- 1 root root 90, 12 Jan 11 2007 mtdchar6
crw-r--r-- 1 root root 90, 14 Jan 11 2007 mtdchar7
crw-r--r-- 1 root root 1, 3 Oct 10 2001 null
crw-r--r-- 1 root root 5, 2 May 27 2004 ptmx
drwxr-xr-x 2 root root 0 Jan 1 1970 pts
crw-r--r-- 1 root root 2, 0 Oct 10 2001 ptyp0
crw-r--r-- 1 root root 2, 1 Oct 10 2001 ptyp1
crw-r--r-- 1 root root 2, 2 Oct 10 2001 ptyp2
crw-r--r-- 1 root root 2, 3 Oct 10 2001 ptyp3
brw-r--r-- 1 root root 1, 0 Oct 24 1983 ram0
brw-r--r-- 1 root root 0, 1 Oct 24 1983 ram1
brw-r--r-- 1 root root 0, 2 Oct 24 1983 ram2
lrwxrwxrwx 1 root root 4 Apr 10 22:45 ramdisk -> ram0
crwxrwxrwx 1 root root 1, 8 Apr 3 2006 random
crwxrwxrwx 1 root root 10, 135 Apr 16 2006 rtc
brwxrwxrwx 1 root root 8, 0 Apr 5 2006 sda
brwxrwxrwx 1 root root 8, 1 Apr 5 2006 sda1
brwxrwxrwx 1 root root 8, 2 Apr 5 2006 sda2
brwxrwxrwx 1 root root 8, 3 Apr 5 2006 sda3
brwxrwxrwx 1 root root 8, 4 Apr 5 2006 sda4
brwxrwxrwx 1 root root 8, 5 Apr 5 2006 sda5
brwxrwxrwx 1 root root 8, 6 Apr 5 2006 sda6
brwxrwxrwx 1 root root 8, 7 Apr 5 2006 sda7
brwxrwxrwx 1 root root 8, 8 Apr 5 2006 sda8
brwxrwxrwx 1 root root 8, 9 Apr 5 2006 sda9
brw-r--r-- 1 root root 8, 16 Jan 11 2007 sdb
brw-r--r-- 1 root root 8, 17 Jan 11 2007 sdb1
brw-r--r-- 1 root root 8, 18 Jan 11 2007 sdb2
brw-r--r-- 1 root root 8, 19 Jan 11 2007 sdb3
brw-r--r-- 1 root root 8, 20 Jan 11 2007 sdb4
brw-r--r-- 1 root root 8, 21 Jan 11 2007 sdb5
brw-r--r-- 1 root root 8, 22 Jan 11 2007 sdb6
brw-r--r-- 1 root root 8, 23 Jan 11 2007 sdb7
brw-r--r-- 1 root root 8, 32 Jan 11 2007 sdc
brw-r--r-- 1 root root 8, 33 Jan 11 2007 sdc1
brw-r--r-- 1 root root 8, 34 Jan 11 2007 sdc2
brw-r--r-- 1 root root 8, 35 Jan 11 2007 sdc3
brw-r--r-- 1 root root 8, 36 Jan 11 2007 sdc4
brw-r--r-- 1 root root 8, 37 Jan 11 2007 sdc5
brw-r--r-- 1 root root 8, 38 Jan 11 2007 sdc6
brw-r--r-- 1 root root 8, 39 Jan 11 2007 sdc7
brw-r--r-- 1 root root 8, 48 Jan 11 2007 sdd
brw-r--r-- 1 root root 8, 49 Jan 11 2007 sdd1
brw-r--r-- 1 root root 8, 50 Jan 11 2007 sdd2
brw-r--r-- 1 root root 8, 51 Jan 11 2007 sdd3
brw-r--r-- 1 root root 8, 52 Jan 11 2007 sdd4
brw-r--r-- 1 root root 8, 53 Jan 11 2007 sdd5
brw-r--r-- 1 root root 8, 54 Jan 11 2007 sdd6
brw-r--r-- 1 root root 8, 55 Jan 11 2007 sdd7
lrwxrwxrwx 1 root root 4 Apr 10 22:45 stderr -> fd/2
lrwxrwxrwx 1 root root 4 Apr 10 22:45 stdin -> fd/0
lrwxrwxrwx 1 root root 4 Apr 10 22:45 stdout -> fd/1
crw-r--r-- 1 root root 5, 0 Oct 10 2001 tty
crw-r--r-- 1 root root 4, 0 Oct 10 2001 tty0
crw------- 1 root root 4, 1 Oct 10 2001 tty1
crw------- 1 root root 4, 2 Oct 10 2001 tty2
crw-r--r-- 1 root root 4, 3 Oct 10 2001 tty3
crw------- 1 root root 4, 64 Jul 13 15:11 ttyS0
crw-r--r-- 1 root root 4, 65 Jul 13 15:11 ttyS1
crw-rw-rw- 1 root tty 3, 0 Oct 10 2001 ttyp0
crw-rw-rw- 1 root tty 3, 1 Oct 10 2001 ttyp1
crw-rw-rw- 1 root tty 3, 2 Oct 10 2001 ttyp2
crw-rw-rw- 1 root tty 3, 3 Oct 10 2001 ttyp3
crw-r--r-- 1 root root 1, 5 Jun 17 2004 zero


「c」とつくものがキャラクタ・デバイス、「b」とつくものがブロック・デバイスという説明が先ほどのITproでありました。

が!!

また混乱させられる事態が・・。先ほどのlsコマンドのmtdの箇所だけ抜き取って見ると

brw-r--r-- 1 root root 31, 0 Jan 11 2007 mtd0
brw-r--r-- 1 root root 31, 1 Jan 11 2007 mtd1
brw-r--r-- 1 root root 31, 2 Jan 11 2007 mtd2
brw-r--r-- 1 root root 31, 3 Jan 11 2007 mtd3
brw-r--r-- 1 root root 31, 4 Jan 11 2007 mtd4
brw-r--r-- 1 root root 31, 5 Jan 11 2007 mtd5
brw-r--r-- 1 root root 31, 6 Jan 11 2007 mtd6
brw-r--r-- 1 root root 31, 7 Jan 11 2007 mtd7


mtdが全部「b」・・。ブロック・デバイスかよ・・。
キャラクタ・デバイスとしては「mtdchar」というものが用意されているみたいです。
ということは、/mnt/mtdにマウントされた/dev/mtd3もブロック・デバイスであり、mountコマンドで

~ # mount
/dev/root on / type jffs2 (rw,noatime)
proc on /proc type proc (rw,nodiratime)
sysfs on /sys type sysfs (rw)
usbfs on /proc/bus/usb type usbfs (rw)
devpts on /dev/pts type devpts (rw)
/dev/ram1 on /mnt/ram type tmpfs (rw)
/dev/sda1 on /mnt/disk1 type xfs (rw)
/dev/mtd3 on /mnt/mtd type jffs2 (rw,noatime)


と入力して出される結果の「jffs2」というのはこのブロック・デバイス(厳密にはエミュレーションですが・・)上に作成されたファイルシステムだ、というわけですね。

それならランダムアクセスな共有スペース(mtd)の説明がつき、私的にはだいぶん楽になります(笑)。
このlsを確かめるまでは「なぜキャラクタ・デバイスにランダムアクセスするんだろ・・」と疑問に思っていましたから。

でもまだまだわからないことがありますので、もう少し勉強します。
続きは(3)で(笑)。
別窓 | memo:構造 | コメント:1 | トラックバック:0
∧top | under∨

ハックキットで夢のDebian GNU/Linuxサーバー 玄箱PROをハックしよう!


有名なLinkStation/玄箱をハックしようというサイトを運営されている方が書かれたものです。
この玄箱ハックシリーズは有名らしく、待ち望まれた今回の「Pro版」が発刊されました。
まさに私が今やっていることがこの本のテーマなので、早速入手しました。

端的に言うと「Debian化やPodcastをすぐにでもやりたい!」という人向けです。CD-ROMには必要なキットが入っていますし、本の中で導入の仕方も説明されています。
前述のサイトの要約的な意味もあり、手元に置いておくのも悪くないかと・・。

ただ、ターゲットがよくわかりません。
初心者を対象にしていない、という向きの注意書きが巻頭にはあるのですが、初心者でなければこの本の内容(の全てではありませんが大半)はすでにネット等で習得しているのでは?と素人の私は感じました。
内容の割合も、製品仕様書や本体付属の紙の説明書にあるものがかなり見受けられました。
初心者対象に絞って、もう少しコマンド類の説明や起動プロセス等の内部概要などがあった方が、特色も出て良かった気もします。
私が言うのもかなり僭越ですが(笑)。

「玄箱 初心者」というキーワードでここに来られる方も多いようなので、ひょっとしてそういう方が求めておられるのはこの本の内容かもしれません。
そういう方にオススメです。
別窓 | オススメの本 | コメント:0 | トラックバック:0
∧top | under∨

図解でわかるLinux環境設定のすべて


最初は「失敗したなぁ」と思った本です。
内容が初心者にはやや敷居が高く、とっつきにくい導入だったからです。
しかし、何回も何回も読んでいくうちに、「基本的な」Linuxの設定や起動過程が理解できてきたと思います。

初心者の方には絶対オススメです。
別窓 | オススメの本 | コメント:0 | トラックバック:0
∧top | under∨

mtdblockとは?

今まで何気なく見過ごしてたんですが、気がついてみたらわからないことが・・。
bootargs_rootでよく出てくる"mtdblock2"とは何でしょうか?
mtd2とはまた違うんでしょうか・・。

さぁ実験ですよ(笑)。
ためしに以下のように環境変数を書き換えてブートしてみました。

bootargs_root=root=/dev/mtd2 rw


するとコンソールには

Loading from device 0: <NULL> at 0xfa000000 (offset 0x20000)
Image Name: Linux-2.6.12.6-arm1
Created: 2007-04-10 13:45:13 UTC
Image Type: ARM Linux Kernel Image (uncompressed)
Data Size: 1736548 Bytes = 1.7 MB
Load Address: 00008000
Entry Point: 00008000
<<stop_sound>>
## Booting image at 00100000 ...
Image Name: Linux-2.6.12.6-arm1
Created: 2007-04-10 13:45:13 UTC
Image Type: ARM Linux Kernel Image (uncompressed)
Data Size: 1736548 Bytes = 1.7 MB
Load Address: 00008000
Entry Point: 00008000
Verifying Checksum ... OK
OK

Starting kernel ...

arg:console=ttyS0,115200 root=/dev/mtd2 rw BOOTVER=1.091
CONFIG_KUROBOX_PLATFORM CONFIG_KUROBOX_KUROBOX ---
Uncompressing Linux................................................................................................................. done, booting the kernel.
Linux version 2.6.12.6-arm1 (root@dev-hara) (gcc version 3.4.4 (release) (CodeSourcery ARM 2005q3-2)) #27 Tue Apr 10 22:47:16 JST 2007
CPU: ARM926EJ-Sid(wb) [41069260] revision 0 (ARMv5TEJ)
CPU0: D VIVT write-back cache
CPU0: I cache: 32768 bytes, associativity 1, 32 byte lines, 1024 sets
CPU0: D cache: 32768 bytes, associativity 1, 32 byte lines, 1024 sets
Machine: MV-88fxx81
Using UBoot passing parameters structure
Sys Clk = 250000000, Tclk = 166664740
Memory policy: ECC disabled, Data cache writeback
Built 1 zonelists
Kernel command line: console=ttyS0,115200 root=/dev/mtd2 rw BOOTVER=1.091
PID hash table entries: 1024 (order: 10, 16384 bytes)
Console: colour dummy device 80x30
Dentry cache hash table entries: 32768 (order: 5, 131072 bytes)
Inode-cache hash table entries: 16384 (order: 4, 65536 bytes)
Memory: 128MB 0MB 0MB 0MB = 128MB total
Memory: 126208KB available (3037K code, 426K data, 112K init)
Mount-cache hash table entries: 512
CPU: Testing write buffer coherency: ok
NET: Registered protocol family 16
serial_initialize_ttyS1 (Debug): ttyS1 is initialized.
config_device_cs Error : Unknown board

CPU Interface
-------------
SDRAM_CS0 ....base 00000000, size 128MB
SDRAM_CS1 ....disable
SDRAM_CS2 ....disable
SDRAM_CS3 ....disable
PEX0_MEM ....base e0000000, size 128MB
PEX0_IO ....base f2000000, size 1MB
PCI0_MEM ....base e8000000, size 128MB
PCI0_IO ....base f2100000, size 1MB
INTER_REGS ....base f1000000, size 1MB
DEVICE_CS0 ....base fa000000, size 2MB
DEVICE_CS1 ....base f4000000, size 32MB
DEVICE_CS2 ....base fa800000, size 1MB
DEV_BOOCS ....base ff800000, size 8MB
CRYPTO ENG ....no such
Flash bankwidth 1, base ff800000, size 400000
KUROBOX FLASH size 4096[KB]

Marvell Development Board (LSP Version 1.10.3.patch5_DB_NAS)-- KUROBOX_BOARD_KUROBOX Soc: 88F5182 A2

Detected Tclk 166664740 and SysClk 250000000
Marvell USB EHCI Host controller #0: c04e4b00
Marvell USB EHCI Host controller #1: c04e4a40
pexBarOverlapDetect: winNum 2 overlap current 0
mvPexInit:Warning :Bar 2 size is illigal
it will be disabled
please check Pex and CPU windows configuration
PCI: bus0: Fast back to back transfers enabled
PCI: bus1: Fast back to back transfers enabled
SCSI subsystem initialized
usbcore: registered new driver usbfs
usbcore: registered new driver hub
Use the XOR engines (offloading) for enhancing the following functions:
o RAID 5 Xor calculation
o kernel memcpy
o kenrel memzero
o copy user to/from kernel buffers
Number of XOR engines to use: 2
cesadev_init(c00122e4)
Fast Floating Point Emulator V0.9 (c) Peter Teichmann.
inotify device minor=63
JFFS2 version 2.2. (NAND) (C) 2001-2003 Red Hat, Inc.
SGI XFS with no debug enabled
Serial: 8250/16550 driver $Revision: 1.90 $ 4 ports, IRQ sharing disabled
ttyS0 at MMIO 0x0 (irq = 3) is a 16550A
ttyS1 at MMIO 0x0 (irq = 4) is a 16550A
io scheduler noop registered
io scheduler anticipatory registered
io scheduler deadline registered
io scheduler cfq registered
RAMDISK driver initialized: 3 RAM disks of 32768K size 1024 blocksize
loop: loaded (max 8 devices)
Marvell Gigabit Ethernet Driver 'egiga':
o Ethernet descriptors in DRAM
o DRAM SW cache-coherency
o Checksum offload enabled
o Loading network interface ** egiga_init_module (10)
'eth0'
Intergrated Sata device found
scsi0 : Marvell SCSI to SATA adapter
scsi1 : Marvell SCSI to SATA adapter
Vendor: Seagate Model: ST380815AS Rev: 3.AA
Type: Direct-Access ANSI SCSI revision: 03
SCSI device sda: 156301488 512-byte hdwr sectors (80026 MB)
SCSI device sda: drive cache: write back
SCSI device sda: 156301488 512-byte hdwr sectors (80026 MB)
SCSI device sda: drive cache: write back
sda: sda1
Attached scsi disk sda at scsi0, channel 0, id 0, lun 0
Attached scsi generic sg0 at scsi0, channel 0, id 0, lun 0, type 0
physmap flash device: 400000 at ff800000
Found: SST 39LF020
phys_mapped_flash: Found 1 x8 devices at 0x0 in 8-bit bank
number of JEDEC chips: 1
cfi_cmdset_0002: Disabling erase-suspend-program due to code brokenness.
RedBoot partition parsing not available
Debug nand_scan : nand_flash_ids[i].pagesize is exist
Debug nand_scan : mtd->erasesize=0x00020000
Debug nand_scan : mtd->oobblock=0x00000800
Debug nand_scan : mtd->oobsize=0x00000040
NAND device: Manufacturer ID: 0x20, Chip ID: 0xda (ST Micro NAND 256MiB 3,3V 8-bit)
Scanning device for bad blocks
Using static partition definition
Creating 3 MTD partitions on "nand_mtd":
0x00000000-0x00400000 : "uImage"
0x00400000-0x04400000 : "rootfs"
0x04400000-0x10000000 : "extra"
usbmon: debugs is not available
ehci_platform ehci_platform.4523: EHCI Host Controller
ehci_platform ehci_platform.4523: new USB bus registered, assigned bus number 1
ehci_platform ehci_platform.4523: irq 17, io mem 0x00000000
ehci_platform ehci_platform.4523: park 0
ehci_platform ehci_platform.4523: USB 0.0 initialized, EHCI 1.00, driver 10 Dec 2004
hub 1-0:1.0: USB hub found
hub 1-0:1.0: 1 port detected
ehci_platform ehci_platform.16781: EHCI Host Controller
ehci_platform ehci_platform.16781: new USB bus registered, assigned bus number 2
ehci_platform ehci_platform.16781: irq 12, io mem 0x00000000
ehci_platform ehci_platform.16781: park 0
ehci_platform ehci_platform.16781: USB 0.0 initialized, EHCI 1.00, driver 10 Dec 2004
hub 2-0:1.0: USB hub found
hub 2-0:1.0: 1 port detected
USB Universal Host Controller Interface driver v2.2
Initializing USB Mass Storage driver...
usbcore: registered new driver usb-storage
USB Mass Storage support registered.
usbcore: registered new driver usbhid
drivers/usb/input/hid-core.c: v2.01:USB HID core driver
mice: PS/2 mouse device common for all mice
md: raid0 personality registered as nr 2
md: raid1 personality registered as nr 3
md: raid5 personality registered as nr 4
raid5: measuring checksumming speed
arm4regs : 304.000 MB/sec
8regs : 215.200 MB/sec
32regs : 249.200 MB/sec
raid5: using function: arm4regs (304.000 MB/sec)
md: md driver 0.90.1 MAX_MD_DEVS=256, MD_SB_DISKS=27
Buffalo Platform Linux Driver(Light) 0.01 installed.
MICON ctrl (C) BUFFALO INC. V.1.00 installed.
Kernel event proc (C) BUFFALO INC. V.1.00 installed.
MICON V2 (C) BUFFALO INC. V.1.00 installed.
NET: Registered protocol family 2
IP: routing cache hash table of 1024 buckets, 8Kbytes
TCP established hash table entries: 8192 (order: 4, 65536 bytes)
TCP bind hash table entries: 8192 (order: 3, 32768 bytes)
TCP: Hash tables configured (established 8192 bind 8192)
NET: Registered protocol family 1
NET: Registered protocol family 17
md: Autodetecting RAID arrays.
md: autorun ...
md: ... autorun DONE.
Root-NFS: No NFS server available, giving up.
VFS: Unable to mount root fs via NFS, trying floppy.
VFS: Cannot open root device "mtd2" or unknown-block(2,0)
Please append a correct "root=" boot option
Kernel panic - not syncing: VFS: Unable to mount root fs on unknown-block(2,0)


やはりrootfsはマウントできませんね。てかデフォルトでNFS探しに行くんですね・・。関係ないですけど。
つまり、/proc/mtdによるとmtd2という領域にrootfsはあるにも関わらず、このmtd2をbootargs_rootには指定できないんですね。
HDDブートの時は/dev/sda2とか指定するのにどうしてだろ・・。

ちょっと調べてみました。
"mtdblock"でググったらひとまず目についたのがここ。そこには

ROM上のcramfsイメージをブロックデバイスに見せる為に mtdblock が入っているはずで、配布バイナリにもmtdblockの文字があるけど、 これもあるはずの文字列が見付からない。


前後の話題がまったく理解できませんので、この文章だけに注目しました。
mtdblockはROM上のcramfsイメージをブロックデバイスに見せる役割がある、という意味っぽいです。
さて、次はcramfsが何なのかわかりませんのではてなで調べました。

Linuxの圧縮ファイルシステムの一つ。書き込みはできない。組み込みシステムや小型デバイスで使われる。


とのこと。
ファイルシステム(xfsとかext3とか)の仲間ということだろうか。圧縮だから違うのかな。

まぁいずれにしても、rootfsはcramfsというファイルシステムかもしれない、ということと、mtdblock2とはパーティションではなくrootfsそのものだということになるのかな。

HDDブートの際は、hddrootfs.tar.gzというファイルを使うから、一概に/dev/mtd2と/dev/sda2の何が違うのかという発想は正しいとは言えないかも。

しかし調べれば調べるほど調べものが増えるって・・・どうなのさ?(笑)
別窓 | memo:構造 | コメント:2 | トラックバック:0
∧top | under∨

玄箱Proが起動するまで

いまいちよくわからないことが・・。
前出の「自分で作るLinuxOS」という本にある「GRUBの仕組み」にU-bootを当てはめると

玄箱Proの電源ON

U-bootが起動し、環境変数をもとにカーネル、initrd、rootfsを特定

カーネルがメモリ上に読み込まれる

initrdがメモリ上に読み込まれる

カーネルの起動

initrdを起動時のルート・ファイル・システムとしてマウント

initrd内のlinuxrcスクリプトがルート・ファイル・システムをマウントする際に必要なドライバをカーネルに読み込んでから実際のルート・ファイル・システムをマウント

初期化プロセス


となると思っていたんですが・・

製品仕様書のAppendixには「initrd-----(Not use)」という記述が多い。
でもinitrdがないとlinuxrcスクリプトが走らず、rootfsがマウントできないと思うんだけど・・。
ちなみにinitrdを必要とするブートはAppendixの

A.4.uImage(tftp load)、initrd(tftp load)の場合のブート設定


だけ。
このブート方法の詳細は

uImage→tftpからロード
initrd→tftpからロード
rootfs→initrd内に存在
備考→initrd内に、rootfsが存在すること。initrdのrootfsを展開後、32MB以内であること。


とある。
これはつまり・・フラッシュからもHDDからも起動できなくなった場合、tftpでrootfsを扱えないからinitrdにのせて玄箱Proに転送して、/dev/mtdblock2にrootfsを展開する、ってことなんでしょうか?
この/dev/mtdblock2に展開って作業をinitrdがやってるのかな。

いや、いずれにしても、initrdをNot useってのがよくわかりません・・。

bootargs_rootでrootfsの場所を指定したってことはカーネルにパラメータとしてこの情報が伝わっているんですよね。
てことは、カーネルが起動して、しかしinitrdを起動させることなくカーネル自身がrootfsをマウントしてるってことでしょうか?

なんだかまた基本的なところでつまずいている感じですね。
これをどうやって検証すればいいのか、これを考えるところからまた長い道のりが・・。
別窓 | memo:起動処理 | コメント:0 | トラックバック:0
∧top | under∨

HDDブート

そういえば、仕様書にあるHDDブートってやったことないなぁ。

ということで、今頃ですがやってみました、HDDブート。

仕様書によると

動作は保障しない


とのこと(笑)。もうなんだっていいです、はい。

1.未フォーマット状態のHDDを接続し、通常ブートさせる。
2.CD-ROMの「development_kit」内の書き(『下記』の誤植)ファイルを共有ディレクトリ、「mtd device」にコピーする。
3.上記状態で、製品背面のinitswを押す。
4.Infoledが点滅し、フォーマット、開発環境の展開、u-bootの環境変数の書き換えが行われる。


とのこと。
下記ファイルとは

hddrootfs.tar.gz
ChangeMeDevHDD
ChangeMeUbootEnv
uImage.buffalo

の4つ。
ひとまずこの通りにやってみた。

作業終了でreboot。

へぇ、HDDブートの時はサングラス男出ないんだね。
HDDブートの時の環境変数です。

baudrate=115200
loads_echo=0
rootpath=/nfs/arm
cpuName=926
CASset=min
MALLOC_len=4
bootargs_end=:::DB88FXX81:eth0:none
ethact=egiga0
ethaddr=00:16:01:A4:D5:55
buffalo_ver=BOOTVER=1.091
build_time=18:10:02
nand_uImage_offset=20000
def_tftp=tftp $(default_kernel_addr) $(kernel); tftp $(default_initrd_addr) $(initrd); setenv bootargs $(bootargs_base) $(bootargs_root) rw initrd=0x02000040,20M panic=5 $(buffalo_ver); bootm $(default_kernel_addr) $(default_initrd_addr)
kernel=uImage.buffalo
initrd=initrd.buffalo
filesize=1a7fa4
fileaddr=0
ipaddr=192.168.1.9
serverip=192.168.1.25
default_initrd_addr=0x02000000
uImage_block=0
uImage_offset=0x00020000
default_kernel_addr=0x00100000
bootargs_base=console=ttyS0,115200
bootargs_root=root=/dev/sda2 rw panic=5
bootargs=console=ttyS0,115200 root=/dev/sda2 rw panic=5 BOOTVER=1.09
bootcmd=ide reset; ext2load ide 0:1 $(default_kernel_addr) /$(kernel); bootm $(default_kernel_addr)
nand_boot=no
stdin=serial
stdout=serial
stderr=serial
enaMonExt=no
enaFlashBuf=yes
enaCpuStream=no
ethprime=egiga0
bootdelay=3
disaMvPnp=no
overEthAddr=no
usb0Mode=host
usb1Mode=host


フラッシュブートからの変更点は

bootargs_root root=/dev/sda2 rw panic=5
bootcmd ide reset; ext2load ide 0:1
nand_boot no
bootargs $(bootargs_base) $(bootargs_root) $(buffalo_ver)


の4点でしょうか。

有名な「LinkStation/玄箱をハックしよう」ではもっと詳しく、/etc/init.d/rcS内の変化を説明していただいてます。(→「初期化の違い」)。
ホントありがたい話です・・。

ためしに以下のように入力すると、フラッシュからのブートとなりました。

Marvell>> setenv bootargs_root root=/dev/mtdblock2 rw panic=5
Marvell>> setenv bootcmd 'nboot $(default_kernel_addr) 0 $(nand_uImage_offset); bootm $(default_kernel_addr)'
Marvell>> setenv nand_boot yes
Marvell>> setenv bootargs $(bootargs_base) $(bootargs_root) $(buffalo_ver)
Marvell>> boot


やっとこの辺の仕組みが理解できてきたかもしれません(汗)。

長かった・・。
別窓 | memo:ブート方法 | コメント:0 | トラックバック:0
∧top | under∨

/dev/mtdとは

玄箱をたちあげ、ログインしたら

~ # cat /proc/mtd


と入力。
procは「プロセス」の略・・か?
すると

dev: size erasesize name
mtd0: 00040000 00001000 "phys_mapped_flash"
mtd1: 00400000 00020000 "uImage"
mtd2: 04000000 00020000 "rootfs"
mtd3: 0bc00000 00020000 "extra"


と出力される。
要するに/dev/mtdを覗いてみた。

mtd0とはNOR型フラッシュメモリ。
サイズの40000は16進数で、10進数に変換すると262144となった。これを1KB=1024Bで換算すれば256KBとなる。つまり、mtd0は256KBのNOR型メモリということ。
ここにはU-bootとU-Boot環境変数が格納されている。

mtd1、mtd2、mtd3はNAND型フラッシュメモリで、一般的に
/dev/mtd
と表記されていればここのことだ。

mtd1のサイズは同様に換算すれば4096KB(4MB)。「uImage」とあるように、ここにはカーネルが格納されている。

mtd2のサイズは同様に65536KB(64MB)。bootargs_rootの設定でおなじみの場所だが、やっぱりここにrootfs(ルートファイルシステム)。

mtd3は192512KB(188MB)で

~ # df -h
Filesystem Size Used Available Use% Mounted on
/dev/mtd2 64.0M 15.6M 48.4M 24% /
/dev/ram1 8.0M 156.0k 7.8M 2% /mnt/ram
/dev/mtd3 188.0M 4.3M 183.7M 2% /mnt/mtd


と入力してみるとわかるように、「Mounted on」で/mnt/mtdにマウントされている。
NASとして「mtd device」と出ているのはここ。つまり、ここがファイル共有ディレクトリとなる。
別窓 | memo:構造 | コメント:0 | トラックバック:0
∧top | under∨

2.製品概要

本製品は、10/100/1000Mbps Ethernetポート×1、USB2.0 Aコネクタ×2を有し、LANに接続された複数のPCからアクセス可能なLinux-Boxの自作キットである。


いやぁ、太字ですなぁ(笑)。
玄箱シリーズ初心者な私としてはこれで「へぇ」というのだが、ネットで見かける反応は
「今バージョン(Pro)からはNASではなく『Linux-Box』と変わった」
というものが多い。

そうなんだ、それって・・そういう反応がいいんだ(笑)。

でも私のような素人にLinuxを勉強する機会を与えてくれたことにはすごく感謝しています。
ネットでの情報も豊富だし、雑誌などでもたびたび取り上げられていたのでTipsには困りませんしね。
なにより安くて静かで小さくて・・・ホント、これ以上の教材はありません。

一通り理解できたら(そんな日は来るのか?)自宅サーバでもやりたいですね。
てか元々そのつもりで購入したんですが・・触っているうちに楽しくなってきちゃいました(笑)。

では頑張って、でも楽しみながら玄箱Proくんを理解していきたいと思います。
別窓 | 製品仕様書の解読 | コメント:0 | トラックバック:0
∧top | under∨

1.目次

自分自身の理解を深めるためにも、製品仕様書を調べながら解読(笑)していこうかと。
一応カタチが大事なので「1.目次」から(笑)。

・・・いやそれだけっす!
別窓 | 製品仕様書の解読 | コメント:0 | トラックバック:0
∧top | under∨

ブート時の環境変数特性

フラッシュ・HDD・TFTPのそれぞれのブートの挙動に影響する環境変数は

・bootargs_root
・bootcmd
・nand_boot

かな?
それぞれのブートは以下の設定値

フラッシュブート
・bootargs_root=root=/dev/mtdblock2 rw
・bootcmd=nboot $(default_kernel_addr) 0 $(nand_uImage_offset); bootm $(default_kernel_addr)
・nand_boot=yes


HDDブート
・bootargs_root=root=/dev/sda2 rw
・bootcmd=ext2load ide 0:1 $(default_kernel_addr) /$(kernel); bootm $(default_kernel_addr)
・nand_boot=no


TFTPブート
・bootargs_root=root=/dev/mtdblock2 rw
・bootcmd=tftp $(default_kernel_addr) $(kernel); tftp $(default_initrd_addr) $(initrd); bootm $(default_kernel_addr) $(default_initrd_addr)
・and_boot=no


TFTPブートの際は、bootcmdのinitrdの扱いにパターンあり。
initrdをtftpサーバから読み込むなら上記の記述が必要。
bootcmd=tftp $(default_kernel_addr) $(kernel); bootm $(default_kernel_addr)
という設定もあるけど、上記なら確実にブートする。
別窓 | memo:ブート方法 | コメント:0 | トラックバック:0
∧top | under∨

フラッシュブート

ワケあって再びフラッシュブートに戻す。

どうしてだろう。
この作業が一番楽しい(笑)。



・シリアルコンソールで玄箱とPCを接続
・TeraTermProを起動、シリアルポートのレートを115200へ
・玄箱の電源オン
・2度目の「Hit any key..」でキーボードをポン




Marvell>> setenv bootcmd 'nboot $(default_kernel_addr) 0 $(nand_uImage_offset); bootm $(default_kernel_addr)'
Marvell>> setenv bootargs_root root=/dev/mtdblock2 rw panic=5
Marvell>> setenv bootargs $(bootargs_base) $(bootargs_root) $(buffalo_ver)
Marvell>> setenv nand_boot yes
Marvell>> saveenv
Marvell>> boot


これでひとまずOK。

Loading from device 0: at 0xfa000000 (offset 0x20000)
Image Name: Linux-2.6.12.6-arm1
Created: 2007-04-10 13:45:13 UTC
Image Type: ARM Linux Kernel Image (uncompressed)
Data Size: 1736548 Bytes = 1.7 MB
Load Address: 00008000
Entry Point: 00008000
<<stop_sound>>
## Booting image at 00100000 ...
Image Name: Linux-2.6.12.6-arm1
Created: 2007-04-10 13:45:13 UTC
Image Type: ARM Linux Kernel Image (uncompressed)
Data Size: 1736548 Bytes = 1.7 MB
Load Address: 00008000
Entry Point: 00008000
Verifying Checksum ... OK
OK

Starting kernel ...

arg:console=ttyS0,115200 root=/dev/mtdblock2 rw panic=5 BOOTVER=1.091
CONFIG_KUROBOX_PLATFORM CONFIG_KUROBOX_KUROBOX ---
Uncompressing Linux................................................................................................................. done, booting the kernel.
Linux version 2.6.12.6-arm1 (root@dev-hara) (gcc version 3.4.4 (release) (CodeSourcery ARM 2005q3-2)) #27 Tue Apr 10 22:47:16 JST 2007
CPU: ARM926EJ-Sid(wb) [41069260] revision 0 (ARMv5TEJ)
CPU0: D VIVT write-back cache
CPU0: I cache: 32768 bytes, associativity 1, 32 byte lines, 1024 sets
CPU0: D cache: 32768 bytes, associativity 1, 32 byte lines, 1024 sets
Machine: MV-88fxx81
Using UBoot passing parameters structure
Sys Clk = 250000000, Tclk = 166664740
Memory policy: ECC disabled, Data cache writeback
Built 1 zonelists
Kernel command line: console=ttyS0,115200 root=/dev/mtdblock2 rw panic=5 BOOTVER=1.091
PID hash table entries: 1024 (order: 10, 16384 bytes)
Console: colour dummy device 80x30
Dentry cache hash table entries: 32768 (order: 5, 131072 bytes)
Inode-cache hash table entries: 16384 (order: 4, 65536 bytes)
Memory: 128MB 0MB 0MB 0MB = 128MB total
Memory: 126208KB available (3037K code, 426K data, 112K init)
Mount-cache hash table entries: 512
CPU: Testing write buffer coherency: ok
NET: Registered protocol family 16
serial_initialize_ttyS1 (Debug): ttyS1 is initialized.
config_device_cs Error : Unknown board

CPU Interface
-------------
SDRAM_CS0 ....base 00000000, size 128MB
SDRAM_CS1 ....disable
SDRAM_CS2 ....disable
SDRAM_CS3 ....disable
PEX0_MEM ....base e0000000, size 128MB
PEX0_IO ....base f2000000, size 1MB
PCI0_MEM ....base e8000000, size 128MB
PCI0_IO ....base f2100000, size 1MB
INTER_REGS ....base f1000000, size 1MB
DEVICE_CS0 ....base fa000000, size 2MB
DEVICE_CS1 ....base f4000000, size 32MB
DEVICE_CS2 ....base fa800000, size 1MB
DEV_BOOCS ....base ff800000, size 8MB
CRYPTO ENG ....no such
Flash bankwidth 1, base ff800000, size 400000
KUROBOX FLASH size 4096[KB]

Marvell Development Board (LSP Version 1.10.3.patch5_DB_NAS)-- KUROBOX_BOARD_KUROBOX Soc: 88F5182 A2

Detected Tclk 166664740 and SysClk 250000000
Marvell USB EHCI Host controller #0: c04e4b00
Marvell USB EHCI Host controller #1: c04e4a40
pexBarOverlapDetect: winNum 2 overlap current 0
mvPexInit:Warning :Bar 2 size is illigal
it will be disabled
please check Pex and CPU windows configuration
PCI: bus0: Fast back to back transfers enabled
PCI: bus1: Fast back to back transfers enabled
SCSI subsystem initialized
usbcore: registered new driver usbfs
usbcore: registered new driver hub
Use the XOR engines (offloading) for enhancing the following functions:
o RAID 5 Xor calculation
o kernel memcpy
o kenrel memzero
o copy user to/from kernel buffers
Number of XOR engines to use: 2
cesadev_init(c00122e4)
Fast Floating Point Emulator V0.9 (c) Peter Teichmann.
inotify device minor=63
JFFS2 version 2.2. (NAND) (C) 2001-2003 Red Hat, Inc.
SGI XFS with no debug enabled
Serial: 8250/16550 driver $Revision: 1.90 $ 4 ports, IRQ sharing disabled
ttyS0 at MMIO 0x0 (irq = 3) is a 16550A
ttyS1 at MMIO 0x0 (irq = 4) is a 16550A
io scheduler noop registered
io scheduler anticipatory registered
io scheduler deadline registered
io scheduler cfq registered
RAMDISK driver initialized: 3 RAM disks of 32768K size 1024 blocksize
loop: loaded (max 8 devices)
Marvell Gigabit Ethernet Driver 'egiga':
o Ethernet descriptors in DRAM
o DRAM SW cache-coherency
o Checksum offload enabled
o Loading network interface ** egiga_init_module (10)
'eth0'
Intergrated Sata device found
scsi0 : Marvell SCSI to SATA adapter
scsi1 : Marvell SCSI to SATA adapter
Vendor: Seagate Model: ST380815AS Rev: 3.AA
Type: Direct-Access ANSI SCSI revision: 03
SCSI device sda: 156301488 512-byte hdwr sectors (80026 MB)
SCSI device sda: drive cache: write back
SCSI device sda: 156301488 512-byte hdwr sectors (80026 MB)
SCSI device sda: drive cache: write back
sda: sda1 sda2 sda3 sda4
Attached scsi disk sda at scsi0, channel 0, id 0, lun 0
Attached scsi generic sg0 at scsi0, channel 0, id 0, lun 0, type 0
physmap flash device: 400000 at ff800000
Found: SST 39LF020
phys_mapped_flash: Found 1 x8 devices at 0x0 in 8-bit bank
number of JEDEC chips: 1
cfi_cmdset_0002: Disabling erase-suspend-program due to code brokenness.
RedBoot partition parsing not available
Debug nand_scan : nand_flash_ids[i].pagesize is exist
Debug nand_scan : mtd->erasesize=0x00020000
Debug nand_scan : mtd->oobblock=0x00000800
Debug nand_scan : mtd->oobsize=0x00000040
NAND device: Manufacturer ID: 0x20, Chip ID: 0xda (ST Micro NAND 256MiB 3,3V 8-bit)
Scanning device for bad blocks
Using static partition definition
Creating 3 MTD partitions on "nand_mtd":
0x00000000-0x00400000 : "uImage"
0x00400000-0x04400000 : "rootfs"
0x04400000-0x10000000 : "extra"
usbmon: debugs is not available
ehci_platform ehci_platform.4523: EHCI Host Controller
ehci_platform ehci_platform.4523: new USB bus registered, assigned bus number 1
ehci_platform ehci_platform.4523: irq 17, io mem 0x00000000
ehci_platform ehci_platform.4523: park 0
ehci_platform ehci_platform.4523: USB 0.0 initialized, EHCI 1.00, driver 10 Dec 2004
hub 1-0:1.0: USB hub found
hub 1-0:1.0: 1 port detected
ehci_platform ehci_platform.16781: EHCI Host Controller
ehci_platform ehci_platform.16781: new USB bus registered, assigned bus number 2
ehci_platform ehci_platform.16781: irq 12, io mem 0x00000000
ehci_platform ehci_platform.16781: park 0
ehci_platform ehci_platform.16781: USB 0.0 initialized, EHCI 1.00, driver 10 Dec 2004
hub 2-0:1.0: USB hub found
hub 2-0:1.0: 1 port detected
USB Universal Host Controller Interface driver v2.2
Initializing USB Mass Storage driver...
usbcore: registered new driver usb-storage
USB Mass Storage support registered.
usbcore: registered new driver usbhid
drivers/usb/input/hid-core.c: v2.01:USB HID core driver
mice: PS/2 mouse device common for all mice
md: raid0 personality registered as nr 2
md: raid1 personality registered as nr 3
md: raid5 personality registered as nr 4
raid5: measuring checksumming speed
arm4regs : 304.000 MB/sec
8regs : 215.200 MB/sec
32regs : 249.200 MB/sec
raid5: using function: arm4regs (304.000 MB/sec)
md: md driver 0.90.1 MAX_MD_DEVS=256, MD_SB_DISKS=27
Buffalo Platform Linux Driver(Light) 0.01 installed.
MICON ctrl (C) BUFFALO INC. V.1.00 installed.
Kernel event proc (C) BUFFALO INC. V.1.00 installed.
MICON V2 (C) BUFFALO INC. V.1.00 installed.
NET: Registered protocol family 2
IP: routing cache hash table of 1024 buckets, 8Kbytes
TCP established hash table entries: 8192 (order: 4, 65536 bytes)
TCP bind hash table entries: 8192 (order: 3, 32768 bytes)
TCP: Hash tables configured (established 8192 bind 8192)
NET: Registered protocol family 1
NET: Registered protocol family 17
md: Autodetecting RAID arrays.
md: autorun ...
md: ... autorun DONE.
VFS: Mounted root (jffs2 filesystem).
Freeing init memory: 112K
--- rcStart (NANDroot) ---
===== Starting MountSystemFolders =====
mounting procfs ... [Success]
mounting sysfs ... [Success]
mouting usbfs ... [Success]
remouting rootfs ... [Success]
mounting all devices ... [Success]


===== Starting checkroot.sh =====
rm: /var/lock/perfmon: is a directory
rm: /var/lock/printing: is a directory
rm: /var/lock/subsys: is a directory
[Success]


===== Starting Kevent.sh =====
[Success]


===== Starting mount_share.sh =====
Mounting /dev/sda4 on /mnt/disk1 as a xfs file system.
XFS: bad magic number
XFS: SB validate failed
mount: Mounting /dev/sda4 on /mnt/disk1 failed: Invalid argument
Failed.
Mounting /dev/sda4 on /mnt/disk1 as a ext3 file system.
kjournald starting. Commit interval 5 seconds
EXT3 FS on sda4, internal journal
EXT3-fs: mounted filesystem with ordered data mode.
Success.

Mounting /dev/mtd3 on /mnt/mtd as a jffs2 file system.
Success.

[Success]


===== Starting sethostname.sh =====
hostname is setted to KUROBOX-PRO
[Success]


===== Starting networking.sh =====
create network files..
IP=[dhcp], netmask=[], dgw=[], dns1=[], dns2=[]
killall: dhcpcd: no process killed
route: SIOC[ADD|DEL]RT: No such process
Configuration network interface: lo eth0
requesting DHCP tout=30[s]
eth0: link down
eth0: link up<5>, full duplex<5>, speed 100 Mbps<5>
/etc/dhcpc/dhcpcd.exe ::: /etc/dhcpc/dhcpcd-eth0.info new
dhcpcd.exe: interface eth0 has been configured with new IP=192.168.1.9
hostname is setted to KUROBOX-PRO
[Success]


===== Starting httpd.sh =====
[Success]


===== Starting telnet.sh =====
[Success]


===== Starting inetd.sh =====
[Success]


===== Starting smb.sh =====
$Starting SMB services:
$Starting NMB services:
[Success]


===== Starting clientUtil_servd.sh =====
Starting clientUtil_server:starting on eth0
[Success]


===== Starting bootcomplete.sh =====
[Success]


===== Starting FanController.sh =====
[Success]


===== Starting boss.sh =====

[Success]


KUROUTOSHIKOU KUROBOX Series KUROBOX/PRO(KOSHO)
KUROBOX-PRO login: root
Password:
login[790]: root login on `ttyS0'



BusyBox v1.1.1 (2007.04.06-12:02+0000) Built-in shell (ash)
Enter 'help' for a list of built-in commands.

~ #


Debian化の際にパーティションを切ったHDDを初期化。

まずはマウントをはずして

~ # df
Filesystem 1k-blocks Used Available Use% Mounted on
/dev/mtd2 65536 15980 49556 24% /
/dev/ram1 8192 156 8036 2% /mnt/ram
/dev/sda4 73837116 72300 70014044 0% /mnt/disk1
/dev/mtd3 192512 4356 188156 2% /mnt/mtd
~ # umount /mnt/disk1


fdisk、と。

~ # fdisk /dev/sda


「p」を入力して念のため確認。

Command (m for help): p

Disk /dev/sda: 80.0 GB, 80026361856 bytes
255 heads, 63 sectors/track, 9729 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes

Device Boot Start End Blocks Id System
/dev/sda1 1 7 56196 83 Linux
/dev/sda2 8 373 2939895 83 Linux
/dev/sda3 374 390 136552+ 82 Linux swap
/dev/sda4 391 9729 75015517+ 83 Linux

Command (m for help):


「d」で次々にパーティション削除。

Command (m for help): d
Partition number (1-4): 1

Command (m for help): d
Partition number (1-4): 2

Command (m for help): d
Partition number (1-4): 3

Command (m for help): d
Selected partition 4

Command (m for help):


「w」で作業の確定を。

Command (m for help): w
The partition table has been altered!

Calling ioctl() to re-read partition table.
SCSI device sda: 156301488 512-byte hdwr sectors (80026 MB)
SCSI device sda: drive cache: write back
sda:
SCSI device sda: 156301488 512-byte hdwr sectors (80026 MB)
SCSI device sda: drive cache: write back
sda:
Syncing disks.
~ #


これで完全に初期状態。

さて・・次は何を試そうか・・。
仕様書の環境変数設定例を全部試してみようかな。
別窓 | memo:ブート方法 | コメント:0 | トラックバック:0
∧top | under∨

Linuxコマンドブック ビギナーズ


私のようなLinux初心者にはもってこいじゃなかろうか・・。
基本的なLinuxコマンドを、用例と解説で細かく紹介しています。
「ビギナーズ」とあるように、知っている人には無駄な買い物になるかと思いますが、「これからLinuxの勉強をするぞ!」という人にはうってつけ。

コマンドの動作確認環境は

Fedora Core 6
Ubuntu 6.06 LTS
Debian GNU/Linux 3.1r3
CentOS 4.4

だそうです。

オススメです。
別窓 | オススメの本 | コメント:0 | トラックバック:1
∧top | under∨

自分で作るLinux OS

自分で作るLinux OS 自分で作るLinux OS
日経Linux (2006/07/19)
日経BP社
この商品の詳細を見る

組み込みLinuxなどの勉強用に購入したんですが、いまだに添付されていたCD-Rは開封さえしてません(笑)。
Linuxの仕組みが細かく説明されていて、初心者にはとっつきやすいです。

ただ、この手の本(過去の連載をまとめたもの)は用語の説明に重複があったり、うまいこと系統だって進んでいませんから苦痛でもあります(笑)。

じっくり読めばそれなりに価値はあります。
別窓 | オススメの本 | コメント:0 | トラックバック:2
∧top | under∨

pingが通らない→解決

んー。実は先日から気になっててまだ検証できてなかったことがあるのですが。

WindowsXPなPCから玄箱くんにpingを飛ばしても通らないっぽい。

C:\>ping kurobox

Pinging kurobox [192.168.1.9] with 32 bytes of data:

Request timed out.
Request timed out.
Request timed out.
Request timed out.

Ping statistics for 192.168.1.9:
Packets: Sent = 4, Received = 0, Lost = 4 (100% loss),


と言われてしまいます。
でもsambaサーバは稼働して、XPからも玄箱にアクセスできます。

さて、そこでgoogle先生ですよ。

・・・はい。
・・・ええ。
・・・はい。

ウイルスソフトを終了させたらあっさり通りました。

こんなことで時間を費やすなんて。
あぁ・・この先大丈夫だろうか・・・。
別窓 | 日記のようなもの | コメント:1 | トラックバック:0
∧top | under∨

Debian GNU/Linux 4.0(etch)

もう説明はいらないほどお決まりコースな「Etch化」です。
エレキジャックさんのブログを参考にさせていただきながら無事終了。
いや、これだけなら初心者の私にもできます。

問題はよく理解できないままでも成功してしまう、という皮肉な点です(笑)。

そもそもどうしてDebianなんでしょうね?他のLinuxディストリビューションじゃダメなんですかね?
ここもよくわかっていないんです。勉強します。
別窓 | memo:Debian化 | コメント:0 | トラックバック:0
∧top | under∨

ひとまず解決を優先

いろいろ調べている過程で、案外簡単にtftpブートに成功しましたので、先にこの内容をお知らせしておきます。
まぁ普通は誰でも知ってるレベルなんでしょうけど(笑)。

1.シリアル・コンソールでPCと玄箱を接続
2.PCと玄箱をLAN内に接続しておく
3.PCにてターミナルソフト(Tera Term Proなど)とTFTPサーバソフト(Poor TFTPなど)を起動し、適宜設定
4.玄箱の電源を入れる
5.ターミナルソフトに表示される2回目の「Hit any key..」で何かキーを押す



そして

Marvell>>


と表示されたところで以下のように入力。

Marvell>>setenv default_kernel_addr 0x00100000
Marvell>>setenv default_initrd_addr 0x02000000
Marvell>>setenv bootargs_base console=tty0 S0,115200
Marvell>>setenv bootargs_root root=/dev/mtdblock2 rw
Marvell>>setenv bootargs $(bootargs_base) $(bootargs_root) $(buffalo_ver)
Marvell>>setenv bootcmd 'tftp $(default_kernel_addr) uImage.buffalo; tftp $(default_initrd_addr) initrd.buffalo; bootm $(default_kernel_addr) $(default_initrd_addr)'
Marvell>>boot


すると

Using egiga0 device
TFTP from server 192.168.**.**; our IP address is 192.168.**.**
Filename 'uImage.buffalo'.
Load address: 0x100000
Loading: *#################################################################
#################################################################
#################################################################
#################################################################
#################################################################
###############
done
(以下省略。ログインを促すプロンプトまでたどり着きます)


と起動されるはずです。

フラッシュブートとTFTPブートの際の挙動の違いを設定する項目は

def_tftp=tftp $(default_kernel_addr) $(kernel); tftp $(default_initrd_addr) $(initrd); setenv bootargs $(bootargs_base) $(bootargs_root) rw initrd=0x02000040,20M panic=5 $(buffalo_ver); bootm $(default_kernel_addr) $(default_initrd_addr)



bootcmd=nboot $(default_kernel_addr) $(uImage_block) $(uImage_offset); bootm $(default_kernel_addr)


です。
てか、だと思います(笑)。

上が「TFTPブートの時はこうやりな」って命令、下が「普段のブートはこうしな」って命令。

これらが

printenv


と入力して正しく表示されなければ、ブートできない可能性大です。
そんな時は、初期値例を見ながら

setenv [イコールの左辺] [イコールの右辺]


と入力。
間違いがなければ

saveenv


として、環境を保存。
あと私の場合、初期値例ではあった

kernel=uImage.buffalo
initrd=initrd.buffalo


がprintenvで表示されませんでした。
なので、

setenv kernel uImage.buffalo
setenv initrd initrd.buffalo
saveenv


と追加。

ホント、やってみればめちゃめちゃ単純な理由でした。なぜこうなったかはわかりませんけど。
「U-bootコマンド解説」によると

boot-デフォルトのブートコマンドの実行
bootd環境変数bootcmdは、電源投入時に自動で実行すべきコマンドが保存されています。bootコマンドはこれを実行するコマンドです。


とあります。まさに今回の「フラッシュブートの設定」に関係する内容です。

def_tftpは実はよくわかりません(笑)。
先ほどの「U-bootコマンド解説」にも説明がないのですが、コマンドの文法や内容をよく見ると、

tftp $(default_kernel_addr) $(kernel)
→tftpbootの省略形。tftpでブートする際の「カーネルのアドレス」と「カーネル名」を指示しメモリ上に読み込む


tftp $(default_initrd_addr) $(initrd)
→同上。initrdのアドレスと名前を指示しメモリ上に読み込む


setenv bootargs $(bootargs_base) $(bootargs_root) rw initrd=0x02000040,20M panic=5 $(buffalo_ver)
→ここがいまだによくわかりません。このbootargsは「OSに渡す起動パラメータを設定」するコマンドらしいのですが・・ちょっと勉強します


bootm $(default_kernel_addr) $(default_initrd_addr)
→OSとアプリケーションの起動。メモリ上に読み込まれたカーネルとinitrdを起動します


ということではないでしょうか。
それぞれの命令を順番に処理させるために「;」でつなげたHush文法というものだそうです。

ひとまず、私の玄箱くんは元通りになりました!

でもせっかくなので製品仕様書の内容を全部把握できるくらい玄箱のことを知ってみようかと思います。
別窓 | 日記のようなもの | コメント:14 | トラックバック:0
∧top | under∨

U-boot研究記(2)

そもそもU-bootとは何なのか。

またもやWikipediaで調べると

Das U-Bootは、複数のアーキテクチャに対応したブートローダである。GPLのライセンスの元でリリースされている。


とのこと。「Das」をつけるのが正式なんだろうか。

さて今度は「ブートローダ」。

ブート(またはブートストラップ、boot、bootstrap)は、コンピュータシステムの電源を入れたときにオペレーティングシステムを起動するまでの処理の流れをいう。また、ブートローダ(boot loader)とは、ブート処理を行うソフトウェアを意味する。


ふむふむ。さすがにこれは何となくわかっていたが・・。

そこで、いろいろ「Linuxの起動までの流れ」てなサイトを探したんですが見つかりません。
ただ、日経Linuxの「自分で作るLinux OS」という書籍に「GNU GRUBによるLinuxの起動」というページを見つけたのでメモ。
U-bootにも当てはまるかどうかは不明です(笑)。

1.カーネルの読み込み
Linuxを起動するためにカーネル・イメージをメモリー上に読み込む。カーネル・イメージはbzipやgzipで圧縮されたファイルである。

2.initrdを読み込み
カーネル・イメージを読み込んだら、次にinitrdファイルを読み込む。initrdファイルは、Linuxが起動するときに必要なモジュール(ドライバ)や起動スクリプトを含んだファイルである。通常gzipで圧縮されており、カーネル・イメージをメモリー上に読み込んだ後、カーネル起動時にメモリー上にファイル・システムとして展開される。

3.カーネルの起動
読み込みが完了したら、GRUBによってカーネルが起動される。カーネルは自分自身とinitrdファイルを展開して、初期化処理を実施する。その際、展開されたinitrdファイルを起動時に用いるルート・ファイル・システムをしてマウントする。

4.linuxrcスクリプトの実行
initrdファイルには「linuxrc」というスクリプトが含まれている。このlinuxrcスクリプトにはルート・ファイル・システムをマウントする際に必要なドライバをカーネルに読み込んでから、実際のルート・ファイル・システムをマウントするための処理が記述されている。(後略)

5.初期化プロセスの実行
実際のルート・ファイル・システムをマウントしたら、今度はルート・ファイル・システム内にあるファイルを用いて初期化プロセスが実行される。この初期化プロセスが完了すれば、Linuxが使えるようになる。


とのこと。initrdは「イニシャル・ラム・ディスク」と読むらしい。
まずはメモリ上にカーネルを読み込んで、次にinitrdファイルを読み込む。そしてその2つを起動する。
玄箱で言うと

1.uImage.buffaloをメモリ上に読み込む
2.initrd.buffaloをメモリ上に読み込む
3.uImage.buffaloを起動させ、uImage.buffaloがinitrd.buffaloを展開する


ということか。

ちなみにここでU-bootの環境変数の初期値例が入手できる。
これと、先日入手した「U-bootコマンド集」(→参照から知った「printenv」を使って、現在の私の玄箱U-bootがどのような状態なのか知ることができた。

問題となっているのは

default_kernel_addr
default_initrd_addr
kernel
initrd


の4つでしょうか。
しかしprintenvで見るかぎり、初期値例としての
default_kernel_addr=0x00100000
default_initrd_addr=0x02000000
kernel=uImage.buffalo
initrd=initrd.buffalo
と何ら変わりはありません。
しかし、tftpでブートした時には「File not found」と言われ、<自分のIPアドレス>.imgをカーネルとして読み込もうとし、勝手に失敗してくれています。

なるほど。

フラッシュブートの場合、ちゃんとこの環境変数を認識している、と。
しかしどこかに「tftpブートの時はこれを読み込め」というコマンドがあるはず。
そしてその設定がuImage.buffaloになっていないのか。
だからフラッシュブートには成功してtftpブートには失敗するんだな・・。

あ、ちなみにsetenvでserveripとipaddrを変更してsaveenvしておくと、玄人志向のように直接PCと玄箱をLANケーブルでつなぐ必要もなく便利です。
ルーター側でIPを問題なくスタティックに192.168.11.1と192.168.11.150を払いだせば結局一緒ですが、後々のことを考えてもこちらの方がはるかに楽な作業でしょう(笑)。

(例)PCを192.168.1.5、玄箱を192.168.1.10とした場合
setenv serverip 192.168.1.5
setenv ipaddr 192.168.1.10
saveenv


別窓 | memo:ブート方法 | コメント:1 | トラックバック:0
∧top | under∨

tftp

まずはtftpを調べる。
Wikipediaに説明があった。

Trivial File Transfer Protocol (TFTP) は、UDPを用いてコンピュータ間でファイルを転送するためのプロトコルである。FTPに比べて単純なプロトコルであり、認証機能が無いためにユーザ名やパスワードを必要としない。
主に、ディスクレスマシンがブートする際、必要なファイルをネットワークから取得する際に利用されるプロトコルである。


なるほど。

・・・で?(笑)

まぁとりあえず「ファイルを送受信するためのシステム」ということでしょう。
おそらく。

玄箱の電源を入れてまず最初に立ち上がるU-bootというものが一体何者なのか、これを理解しないと・・・。

またもや調べものか・・。

玄人志向が例としてあげたtftpソフトは「Poor TFTP Server 32」。
このソフトも説明が少なく、素人の私には難しかったです、はい。

まず「イメージファイルをtftpサーバ転送用rootディレクトリへ設置してください」と。

それどこ?

いろいろ探し回って見つけたサイトがここ
ここの「玄箱PROパッチ適用」という項目に

* TFTPサーバー Poor TFTP Server for WIN32をダウンロードして展開
* ptftp32.exeを実行
* Timeoutは60秒に設定しておく
* 同じディレクトリにinitrd.buffaloとuImage.buffaloを配置しておく
* シリアルコンソールからリブートする


との一文が。

なるほど。ptftp32.exeがあるフォルダが「tftpサーバ転送用rootディレクトリ」なんだな。
はぁ・・こんなことから調べないといけないなんて・・。

ひとまず、そんなこんなでtftpからのブートも無事終了していました。最初はね。
今は動かない状態ですけど(笑)。

でもちゃんとそのディレクトリにはこの2つのファイルを入れているんですけどね…。
それでも「File not found」ということは、やはり「tftpからブートする場合のカーネルもuImage.buffalo」という指示がU-bootに伝わっていない、ということです。

さて、tftpは理解したことにしよう。

いや、いいんです。
別窓 | 日記のようなもの | コメント:0 | トラックバック:0
∧top | under∨

U-boot研究記(1)

というわけで、ひとまず玄箱はほっといて(笑)。

U-bootのコマンドの詳細が知りたいと思いググる。

お、いいとこある。

U-boot-jpというサイトがあった。
このサイトに「U-bootコマンド解説」のPDFが置いてあった。直リンはここ

むむ・・。これはすごく有益かも!
何を書いているのかまだよくわからないが(当たり前だ(笑))、これは相当使えそうな気がする。
なのでプリントアウトしたものをきれいに製本してみました(笑)。

パラパラめくっていると「tftpboot-TFTPプロトコルでファイルをダウンロード」という項目を発見。
今の私にものすごく有益な情報か?!と思い読んでみる。

・・・。

・・。

わかんね(笑)。


ただ、ひとつ「ん?」ということが。

filename:ロードするファイルです。
省略された場合は、環境変数bootfileの値、環境変数bootfileが設定されていない場合、<自分のIPアドレス>.imgを使います。
<自分のIPアドレス>の部分は、IPアドレスを16進で表記して、並べたものです。例えば、192.168.3.202を16進で表記すると、C0.A8.03.CAとなりますので、"CA03A8C0.img"を探しに行きます。


ここです。
この"CA03A8C0.img"ってなんとなく見覚えが・・。


そう、ウチの玄箱くん、960BA8C0.imgってファイルが見つからないって騒いでいました。(→参照

そっか、960BA8C0.imgって16進数で表現されたものだったんだ。
これを10進数に戻すと「192.168.11.150」。
なるほど。仕様書26ページにもあった「DHCPサーバより取得できない場合」のIPアドレスそのものですね。てかこりゃ当然ですよね(笑)。

問題は、960BA8C0.imgってファイルがなぜ呼び出されるハメになったのか、ってこと。
つまり、tftpbootの定義によると、「なにもブートするファイルを指定してない場合」にこの<自分のIPアドレス>.imgファイルは呼びつけられる。

しかし今呼び出されなければいけないのはuImage.buffaloのはず。どこかでuImage.buffaloという設定がU-bootに伝わっていない、ということなんでしょうねかね…。

んー。

ちょっとづつ絞れてきた気もするが、もっと根本的な難問があったことをすっかり忘れてた・・。


TFTPってそもそも何さ?
別窓 | memo:ブート方法 | コメント:4 | トラックバック:0
∧top | under∨

玄箱Proとの会話

どうやら、U-bootでのフラッシュブートの際の「setenv」の内容にスペルミスがあったらしく、再度トライしたらすんなりフラッシュブートに戻りました。
製品仕様書の27ページ「Appendix A:u-boot環境変数設定例」の「A.1.uImage(nand /dev/mtdblock1)、rootfs(nand /dev/mtdblock2)の場合のブート設定」の通りにU-bootに命令します。
ちなみに、この「U-bootへの命令」は

Orion1 CPU = Low

=== KURO U-Boot. ===
** LOADER **
** KUROBOX BOARD: KURO_BOX LE (CFG_ENV_ADDR=fffff000)


U-Boot 1.1.1 (Apr 10 2007 - 18:10:08) Marvell version: 1.12.1 - TINY

DRAM CS[0] base 0x00000000 size 128MB
DRAM Total size 128MB
[256kB@fffc0000] Flash: 256 kB
Addresses 20M - 0M are saved for the U-Boot usage.
Mem malloc Initialization (20M - 16M): Done
NAND: 256 MB

Soc: 88F5182 A2
CPU: ARM926 (Rev 0) running @ 500Mhz
Orion 1 streaming disabled
SysClock = 250Mhz , TClock = 166Mhz


USB 0: host mode
USB 1: host mode
PCI 0: PCI Express Root Complex Interface
PCI 1: Conventional PCI, speed = 33000000
Net: egiga0 [PRIME]
Using 88E1118 phy
hit any key to switch tftp boot.
Hit any key to stop autoboot:
<<system_bootend>>
Hit any key to stop autoboot:←ここ



の、「ここ」と書いた2回目の「Hit any key to..」で何かキーを押すと

Marvell>>


と出ます。ここから「U-bootへの命令」を行います。

入力した命令は

Marvell>>setenv default_kernel_addr 0x00100000
Marvell>>setenv bootargs_base console=ttyS0,115200
Marvell>>setenv bootargs_root root=/dev/mtdblock2 rw
Marvell>>setenv bootargs $(bootargs_base) $(bootargs_root) $(buffalo_ver)
Marvell>>setenv uImage_block 0
Marvell>>setenv uImage_offset 0x00020000
Marvell>>setenv bootcmd 'nboot $(default_kernel_addr) $(uImage_block) $(uImage_offset); bootm $(default_kernel_addr)'


です。
はっきり言って、何を言ってるのかさっぱりわかりませんが、これは仕様書見ながら入力します(笑)
最後に

Marvell>>boot


と入力すればブート処理が始まりました。

さて、無事にフラッシュブートができましたので、おかしくなってしまったウチの玄箱を工場出荷状態に戻してやりましょう。

しかし、玄人志向のここで紹介している方法では工場出荷状態に戻りませんでした。

ひとまずフラッシュブートはしますので以前ほど緊迫感はありませんが(笑)

さて、ウチの玄箱が言うことには・・

*** Warning: no boot file name; using '960BA8C0.img'
Using egiga0 device
TFTP from server 192.168.11.1; our IP address is 192.168.11.150
Filename '960BA8C0.img'.
Load address: 0x0
Loading: *
TFTP error: 'File not found.' (1)
Starting again


英語はかなり苦手ですが、つまりは「File not found」なワケでしょう。
直前に「Filename '960BA8C0.img'」という一文・・。要するに、この「960BA8C0.img」というファイルが見つからない、と言ってるのでしょう。

あれ?
でも今必要なのはuImage.buffaloじゃなかったっけ?


いやはっきり言って相当難解です。

U-bootそのものの理解を深めなければ、根本的な解決にはならない気もしてきました。

形式的にDebian化を急いでも将来必ず困ることになると判断し、これから「玄箱Pro」そのものの研究を始めます!
別窓 | 日記のようなもの | コメント:1 | トラックバック:1
∧top | under∨
| 玄箱Pro、直します。 |
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。