2005年02月19日 16:46 by BAK

組み込み Linux で欠かせないのはブートローダの存在です.

メジャーなところでは
・RedBoot
・Das U-boot
とかあるようです.

・ブートローダと格闘した記録
・ブートローダに対する愚痴
・既存のブートローダは気に入らんので自分で書き下ろしたぞ

など,どうぞ.

1: BAK : 2005-03-09 13:12
Linux でのブートローダの機能としては,最低限

1.(S)DRAM の初期化
 DRAM を DRAM として使用するには,その SoC/ボード固有の呪文を唱える必要がある場合がほとんどです.

2.各種リソースの初期化
 Linux カーネル側で初期化してくれない各種リソースの初期化.
 Linux 側でも初期化はするのだけど,ブートシーケンス上必要なリソースの初期化.

3.カーネルのロード
 フラッシュ ROM 上から memcpy() する
 or ディスクから読みだす
 or bootp + tftp でネットワークブート

3.カーネルのエントリへとジャンプ
 カーネルコマンドラインはハードコーディング or ブートローダから渡すか.
 渡し方は CPU アーキテクチャによってまちまち.

これで(圧縮がかかっていない場合は) arch/アーキテクチャ/kernel/head.S へ.
めでたく Linux カーネルの世界へと移行します.


と,まぁ,こんな程度の処理なので,既存のブートローダを移植するか新たに書き起こすか,というのは結構微妙なところだったりします.
2: 口コミさん : 2005-03-11 10:18
> こんな程度の処理なので
たしかにこの程度の処理なんですけど、
ゼロから書くのは、かなり大変だと思いますよ。

>2.各種リソースの初期化
> Linux カーネル側で初期化してくれない各種リソースの初化.
こちらはむりにブートローダでやる必要がないことですけど、

> Linux 側でも初期化はするのだけど,ブートシーケンス上必要
>なリソースの初期化.
こちらは必ず必要なことですよね。

>3.カーネルのロード
> フラッシュ ROM 上から memcpy() する
これはたいしたことはないけど、

> or ディスクから読みだす
> or bootp + tftp でネットワークブート
この2つをゼロから実行するのはそこそこ骨がおれる作業だと
思います。
特にディスクから読み出す処理をゼロから書くのとか、
ネットワークの論理層や物理層の実装をゼロからとなると。。

ディスクから読み出す場合はどんなファイルシステムを
サポートするかもありますし。。

最低限(ROM/RAMを初期化してROMからカーネルをロードするだけ)
と割り切ってしまえば簡単なんでしょうけど。
まあこれは開発環境がどこまでそろっているか?にも因る部分
がありますよね。
3: 口コミさん : 2005-08-02 06:18
実は今度雑誌にブートローダ全般の解説を書く事になりました。RedBoot Das U-bootがやはり有名ですが、もっと広く基本的なところから扱おうと思っています。

全部答えられないかも知れませんが、質問や記事で解説して(あるいは取り上げて)欲しい欲しい事などがありましたら、よろしくお願いします。
4: BAK : 2005-08-09 00:29
> 実は今度雑誌にブートローダ全般の解説を書く事になりました。

奇遇ですね.私もです.
って,同じ雑誌かな,たぶん.
5: 口コミさん : 2005-08-09 06:05
> 奇遇ですね
> 同じ雑誌かな

そのようです。
私の場合は1章なので範囲が広く、絞り込む点や取り上げる話題など、書くのに結構苦労しています。それで募集してみたわけです。

宜しくお願いします。
6: 口コミさん : 2005-08-09 08:56
一般的な話になりますが、私がもっと雑誌で説明してほしかった点があります。これは記事の趣旨と違うかも知れませんが。

それは、CPUから見たアドレスとChip Selectの関係についてです。最初は、例えばアドレス0x0000-0000からBootと言ってもどのような状態がこのアドレスになるのかが最初理解しにくかったのでそのあたりの説明があると理解が深い気がします。後はNANDではなくNOR FLASHからブートする理由とかもあるとうれしいですね。最近はNANDでブートできるものも出てきてますけど。

世の中にはそのような理解を深められる良書があるのかも知れませんが、この事について知ってる事を前提に書かれている書籍が周りに多かったので最初理解するのに苦労しました。

ハードウェア屋から見たブートローダって感じになってしまいそうですが…。
7: 口コミさん : 2005-08-09 10:14
> これは記事の趣旨と違うかも知れませんが

いや、主旨とは違わないと思います。

どこまで私の力で説明できるかわかりませんが、大変参考になるので取り上げる方向で考えさせて頂きます。ありがとうございます。

確かにハードウェアとソフトウェアとの接続点とか、データシートの読み方、使い方を丁寧に説明してある文献は最近はあまり見かけません。大昔の8ビットマイコンの頃は、丁寧な解説も結構あったように思います。今は技術の進化と量に解説が間に合わないのかも。

Chip Selectなんかは、そういう意味で初心者がわかり難いトピックの例としては典型的ですね。
8: BAK : 2005-08-09 15:36
私は第2章です :)
ホントに「ブート」に限った話だと2〜3ページぐらいで終わってしまいそうなので,水増しに苦労してます.

> 後はNANDではなくNOR FLASHからブートする理由とかもあるとうれしいですね。

フラッシュ ROM については軽く触れるつもりではいます.
期待している内容とはちょっと違うと思いますが.

> 大昔の8ビットマイコンの頃は、丁寧な解説も結構あったように思います。今は技術の進化と量に解説が間に合わないのかも。

現在のボードだとブラックボックス化されていて解説しにくい,というのもあるのかもしれませんね.
*ChipSelect まわりにしても,アドレスデコーダが SoC のバスインターフェースに取り込まれていたり,外付けで実装するにしても PLD などで実装するでしょうし.

まぁ,ここらのおやくそくは基本的には大昔の 8bit マイコンと一緒なので,逆にそっちから入った方がわかりやすいのかもしれません.
9: 口コミさん : 2005-08-09 18:47
確かに最近は何でもSoCの風潮があって見通しが利きにくくなってますね。マイクロコードを流し込まないとまともに動かないとかはよく聞く話ですし。この辺りは自前でBoot周りを書く時に足かせになっています。

ChipSelect周りの処理も本当に理解したのは、自分がPLDなりFPGAなりでChipSelectを使用するデバイスを設計したときです。CPUの動きを理解をするにはCPUを作ってみるのが一番という言葉を聞いた事がありますが、そこまでしないにせよ簡単に動くデバイスを作って見るのが近道かも知れません。

今の自分であれば基本的な所は8bitマイコンから入った方が近道に感じますけど、当時は"やりたいことは違う"ともっと違う(難解な)勉強をしていたように思えます。その試行錯誤の行為自体は無駄にはなっていませんが、もうちょっと効率良くできたなぁとは思います。

身近にあるx86なPCでもBoot自体はBIOSのFlashがしているという事が分かればもっと組み込みも身近に感じられるかも知れませんね。

記事楽しみにしています。
10: 口コミさん : 2005-08-20 19:25
てむじんさん、BAKさん、ありがとうございます。

ちょっと担当分のページ数を勘違いしていてテコズりましたが、おかげ様で初稿を書き終えました。

> 最近は何でもSoCの風潮があって見通しが利きにくくなってますね

そうですね。OSを載せるぐらいの規模のCPUは機能が多すぎて、データシートを読んで理解する事が難しくなっています。かといってPICやAVR等の8bitマイコンの使い方は、簡単すぎてちょっと違うと思うし。

今回の執筆を経験して、今時のハードウェア回路を制御するとか、ブートする事について、アセンブラレベルで解説するような有用な情報や良書の必要性を改めて感じました。
11: BAK : 2005-08-21 05:34
「ハードウェアと回路設計」(ちょっと大げさなタイトルかも)というトピックを立ててみました.

バスインターフェースのあたりは,こちらで議論したほうがいいかな.
12: 口コミさん : 2005-08-21 09:51
みなさん、こんばんは。なかけんと申します。
私も、RedBootについて昨日書き終えたところです。
内容についてはまだ書けませんが、一部の人には少しは役立つ内容かと思います。みなさんが書かれているとおり、ブートローダと言っても範囲が広いですから大変ですね。
13: 口コミさん : 2005-08-21 20:02
はじめまして。
つい先日OS-9をSH4開発基板に移植しました。
OS-9は、corebootと言う、ブートローダーが
含まれています。
SDRAMのバースト設定が間違っていたために、
SDRAMに割当てていたスタックへのアクセスが
Read/Writeで、アドレスがずれてしまうと言う現象が
出ました。
最初、原因が分からずに、見なくても良い、ブートコードを
これでもか!ってぐらい見ました。
実際には、SH4のマニュアルで、デフォルト値が
間違って記述してある場所があって、デフォルトだから
設定しなくても大丈夫だろう。。。と思ったのが
間違いでした。
正確に言うと、デフォルト値に関して3箇所説明があって、
1箇所だけ間違っていました。そこを見てしまったのです。

この時、もう少しCPUなり、ブートなり理解していれば、
トラブルにもならずに、次に進めていたと思いました。
ブート付近の書籍は是非とも欲しいところです。

tomさん、なかけんさん、BAKさん、
書籍の名前、発売日を公開するには抵抗あるなら、
個人的ににメッセージを送っていただけるとうれしいです。
3人の方が執筆していると思いましたが、間違っていたら
ごめんなさい。
14: 口コミさん : 2005-08-21 20:22
> OS-9
懐かしい!SH4で動くのですか。

私は大昔の仕事でOS-9/68000をROMブートで動かしていました。ってどうやって開発していたのかは、あまり覚えていませんが。昔はcold.s/oだけで、ブートローダらしいものは無かったように記憶しています。OS-9はそれなりに進化しているんですね。

書籍は9月25日頃に発売になる雑誌です。こう書くとモロバレのような気がするので、問題あったら連絡ください...>出版者の方
15: 口コミさん : 2005-08-22 01:13
SH-4を使用したボード上に、WinCEのeboot(Ethernet Boot Loader)を
移植したことがあります。そのとき、SDRAM設定でおそらくtoshiさんと
同じミスをしまして、Read/Writeでアドレスがずれる現象に出会いました。
バーストのブロック単位で、1個ずれてしまうんですよね。

大規模CPUやPICやAVRの間として、アドレス線が普通に出ているH8辺りが
勉強にはわかりやすい気がします。

ブートローダはH/Wとの関わりが凄く強い部分なので、専門の書籍なんて
のが出てくれたら、是非とも読んでみたいと思います。
16: 口コミさん : 2005-08-28 04:40
今、発売中のインターフェース誌10月号を読んだ人は、次号予告のページでご存知だと思いますが...

インターフェース誌11月号(9月24日発売)の特集は、
「ファームウェア/IPL/ブートローダのしくみ」です。
17: 口コミさん : 2005-09-23 13:09
インターフェース誌11月号
特集「組み込みOS向けブートローダのしくみ」出ました。

http://www.cqpub.co.jp/interface/contents/2005/200511.htm

(なかなか苦労しました...)
18: 口コミさん : 2005-09-23 23:05
>tomさん
おつかれさまでした。やはり毎月買ってる雑誌のひとつでしたね(笑)

楽しみに拝見させて頂きます。
19: 口コミさん : 2005-09-24 01:41
てむぢんさん、

執筆に際してはアドバイスを頂きまして、ありがとうございます。

> やはり毎月買ってる雑誌のひとつ

いつもありがとうございます。(とは言っても私は年に1・2回程度しか書いてませんが)

私が担当した1章はオンラインで読めるのですが、BAKさんの2章、なかけんさんの4章、うちのスタッフが担当した6章などを始め、各章とも力作揃いです。
20: 口コミさん : 2005-10-11 09:40
こんにちは.

tomさん,BAKさん,なかけんさん,皆様が執筆されたIF2005年11号,いつも拝見しております.

私事なのですが,今年の頭にFPGAに内蔵されたPPC向けにRedbootを移植する必要があり,知人の協力を得て試行錯誤でなんとか完成して納品はして見ましたが...
いやぁ,あのときの苦労はもう繰り返したくない!という気持ちがあり,ブートローダの実装ひとつとっても私のようなド素人にはムリだと思いあきらめていました.
(一応納品物はRedhat-LINXU含め問題なく動いています).

ところが本誌を読んでみるとあぁ!ここで陥ったんだ!とか見るところ,学ぶところはいっぱいありましてあと半年早ければ・・・と思いましたが,11月号本誌を読んでみて,落ち着いてもう一度やり直して,身に着けようと思っています.

2005年11月号は読み応えがあって本当に助かります.

筆者の皆様に感謝!

サイト内検索