こんにちは、
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 のようなファイルを生成する方法。
こんにちは、
詳しい説明をありがとうございました。
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イメージを生成する手順を教えていただき、ありがとうございます。
こんにちは、
あなたの方法は推奨される 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
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
0x14000ブロックを占めることを前提としています。mmc read 0x90000000 0x8000 0x14000
そのサイズは、実際のFITファイルのサイズを512バイトセクターに切り上げた値と一致する必要があります。そうしないと、U-Bootが読み込むメモリ量が少なすぎたり、隣接するメモリを上書きしてしまう可能性があります。
通常のsd_bootcmdシーケンスをバイパスしています。標準シーケンスはまた、マネジメント Complexのファームウェア、DPC、その他必要なコンポーネントを読み込みます。LSDKガイドでは、複合SDカードのレイアウトを定義しており、各コンポーネントを手動で配置するのではなく、生成されたファームウェアイメージを使用して起動することを推奨しています。
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 アーカイブを使用してください。
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を含める必要があります。
よろしくお願いします。