2417360_ja-JP

キャンセル
次の結果を表示 
表示  限定  | 次の代わりに検索 
もしかして: 

2417360_ja-JP

2417360_ja-JP

LX2160ARDB SDカードブート、LSDK FitImage

こんにちは、


LSDK 21.08をインストールしましたが、atf、rcw、u-boot、ddr-phyフォルダは既に存在しているのに、なぜソースコードがその中に含まれておらず、各ソースコードをgit cloneする必要があるのでしょうか?

SDカードの完全なブートのために、以下のブロックに次のファイルを配置しました。

1. bl2_sd.pbl - 0x8

2. fip.bin - 0x800

3. fip_ddr_all.bin - 0x4000

4. mc_lx2160a_10.40.0.itb - 0x5000

5. dpc-usxgmii.dtb - 0x7000

6. fitImage--5.15.71+git0+95448dd0dc-r0-lx2160ardb-rev2-20260310070404.bin - 0x8000

SDカード(64GB)に以下のようにパーティションを作成しました。

1. /dev/mmcblk0p1 - セクター409600~セクター42352640

2. /dev/mmcblk0p2 - セクター42352640からセクター121534463

u-boot で bootargs コマンドを使用して、rootfs "fsl-image-networking-full-lx2160ardb-rev2-20260310091147.rootfs.tar.gz" を /dev/mmcblk0p1 パーティションにマウントします。

=> setenv bootcmd 'setenv bootargs root=/dev/mmcblk0p1 rw rootwait console=ttyAMA0,115200; mmc dev 0; mmc read 0x90000000 0x8000 0x14000; bootm 0x90000000'

これは正しいやり方でしょうか?もっと良い方法があれば教えてください。


また、LSDK では、カーネルと dtb 用の fitImage バイナリ ファイルを生成する方法、例えば distro/build_lx2160ardb-rev2/tmp/deploy/images/lx2160ardb-rev2/ ディレクトリにある fitImage のようなファイルを生成する方法、例えば fitImage--5.15.71+git0+95448dd0dc-r0-lx2160ardb-rev2-20260310070404.bin のようなファイルを生成する方法。

Re: LX2160ARDB SD Card Booting, LSDK FitImage

こんにちは、


詳しい説明をありがとうございました。


UG10374で示されたYoctoプロジェクトを使ってLSDKのセットアップを構築しました

1.SD カードからのブートについては、ご指摘のとおり、パーティションを作成し、rootfs を抽出しました。rootfs には有効な /sbin/init が含まれています。これは、emmc フラッシュにパーティション (/dev/mmcblk1p1) を作成し、ルートファイルシステムを抽出して、システムをそのパーティションにマウントできるが、SD にある場合はマウントできないことでも検証されました。

SDカードにブロック書き込みによってブートイメージをロードし、パーティション(/dev/mmcblk0p1)にrootfsをマウントすることでブートは可能ですか?

SDカードパーティションへのマウントが失敗した後、qspiから起動した後にlsblkコマンドで確認してもパーティションが表示されないためです。

2. fitImageバイナリの実際のファイルサイズは約16MBで、ブロックサイズは0x8000ですが、起動時のログは次のようになります。

=> setenv bootcmd 'setenv bootargs root=/dev/mmcblk1p1 rw rootwait console=ttyAMA0,115200; mmc dev 0; mmc read 90000000 8000 8800; bootm 90000000'
=>
=>
=> ブート

パーティション#0に切り替える、OK
MMC0は現在のデバイスです

MMC読み込み:dev # 0、ブロック#32768、カウント35000 ...35000ブロック読み込み:OK
## Loading kernel from FIT Image at 90000000 ...
Using 'conf-freescale_fsl-lx2160a-rdb.dtb' configuration
Trying 'kernel-1' kernel subimage
Description: Linux kernel
Created: 2023-02-08 3:38:28 UTC
Type: Kernel Image
Compression: gzip compressed
Data Start: 0x90000114
Data Size: 16608244 Bytes = 15.8 MiB
Architecture: AArch64
OS: Linux
Load Address: 0x80080000
Entry Point: 0x80080000
Hash algo: sha256
Hash value: 59af2bda187c7e19bd0a37818f1c22c24d30562979041f7bee01288661ae5bee
Verifying Hash Integrity ... sha256+ OK
## FITからFDTを読み込み中 90000000 の画像 ...
'conf-freescale_fsl-lx2160a-rdb.dtb'構成の使用
'fdt-freescale_fsl-lx2160a-rdb.dtb' のfdtサブイメージを試しています
説明:平坦なデバイスツリーの塊
作成日:2023-02-08 3:38:28 UTC
タイプ:フラットデバイスツリー
圧縮:非圧縮
データ開始:0x90fd6e28
データサイズ:33857バイト = 33.1 KiB
アーキテクチャ:AArch64
ハッシュアルゴリズム:sha256
ハッシュ値:32858f2c5f385a1a4410b8d4bff2414b1c4d36a13493cc8242eab6464e8d1d82
ハッシュ整合性の検証中...sha256+ OK
0x90fd6e28のFDTブロブを使って起動します
カーネルイメージの非圧縮
デバイスツリーを0000000009fff4000にロード、終了00000009ffff440 ...OK
FSL-MC:DPL未展開、DPAA2イーサネットが動作しない

カーネルを起動中…

「同期中止」ハンドラ、esr 0x02000000
elr: 000000000636a000 lr : 0000000082005fd0 (再配置)
elr: 0000000080080000 lr : 00000000fbd1bfd0
x0 : 000000009fff4000 x1 : 0000000000000000
x2 : 0000000000000000 x3 : 0000000000000000
x4 : 0000000080080000 x5 : 0000000000000001
x6 : 0000000000000008 x7 : 0000000000000000
x8 : 00000000fbb0e7c8 x9 : 0000010000000000
x10: 000000000a200023 x11: 0000000000000002
x12: 0000000000000002 x13: 00000000fbdfffff
x14: 000000009fff4000 x15: 00000000fbd18be8
x16: 00000000fbd52f58 x17: 00000000fbb31560
x18: 00000000fbb11d90 x19: 00000000fbde6c98
x20: 0000000000000000 x21: 0000000000000400
x22: 0000000000000001 x23: 00000000fbb16538
x24: 00000000fbb16538 x25: 00000000fbdd1978
x26: 0000000000000000 x27: 00000000fbd1bff8
x28: 0000000090000114 x29: 00000000fbd1bf98

コード: 00000000 00000000 00000000 00000000 (00000000)
CPUをリセットしています...

# ## ERROR ## # ボードをリセットしてください ###

3. sd_bootcmdシーケンスを確認し、生成されたファームウェアイメージを介して起動を試みます。

4. fip.bin と fip_ddr_all.bin は、TRM の Flash レイアウト テーブルに記載されている場所に従ってロードされます。


FITイメージを生成する手順を教えていただき、ありがとうございます。




Re: LX2160ARDB SD Card Booting, LSDK FitImage

こんにちは、

あなたの方法は推奨される LSDK方法ではありません。個々のRAW画像は動作しますが、LX2160AにはU-Bootの環境と起動シーケンスを完全な再現しなければなりません。より安全な方法は、コンポジットファームウェアイメージを生成し、フラッシュすることです。

flex-builder -i mkfw -m lx2160ardb_rev2 -b sd
 
 

これにより以下が生成されます。

build/images/firmware_lx2160ardb_rev2_sdboot.img
 
 

次に、それをSDカードに書き込みます。

sudo flex-installer -f firmware_lx2160ardb_rev2_sdboot.img -d /dev/mmcblk0
 
 

または:

sudo dd if=firmware_lx2160ardb_rev2_sdboot.img \
        of=/dev/mmcblk0 bs=1k seek=4 conv=fsync
 

提案された手順における問題点

  1. root=/dev/mmcblk0p1 はパーティション1に解凍されたLinuxルートファイルシステムが含まれている場合にのみ有効です。.tar.gzファイル自体はマウントされたルートファイルシステムではありません。パーティションに展開する必要があります。
sudo mkfs.ext4 /dev/mmcblk0p1
sudo mount /dev/mmcblk0p1 /mnt
sudo tar -xpf fsl-image-networking-full-lx2160ardb-rev2-*.rootfs.tar.gz \
    -C /mnt
sudo umount /mnt
バッシュ
 
  1. このコマンドは、FITイメージが正確に0x14000ブロックを占めることを前提としています。
mmc read 0x90000000 0x8000 0x14000
 
 

そのサイズは、実際のFITファイルのサイズを512バイトセクターに切り上げた値と一致する必要があります。そうしないと、U-Bootが読み込むメモリ量が少なすぎたり、隣接するメモリを上書きしてしまう可能性があります。

  1. 通常のsd_bootcmdシーケンスをバイパスしています。標準シーケンスはまた、マネジメント Complexのファームウェア、DPC、その他必要なコンポーネントを読み込みます。LSDKガイドでは、複合SDカードのレイアウトを定義しており、各コンポーネントを手動で配置するのではなく、生成されたファームウェアイメージを使用して起動することを推奨しています。

  2. fip.binとfip_ddr_all.binのエントリは、互換性のあるものとして扱ってはなりません。それらの正しい配置場所とロードコマンドは、生成されたU-Boot環境とファームウェアのレイアウトによって異なります。

複合イメージのインストール後に行う、より適切な手動ブートテストは次のとおりです。

=> run sd_bootcmd
 
 

または、ブートスイッチをSDブート用に設定したままボードをリセットするだけでもいいです。

ソースディレクトリが空なのはなぜですか?

LSDKパッケージはビルドフレームワークをコンポーネントソースツリーから分離しています。components/firmwareのディレクトリにはマニフェスト、設定、レシピ、参照が含まれることがあり、実際のATF、U-Boot、RCW、DDR PHY、LinuxのソースはLSDKのマニフェスト/設定に従って取得されます。したがって、ソースから構築する際にはコンポーネントリポジトリのクローン作成が期待されます。任意のアップストリームブランチではなく、LSDKリリースで指定されている正確なリビジョンを使用してください。

例えば、各コンポーネントを独立してクローンしてビルドするのではなく、Flexbuildでビルドするのが良いでしょう。

flex-builder -c atf   -m lx2160ardb_rev2 -b sd
flex-builder -c linux -m lx2160ardb_rev2
flex-builder -i mkfw  -m lx2160ardb_rev2 -b sd
 
 

本番ビルドの場合は、リリースマッチされた構成やコンポーネントのリビジョンを含む公式の flexbuild_lsdk2108.tgz アーカイブを使用してください。

FITイメージを生成する

U-Bootのmkimageユーティリティを使用して、ITS記述からFITイメージが生成されます。

mkimage -f lx2160.its lx2160.fit
 
 

ITSファイルには、カーネル、デバイスツリー、オプションのinitramfs、ロードアドレス、圧縮、ハッシュ、および構成に関する情報が記載されています。LSDKガイドにはこのプロセスが明確に記載されており、上記のコマンド形式が示されています。

カーネルとDTBを組み合わせた最小限の例は以下のとおりです。

/dts-v1/;

/ {
    description = "LX2160A kernel and device tree FIT";
    #address-cells = <1>;

    images {
        kernel {
            description = "Linux kernel";
            data = /incbin/("Image");
            type = "kernel";
            arch = "arm64";
            os = "linux";
            compression = "none";
            load = <0x81080000>;
            entry = <0x81080000>;

            hash-1 {
                algo = "sha256";
            };
        };

        fdt {
            description = "LX2160ARDB Rev2 device tree";
            data = /incbin/("fsl-lx2160a-rdb.dtb");
            type = "flat_dt";
            arch = "arm64";
            compression = "none";
            load = <0x90000000>;

            hash-1 {
                algo = "sha256";
            };
        };
    };

    configurations {
        default = "conf";

        conf {
            kernel = "kernel";
            fdt = "fdt";
        };
    };
};
 
 

LSDK U-Bootツールに付属のmkimageを使用してビルドしてください。

mkimage -f lx2160.its fitImage
 
 

圧縮カーネルの場合は、 Image.gzを使用し、以下のように設定してください。

compression = "gzip";
 
 

カーネル、FDT、initramfs、およびU-Bootのロード領域が重複しないようにしてください。tmp/deploy/images/.../fitImage-*.binで生成されるファイルは通常、Yoctoが生成したFITアーティファクトであり、そのタイムスタンプやGitハッシュは特別なバイナリ形式ではなく、パッケージングされたメタデータです。FITフォーマット自体はmkimageによって生成されます。

最後に、ドキュメントに記載されているLSDK 21.08 FITの例には、カーネルとDTBだけでなく、initramfs/rootfsも含まれていることに注意してください。root=/dev/mmcblk0p1で起動する場合はinitramfsを省略できますが、rootファイルシステムは正しく解凍され、有効な/sbin/initを含める必要があります。

よろしくお願いします。

タグ(1)
評価なし
バージョン履歴
最終更新日:
17 時間前
更新者: