こんにちは、
8Mplus 評価ボードを使用して、core-image-tiny-initramfs または SD カードから ramfs を実行する必要があります。イメージをビルドすることはCANですが、それを使用するための正しいubootコマンドが見つかりません。他の投稿で core-image-tiny-initramfs.cpio.gz への参照が見られますが、それらの投稿には uboot コマンドがリストされていません。
次のコマンドを試しました:
setenv loadramdisk "mmc 2:2 0x80000000 /boot/ramdisk.gz をロード"
setenv ramargs "setenv bootargs ${mmcargs} root=/dev/ram0 rw rootfstype=ext4 ramdisk_size=0x20000000"
setenv ramboot "echo ramdisk から起動しています...; run ramargs; bootz ${loadaddr} 0x80000000 ${fdt_addr_r} "
setenv bootcmd "loadimage loadfdt loadramdisk ramboot を実行"
常に「zimage: Bad magic!」というエラー メッセージが表示されます。
問題は住所にあると思われます。imx8mp-evk.dtb のソースによると、RAM アドレスは有効であるはずですが、uboot からのメッセージはありません。
ありがとう、
スコット
こんにちは、 @goodspeed 、 @ScottSJ 、 @kimease 、
現在、 i.MX8M Plus EVKボードで作業しており、 initramfs (ramfs.img / ramfs.cpio.gz)を使用してファイルシステムを起動したいと考えています。ルートファイルシステムとして、ブートパーティションのみ(FAT32)のSD カードから直接ロードされます。
SD カードには個別のルート ファイル システム パーティションが含まれていません。
SDカードにはFAT32ブートパーティションが1つだけ含まれています
FAT32 パーティションに存在するファイル:
イメージ(U-boot+カーネル)
デバイスツリー BLOB (.dtb)
initramfs イメージ (cpio.gz)
以下に、正確な U-Boot コマンドと動作を示します。
booti コマンドを実行すると、カーネルは起動を開始しますが、 initramfs (cpio.gz) をルート ファイル システムとしてマウントまたは使用しません。
参考までに、完全なカーネルブートログを添付しました。
カーネルがinitramfs (cpio.gz) をロードしない理由は何でしょうか?U-Boot によってメモリに正しくロードされているにもかかわらずですか?
initramfs サポートに必要な、確認する必要がある必須のカーネル構成オプションはありますか?
i.MX8M Plus で initramfs を使用して起動する場合、bootargs 構成は正しいですか、それとも追加のパラメータが必要ですか?
「 SD カードで通常の rootfs ブートを使用する手順はありますが、両方の環境が必要です」とおっしゃっていることに気づきました。
SWUpdate OTA i.MX8MM EVK_rev3.pdfの35ページを読むことをお勧めします。
SWUpdate OTA i.MX8MM EVK / i.MX8QXP MEK - NXPコミュニティ
たぶんそれがあなたが望んでいることなのでしょう。
おそらくこのデモが役に立つでしょう。
これは単なる u-boot booti コマンドです。カーネルイメージフォーマット(Image、zImageなど)に応じて、bootiをbootzに変更できます。
ブーティ${loadaddr} ${initrd_addr} ${fdt_addr}
initrd_addr は、uramdisk_boot.rootfs.aarch64.img RAM ディスクの場所/アドレスです。
あなたのCASEは core-image-tiny-initramfs.cpio.gz になります。
|-- 0001-all-in-spi-demo-lf-5.10.72-2.2.0.patch --- このデモのパッチ
|-- デモバイナリ
| |-- flash.b0.bin --- b0 ブートローダー
| |-- flash.bin --- c0 ブートローダー
| |-- Image-imx8qxpc0mek.bin --- Linuxカーネル
| |-- imx8qxp-mek.dtb --- デバイスツリー
| |-- uramdisk_boot.rootfs.aarch64.img --- RAMディスク
| |-- uuu.qspi.all.b0.uuu --- b0 の uuu スクリプト
| `-- uuu.qspi.all.uuu --- c0 の uuu スクリプト
`-- readme.txt --- このファイル
ドキュメントがどこにあるか分からなくても大丈夫です。これが「基本的な知識」であれば、どこかにドキュメントがあるはずですが、Web 検索を何回も行っても何も見つかりません。
私はさまざまな「ブート」コマンドをよく知っており、他のプラットフォームでも使用したことがあります。ソースコードとその他のブート構成を確認しました。nxp プラットフォームに必要な特定の値とパラメータを探しています。これは「core-image-tiny-initramfs」ビルドで利用できるはずですが、そのイメージを使用する手順が見つかりません。(SD カード上で通常の rootfs ブートを使用する手順はありますが、両方の環境が必要です。)
もう言いましたよ!!!
これは u-boot ドキュメントからのものです。それは文書です!!!
u-boot のヘルプを確認すると、ramdisk の使い方が簡単にわかります。
u-boot=> ヘルプブート
booti - メモリから Linux カーネルの「イメージ」形式を起動する
使用法:
booti [アドレス [initrd[:サイズ]] [fdt]]
- 'addr'に保存されているLinuxの'イメージ'を起動する
引数「initrd」はオプションであり、アドレスを指定します。
メモリ内の initrd の。オプションパラメータ「:size」を使用すると、
RAW initrd のサイズを指定します。
Linuxカーネルの起動にはフラットなデバイスツリーが必要なので、
デバイスツリーBLOBのアドレスを指定する3番目の引数
が必要です。デバイスツリーブロブでカーネルを起動するが、
initrd イメージがない場合は、initrd 引数に '-' を使用します。
バイナリリリース tar ボール内の uuu スクリプト 'example_kernel_emmc.uuu' を確認すると、ramdisk の使用方法がわかります。
FB: ucmd setenv fastboot_buffer ${loadaddr}
FB: ダウンロード -f _画像
FB: ucmd setenv fastboot_buffer ${fdt_addr}
FB: ダウンロード -f _board.dtb
FB: ucmd setenv fastboot_buffer ${initrd_addr}
FB: ダウンロード -f _initramfs.cpio.gz.uboot
#FB: ucmd setenv bootargs コンソール = ${console} 、 ${baudrate} earlycon = ${earlycon} 、 ${baudrate}
FB: アクション${kboot} ${loadaddr} ${initrd_addr} ${fdt_addr}
FB: アクション${kboot} ${loadaddr} ${initrd_addr} ${fdt_addr}
u-boot=> ヘルプブート
booti - メモリから Linux カーネルの「イメージ」形式を起動する
使用法:
booti [アドレス [initrd[:サイズ]] [fdt]]
kboot ここはbootiです
loadaddr ここはaddrです
initrd_addrはinitrdで、ramdiskで、core-image-tiny-initramfs.cpio.gzの可能性があります。
ここでのfdtはfdt_addrです
もう一度言いますが、私はすでにすべてを話しました!!!
「initrd イメージがない場合は、initrd 引数に '-' を使用します。」
そのため、Linux カーネルとデバイス ツリー dts のブート コマンド ラインでは、'-' がよく見られます。
ほとんどの場合、RAMディスクは必要ありません。
これは単なる u-boot の基本知識です。非常に基本的です。
こんにちは、
提供されている ramfs レシピの使用方法に関するドキュメントや情報はありますか?
ありがとう、
スコット
u-boot のヘルプを確認すると、ramdisk の使い方が簡単にわかります。
u-boot=> ヘルプブート
booti - メモリから Linux カーネルの「イメージ」形式を起動する
使用法:
booti [アドレス [initrd[:サイズ]] [fdt]]
- 'addr'に保存されているLinuxの'イメージ'を起動する
引数「initrd」はオプションであり、アドレスを指定します。
メモリ内の initrd の。オプションパラメータ「:size」を使用すると、
RAW initrd のサイズを指定します。
Linuxカーネルの起動にはフラットなデバイスツリーが必要なので、
デバイスツリーBLOBのアドレスを指定する3番目の引数
が必要です。デバイスツリーブロブでカーネルを起動するが、
initrd イメージがない場合は、initrd 引数に '-' を使用します。
こんにちは、
誰か答えを知っていますか?提供されている core-image-tiny-initramfs の使用に関するドキュメントはありますか?
ありがとう、
スコット
こんにちは、
単一の uboot から複数のカーネルや ramfs を起動する必要があります。ターゲットは uboot コードで決定でき、適切な環境変数を設定CAN。他のシステムでもこれを実行したことがあるので、ここでも実行できるはずです。
異なるカーネルを検出して使用するためのコードはすでにあります。ramfs を起動するには手順が必要です。
ありがとう、
スコット
こんにちは、
uboot をビルドしたいだけなら、スタンドアロンの uboot を使用しないのはなぜですか?詳しい情報については、第 3 章「U-Boot の移植」を参照してください。
https://www.nxp.com/docs/en/ユーザーガイド/IMX_PORTING_GUIDE.pdf
よろしくお願いします。