Armadilloフォーラム

boot.scrの作成について

moto

2017年8月4日 11時45分

お世話になっております。
田中と申します。

Armadillo-X1のブートローダーのブートスクリプトを作成したいと考えております。
u-bootのブートスクリプトについて調べていくと、boot.scrを作成することで実行できると言うことで、
mkimageコマンドからスクリプトを作成して実行が出来るところまで確認しましたが、
コンパイルオプションの -aと-eの設定は「0」で問題ないでしょうか?

以下はコンパイルコマンドになります。
mkimage -A arm -O linux -T script -C none -a 0 -e 0 -n "armadillo-x1" -d boot.txt boot.scr

コンパイルをした結果は以下の通りです。
Image Name: armadillo-x1
Created: Fri Aug 4 11:43:01 2017
Image Type: ARM Linux Script (uncompressed)
Data Size: 326 Bytes = 0.32 kB = 0.00 MB
Load Address: 00000000
Entry Point: 00000000
Contents:
Image 0: 318 Bytes = 0.31 kB = 0.00 MB

おそらく、-aがLoadAddress、-eがEntry Pointに当たると考えておりますが。
Armadillo-x1でLoadAddressとEntryPointの指定が有りましたら教えていただけないでしょうか?

コメント

at_koseki

2017年8月7日 10時12分

古関です。

Load Address等は環境変数で持っている設定値で動作しますので、
"-a"、 "-e" 両者とも0のままで問題ありません。

また、作成したboot.scrはuImageとarmadillo-x1.dtbを配置している
パーティション内に配置してください。

なお、当社でリリースしております、IoTゲートウェイ管理クラウド「node-eye」に必要な
node-eyeパッケージをインストールすると、node-eye専用のboot.scrに上書されますのでご注意ください。

もし、可能であれば教えていただきたいのですが、
U-Bootスクリプトを使用する目的は何でしょうか?

複数の個体に、共通のsetenv値を設定することでしょうか。

よろしくおねがいします。

moto

2017年8月7日 17時00分

古関 様

田中です。

ありがとうございます。
起動時にGPIOの状態を取得して、保守モードでの起動などを考えております。

具体的には、mmcrootやimage、overlayの設定を変更する予定です。

ただ、boot.scrを作成して、uImageなどと同じパーティションに配置し、
bootコマンドを実行するとboot.scrが実行されて
カーネルなどのロードされないため、自作したスクリプトに加えて、
ubootのinclude/configs/x1.h内の200行目当たりからの、
ブートコマンドも加えて実行しております。

スクリプトの実行に関して注意点などございましたら教えていただけると幸いです。

どうぞよろしくお願い致します。

at_koseki

2017年8月10日 13時39分

古関です。

> 起動時にGPIOの状態を取得して、保守モードでの起動などを考えております。
> 具体的には、mmcrootやimage、overlayの設定を変更する予定です。

kernel(uImage)を間違えて消してしまったり、ファイルを破壊して起動できなくなった時に、
特定のスイッチやジャンパピン設定をすると、GPIO経由でU-Bootスクリプトがそれを認識して、
専用のsetenv値を反映したり、保守用の別kernel(uImage)から起動する、といった感じですかね。

U-Bootスクリプトで技術的に可能と思います。

> スクリプトの実行に関して注意点などございましたら教えていただけると幸いです。

boot.scrは、eMMC/SDにある第1パーティション(FAT)からロードしようとします。
それに失敗すると第3パーティション(FAT)からロードしようとします。

ファイルの破損等を気にされるなら、
第3パーティションをFATでフォーマットして
そこに同じboot.scrを配置したほうが安全かと思います。

もし保守用の別kernel(uImage)を用意するなら
これも第3パーティションに保存したほうが安全かもしれません。

また、U-Bootは以下のようなメモリマップで
uImage、dtb、initrdを配置します。
これを壊すと起動しなくなりますのでご注意ください。

| start addr | usage | size |
|-------------+--------+------|
| 0x8800 0000 | uImage | 120M |
| 0x8F00 0000 | fdt | 2M |
| 0x8F20 0000 | initrd | 14M |

よろしくおねがいします。

moto

2017年8月22日 9時06分

古関 様

田中です。

ありがとうございます。
第3パーティションにカーネルイメージを配置して
保守モードの実現するように構築してみたいと思います。