玄箱Pro、直します。

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

スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。
別窓 | スポンサー広告
∧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∨
<<ひとまず解決を優先 | 玄箱Pro、直します。 | tftp>>

この記事のコメント

FtJLVO http://www.90SGZoHdWfN8O69Bluk0u450TSMCkjf6.com
2012-08-12 Sun 14:20 | URL | john #vEk9ZIRs[ 内容変更]
∧top | under∨

コメントの投稿

 

管理者だけに閲覧
 

この記事のトラックバック

トラックバックURL

FC2ブログユーザー専用トラックバックURLはこちら
∧top | under∨
| 玄箱Pro、直します。 |
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。