GENMAIボードでのカーネルの読み込みについて

Hiroです。

 

GENMAIボードを使用して、組み込みLinuxの研修を検討しております。

作業中にカーネルの置き場所に疑問を持ちましたので質問いたします。

 

release_note_J.txtを参考に、USBへuImazeとrza1-rskrza1.dtbをコピーし、

rootfs.tarとmodules.tarを展開したものをブート時に読み込んでいると思います。

実際の組み込み機器ではUSBを接続して起動することは考えづらいので

カーネル部分はフラッシュ等に書き込んで、ブート時にフラッシュから読み込むものだと考えております。

そこで疑問に思ったことは、USBにファイルとして書き込んでいるものをそのままフラッシュにダウンロードすることは

できないのではないかと思いました。

 

組み込み機器にカーネルを書き込む方法をご教示願いたく投稿しました。

以上、よろしくお願いします。

Parents
  • Hiroさん

    今回、お使いになっているGENMAI用Linuxは、English communityで公開されているRSKボード用Linuxと異なり、
    XIP(eXecute In Place)実行には、対応していませんから、

    GENMAI用Linuxカーネル(uImage)とデバイスツリーブロブ(rza1-rskrza1.dtb)は、ファイルを「そのまま」フラッシュ
    メモリに書き込んで使用するのが、最も簡単です。

    ここでは、SPIBSC のチャネル0、ポート0 に接続された S25FL512S を 1個のみ使用する場合を考えましょう。
    このシリアルフラッシュメモリには、既に、その先頭から u-boot 本体が書き込み済みであり、また、u-boot が
    環境変数を保存するために、その先頭からのオフセットで 0x80000 から 0x40000 バイト分、使用しているはずです。

    ですから、現状、シリアルフラッシュメモリの先頭からのオフセットで 0x000C0000 以降が空いています。
    ここに、デバイスツリーブロブ、Linux カーネル保存用に、それぞれ、256KB、7168KB を予約しましょう。
    すると、現在までのシリアルフラッシュメモリのマップは、次のようになります。

    0x00000000~0x0007FFFF ( 512KB) u-boot 本体
    0x00080000~0x000BFFFF ( 256KB) u-boot が環境変数保存用に予約
    0x000C0000~0x000FFFFF ( 256KB) デバイスツリーブロブを保存
    0x00100000~0x006FFFFF (7168KB) Linux カーネルを保存

    「適当なツール」を使って、それぞれの領域の先頭から、uImage と rza1-rskrza1.dtb を書き込みます。
    念のためですが、例えば「デバイスツリーブロブをシリアルフラッシュメモリの先頭からのオフセット 0x000C0000 から書き込む」
    というのは、ICE などを使って書き込む場合には、「デバイスツリーブロブをアドレス 0x180C0000 から書き込む」
    ということですから、注意してください。

    起動する場合には、

    => setenv bootcmd run spiload \; bootm 0x0c000000 - 0x0bf00000
    => setenv bootargs console=ttySC2,115200 root=/dev/sda1 rw rootdelay=3 ignore_loglevel earlyprintk=sh-sci.2,115200
    => setenv spiload sf probe 0 \; cp.b 0x18100000 0x0c000000 0x700000 \; cp.b 0x180c0000 0x0bf00000 0x40000
    => saveenv

    上で「適当なツールを使って書き込みます」と書きましたが、必ずしも ICE を使わなくても良く、
    u-boot 自体で USB メモリから SDRAM にファイルを読み込み、u-boot の sf コマンドでシリアルフラッシュメモリに
    書き込んでも構いません。

    また、rootfs.tar や modules.tar を USB メモリに書き込むのではなく、Linux のループデバイス(loop device)を使用して、
    ファイルシステムイメージをファイルとして作成し、Linux カーネルの後ろの空き領域に書き込んで使うことも可能です。

    Hiroさんの工夫次第です。

  • ご回答ありがとうございます。

    uImazeと rza1-rskrza1.dtbはシリアルフラッシュに書き込めるであろうと考えていましたので
    ご回答内容のアドレスに書き込むことが出来ました。
    USBに展開したrootfs.tarとmodules.tarをどのようにしてファイルシステムとして
    実装させるかがまだ理解できておりません。

    当方の工夫次第とのことですので、もう少しLinuxのファイルシステムついて
    勉強をしてから、解決できない場合は再度、質問を上げさせていただきます。
    今回は、これで完結とさせていただきます。

    以上
Reply
  • ご回答ありがとうございます。

    uImazeと rza1-rskrza1.dtbはシリアルフラッシュに書き込めるであろうと考えていましたので
    ご回答内容のアドレスに書き込むことが出来ました。
    USBに展開したrootfs.tarとmodules.tarをどのようにしてファイルシステムとして
    実装させるかがまだ理解できておりません。

    当方の工夫次第とのことですので、もう少しLinuxのファイルシステムついて
    勉強をしてから、解決できない場合は再度、質問を上げさせていただきます。
    今回は、これで完結とさせていただきます。

    以上
Children
No Data