y.nakamura
2017年10月30日 3時27分
中村です。
Armadillo-IoT G3, G3L, X1 のQSPIブートローダ(U-Boot)の環境変数を
eMMCで起動しているLinuxから変更することはできるのでしょうか?
G3Lのケースをあけずに(シリアルコンソールは接続せずUSBメモリ使って)、
eMMCのルートファイルシステムやLinuxカーネルを一括で書き換える
ことはできないか?と、情報をさがしています。
USBメモリ起動によるMMCの書き換えについては、
このあたり↓を参考にしようとしています。
簡易的なインストールディスクイメージの作成方法
https://users.atmark-techno.com/blog/1913/2426
USBメモリにルートファイルシステムを構築する
https://users.atmark-techno.com/blog/53/2764
USBメモリを使用してeMMCのLinuxカーネル、ルートファイルシステムを更新する
https://users.atmark-techno.com/blog/53/2765
USBメモリで複数の機器に効率よく特定のLinuxカーネル、ルートファイルシステムを書きこむ方法
https://users.atmark-techno.com/blog/53/2802
--
なかむら
コメント
y.nakamura
中村です。
> OpenWrtであれば、uboot-envtoolsというツールがこれに該当します。ソース
> の確認は行っていないので何とも言えませんが、これが移植できれば簡単に操
> 作可能と思います。
情報、ありがとうございます。
調べてみます。
> 最終的な動作イメージをもう少し教えていただけますか?
>
> 「一括で書き換え」と「環境変数の変更」が繋がりません。
開発者ブログの
>> USBメモリを使用してeMMCのLinuxカーネル、ルートファイルシステムを更新する
>> https://users.atmark-techno.com/blog/53/2765
の記事に、デバッグシリアルコンソールのU-Bootのプロンプトで
=> setenv mmcroot /dev/sda1 rootwait rw
としてUSBメモリのルートファイルシステムから起動し、
eMMC上のLinuxカーネルとルートファイルシステムを更新する方法を
説明しています。
このブログのページではUSBメモリで起動した後、
手動で書き換えを行っていますが、別の記事
>> 簡易的なインストールディスクイメージの作成方法
>> https://users.atmark-techno.com/blog/1913/2426
にスクリプトを使った自動化(一括書き換え)の方法が紹介されています。
このようなUSBメモリを用意して装着後、
U-BootのプロンプトではなくLinuxからU-Bootの環境変数を
mmcroot=/dev/sda1 rootwait rw
となるように設定をしてrebootすれば、USBメモリから起動して、
自動的に(一括で)Linuxカーネルとルートファイルシステムを
書き換えることができるのではないかと考えました。
で、USB起動のインストールスクリプトの最後で、
mmcroot=/dev/mmcblk2p2 rootwait rw
となるように設定して、そのスクリプトでrebootもしてしまえば、
次に自動再起動したときには更新後のシステムになっている、と。
--
なかむら
at_mizo
溝渕です。
ご確認ありがとうございます。
ご教示いただいたように、「USBメモリが接続されていたら、USBメモリ内のイ
メージでオンボードROMを書き換える」という用途であれば、udevを使った実
装が考えられます。
USB memoryがaddされたタイミングで、インストールスクリプトを実行し、USB
メモリ内のrootfsにchrootして、USBメモリ内のイメージファイルを書き込む
ような構成はいかがでしょうか。
同一個体で何度も同一イメージをインストールするのを防ぐには、シリアル番
号等のユニークな情報をUSBメモリに保持しておくなどの実装が考えられます。
root@armadillo:~# cat /proc/cpuinfo | grep Serial
Serial : 2148
y.nakamura
中村です。
お返事、ありがとうございます。
> メージでオンボードROMを書き換える」という用途であれば、udevを使った実
> 装が考えられます。
udevによる「USBメモリを装着したら・・・」というような方法は考えていません。
ですので、
> 同一個体で何度も同一イメージをインストールするのを防ぐには、シリアル番
も、必要ありません。
(udevも含めて)どうやって書き換え処理を起動させるかの問題ではなく、
どうやってeMMCのDebianルートファイルシステムを簡単に(ケースをあけたり、
シリアルコンソールをつないだりすることなく)書き換えできるか、です。
> メモリ内のrootfsにchrootして、USBメモリ内のイメージファイルを書き込む
USBメモリにchrootしてeMMCのルートファイルシステムの書き換えが
できるのなら、元の質問の「U-Bootの環境変数を・・・・」は必要ありませんので、
質問を取り消して、それを使おうかと思いますが・・・、
そうだとすると(chrootでOKだとすると)、マニュアルの
6.1.4.2. ルートファイルシステムの書き換え
https://manual.atmark-techno.com/armadillo-iot-g3l/armadillo-iotg-g3l_p…
の次の記述は、必須ではないということでよろしいでしょうか?
1. eMMC上のルートファイルシステムを書き換えるには、SDブートを行う必要があります。 必ずSDブートで起動した事を確認の上、以降の手順を実施してください。・・・
--
なかむら
at_mizo
溝渕です。
> USBメモリにchrootしてeMMCのルートファイルシステムの書き換えが
> できるのなら、元の質問の「U-Bootの環境変数を・・・・」は必要ありませんので、
> 質問を取り消して、それを使おうかと思いますが・・・、
やってみたところ、eMMCから起動しているプロセスが邪魔をしてうまくいきません...。
mount /dev/mmcblk2p2 /mnt
cd /mnt
unshare --mount-proc=/
pivot_root . old-root/
chroot .
mount -o remount -t proc proc /proc
/etc/init.d/rcS
chrootした先からランレベルの変更が簡単にできなさそうで、
rebootを除く終了スクリプトの実行 -> 起動処理
を実行できませんでした。
そのため、まずuboot-envtoolsの利用をご検討ください。
> そうだとすると(chrootでOKだとすると)、マニュアルの
> 6.1.4.2. ルートファイルシステムの書き換え
> https://manual.atmark-techno.com/armadillo-iot-g3l/armadillo-iotg-g3l_p…
> の次の記述は、必須ではないということでよろしいでしょうか?
>
> 1. eMMC上のルートファイルシステムを書き換えるには、SDブートを行う必要があります。 > 必ずSDブートで起動した事を確認の上、以降の手順を実施してください。・・・ >
上記、正しくは、「eMMC上のルートファイルシステムを書き換えるには、
rootfsがeMMCであってはいけません。」となります。マニュアルでは、rootfs
の配置デバイスがeMMC or SDなので上記のような記載となってしまっています。
rootfsがUSBメモリやNFSサーバ上にあっても、eMMCを書き換えることは可能で
す。
混乱を与えてしまい申し訳ございません。
y.nakamura
中村です。
> やってみたところ、eMMCから起動しているプロセスが邪魔をしてうまくいきません...。
実際のテストまでしていただき、ありがとうございます。
> そのため、まずuboot-envtoolsの利用をご検討ください。
そうします。
> 上記、正しくは、「eMMC上のルートファイルシステムを書き換えるには、
> rootfsがeMMCであってはいけません。」となります。マニュアルでは、rootfs
> の配置デバイスがeMMC or SDなので上記のような記載となってしまっています。
>
> rootfsがUSBメモリやNFSサーバ上にあっても、eMMCを書き換えることは可能で
> す。
先ほどの投稿ではマニュアルのだけ引用しましたが、
このあたりのこと(USBメモリ上でも...)は、最初の投稿で書いておいた
>>USBメモリを使用してeMMCのLinuxカーネル、ルートファイルシステムを更新する
>>https://users.atmark-techno.com/blog/53/2765
の記事に
・・・インストールディスクを使用する方法では、SDカードを使用する必要がありますが、 なんらかの理由によりSDカードを使用せずUSBメモリを使用したい場合があるかと思います。 そのため、ここではUSBメモリを使用して、eMMCのLinuxカーネル、ルートファイルシステムを 更新する方法について紹介します。
との説明がありましたので、承知しておりました。
というか・・・、このブログの記事を見つけて、
「USBメモリから起動してインストールできるなら、ケース開けないでもなんとかなるかな?」
と思って、今回の質問になりました。
> 混乱を与えてしまい申し訳ございません。
いえいえ・・・
どうもありがとうございました。
--
なかむら
y.nakamura
中村です。
教えていただいたuboot-envtoolsはまだ試してませんが、
アットマークテクノat_yuma.arakawaさんのブロクで、
こんなのを見つけました。
最近の記事のようです。
Armadillo-X1,Armadillo-IoT G3/G3L: U-Bootのデフォルトのパラメータ設定を変更する
https://users.atmark-techno.com/blog/1913/2894
ブートローダーはLinuxから書き換えできますから、
この方法でも私がやりたかったことが実現できそうです。
--
なかむら
y.nakamura
中村です。
少し前(去年の11/14)の自分の投稿への自己レスです。
(自分のメモみたいなものなので、この投稿へのお返事は不要です)
> アットマークテクノat_yuma.arakawaさんのブロクで、
> こんなのを見つけました。
> 最近の記事のようです。
>
> Armadillo-X1,Armadillo-IoT G3/G3L: U-Bootのデフォルトのパラメータ設定を変更する
> https://users.atmark-techno.com/blog/1913/2894
>
> ブートローダーはLinuxから書き換えできますから、
> この方法でも私がやりたかったことが実現できそうです。
この14日の投稿のあと、ArmadilloブログやHowToに使えそうな記事がありました。
11/15の記事
Armadillo-X1, Armadillo-IoT G3/G3L: U-Bootブートスクリプト(boot.scr)の使い方
https://users.atmark-techno.com/blog/6938/2906
https://armadillo.atmark-techno.com/howto/u-boot-script
11/24の記事
Armadillo-IoT G3/G3L: JP1を設定せずにSDカード内のカーネルを起動する方法
https://users.atmark-techno.com/blog/7370/2918
この記事だけでは、boot.scrがイマイチ理解しきれてませんが、
このあたりの方法も使えそうです。
元々の私の質問を書いた理由は、
G3Lでケースを開けずに(SDカードを使わずシリアルコンソールも使わず)、
USBメモリを使ってエンドユーザにルートファイルシステム(eMMC)を
書き換えてもらう方法を探している、というものでした。
--
なかむら
at_koseki
中村様
古関です。
> 元々の私の質問を書いた理由は、
> G3Lでケースを開けずに(SDカードを使わずシリアルコンソールも使わず)、
> USBメモリを使ってエンドユーザにルートファイルシステム(eMMC)を
> 書き換えてもらう方法を探している、というものでした。
次のhowtoで、USBメモリにあるkernel/rootfsから起動する方法を紹介しています。
USBメモリを使ったイメージの書き換えは、これで達成できると思います。
https://armadillo.atmark-techno.com/howto/linux-kernel-usbboot
G3/G3Lでインストールディスクを動作させるには、
ケースを空けてJPを接続する必要があり手間なのと、
特に、Armadillo-X1では、SDコネクタが標準搭載されていないにも関わらず、
インストールディスクがSD起動という非常に使いにくい状況です。
それを補完する目的で、先月このhowtoを公開しました。
y.nakamura
中村です。
古関さん、
> 次のhowtoで、USBメモリにあるkernel/rootfsから起動する方法を紹介しています。
> USBメモリを使ったイメージの書き換えは、これで達成できると思います。
> https://armadillo.atmark-techno.com/howto/linux-kernel-usbboot
追加の情報提供、どうもありがとうございます。
--
なかむら
y.nakamura
中村です。
1年以上も前の質問でになりますが、次のようなものがありました。
私の質問:
> Armadillo-IoT G3, G3L, X1 のQSPIブートローダ(U-Boot)の環境変数を
> 起動しているLinuxから変更することはできるのでしょうか?
これに対して
> > OpenWrtであれば、uboot-envtoolsというツールがこれに該当します。ソース
> > の確認は行っていないので何とも言えませんが、これが移植できれば簡単に操
> > 作可能と思います。
というお返事をいただき、
> 情報、ありがとうございます。
> 調べてみます。
と書いていたのですが、必要がなくなったこともあり、
結局自分では調べていませんでした。
今日別の調べものをしていてたまたま、その後(2018/06/26)に書かれた
at_itoさんのブログの次の記事を見つけましたので、
このスレッドに張り付けておきます。
[Linux動作中に(SPIフラッシュに書かれた)U-Bootのパラメータを確認、変更する方法]
https://users.atmark-techno.com/blog/53/3323
--
なかむら
at_mizo
2017年10月30日 9時31分
溝渕です。
> Armadillo-IoT G3, G3L, X1 のQSPIブートローダ(U-Boot)の環境変数を
> eMMCで起動しているLinuxから変更することはできるのでしょうか?
上記を満たすユーザーインターフェースは用意していません。
U-Bootの環境変数を編集するためには、そのフォーマットを知っているドライ
バまたはアプリが必要になると思います。
OpenWrtであれば、uboot-envtoolsというツールがこれに該当します。ソース
の確認は行っていないので何とも言えませんが、これが移植できれば簡単に操
作可能と思います。
> G3Lのケースをあけずに(シリアルコンソールは接続せずUSBメモリ使って)、
> eMMCのルートファイルシステムやLinuxカーネルを一括で書き換える
> ことはできないか?と、情報をさがしています。
最終的な動作イメージをもう少し教えていただけますか?
「一括で書き換え」と「環境変数の変更」が繋がりません。
# 想像力不足で申し訳ございません。