こんにちは、
私はi.MX8M Plus EVKボードで作業しており、 SD カードのブート パーティション (FAT32) から直接ロードされたinitramfs をルート ファイル システムとして使用して Linux を起動したいと考えています。
SD カードには個別のルート ファイル システム パーティションが含まれていません。
SDカードにはFAT32ブートパーティションが1つだけ含まれています
FAT32 パーティションに存在するファイル:
イメージ(U-boot+カーネル)
デバイスツリー BLOB (.dtb)
initramfs イメージ
initramfs 生成
initramfs イメージを生成するための推奨方法は何ですか?
initramfs はカーネルに組み込む必要がありますか、それとも別のイメージとしてロードする必要がありますか?
U-Boot環境コマンド
SD からカーネル、デバイス ツリー、および initramfs をロードするために必要な U-Boot コマンドまたは環境変数は何ですか。
こんにちは@Zhiming_Liuさん
あなたの指示に従って、あなたが共有した手順に従いました。
カーネル イメージと DTB を正常にロードできますが、 initramfs (cpio.gz) ルート ファイル システムがカーネルによってロードされていません。
以下に、正確な U-Boot コマンドと動作を示します。
booti コマンドを実行すると、カーネルは起動を開始しますが、 initramfs (cpio.gz) をルート ファイル システムとしてマウントまたは使用しません。
参考までに、完全なカーネルブートログを添付しました。
カーネルがinitramfs (cpio.gz) をロードしない理由は何でしょうか?U-Boot によってメモリに正しくロードされているにもかかわらずですか?
initramfs サポートに必要な、確認する必要がある必須のカーネル構成オプションはありますか?
i.MX8M Plus で initramfs を使用して起動する場合、bootargs 構成は正しいですか、それとも追加のパラメータが必要ですか?
こんにちは、
initramfs イメージを生成するための推奨方法は何ですか?
--> Yocto でbitbake core-image-minimal-initramfsを使用してビルドできます。
initramfs はカーネルに組み込む必要がありますか、それとも別のイメージとしてロードする必要がありますか?
--> それはあなたのニーズによって異なります。
U-Boot を使用して SD カード (FAT32 パーティション) から initramfs をロードするにはどうすればよいですか?
-->例は次のとおりです:
# If mmc0 is your sd card.
setenv bootargs console=ttymxc0,115200 root=/dev/ram rw
fatload mmc 0:1 ${loadaddr} Image
fatload mmc 0:1 ${fdt_addr} imx8mp-evk.dtb
fatload mmc 0:1 ${ramdisk_addr} xxxx_initramfs.cpio.gz
booti ${loadaddr} ${ramdisk_addr}:${filesize} ${fdt_addr}
board/beacon/imx8mn/imx8mn_beacon.envを参照できます。
boot_fdt=try
bootdelay=2
bootscript=echo Running bootscript from mmc ...; source
console=ttymxc1
fdt_addr=0x45000000
fdt_file=imx8mn-beacon-kit.dtb
finduuid=part uuid mmc ${mmcdev}:2 uuid
image=Image
initrd_addr=0x46000000
loadbootscript=fatload mmc ${mmcdev}:${mmcpart} ${loadaddr} ${script};
loadfdt=fatload mmc ${mmcdev}:${mmcpart} ${fdt_addr} ${fdt_file}
loadimage=fatload mmc ${mmcdev}:${mmcpart} ${loadaddr} ${image}
loadramdisk=load mmc ${mmcdev} ${ramdisk_addr} ${ramdiskimage}
mmcargs=setenv bootargs console=${console},${baudrate} root=PARTUUID=${uuid} rootwait rw ${mtdparts} ${optargs}
mmcautodetect=yes
mmcboot=echo Booting from mmc ...; run finduuid; run mmcargs; if test ${boot_fdt} = yes || test ${boot_fdt} = try; then if run loadfdt; then booti ${loadaddr} - ${fdt_addr}; else echo WARN: Cannot load the DT; fi; else echo wait for boot; fi;
mmcdev=1
mmcpart=1
netargs=setenv bootargs console=${console},${baudrate} root=/dev/nfs ip=dhcp nfsroot=${serverip}:${nfsroot},v3,tcp
netboot=echo Booting from net ...; run netargs; if test ${ip_dyn} = yes; then setenv get_cmd dhcp; else setenv get_cmd tftp; fi; ${get_cmd} ${loadaddr} ${image}; if test ${boot_fdt} = yes || test ${boot_fdt} = try; then if ${get_cmd} ${fdt_addr} ${fdt_file}; then booti ${loadaddr} - ${fdt_addr}; else echo WARN: Cannot load the DT; fi; else booti; fi;
ramargs=setenv bootargs console=${console},${baudrate} root=/dev/ram rw ${optargs}
ramboot=echo Booting from RAMdisk...; run loadimage; run loadfdt; fdt addr $fdt_addr; run loadramdisk; run ramargs; booti ${loadaddr} ${ramdisk_addr} ${fdt_addr} ${optargs}
ramdisk_addr=0x46000000
ramdiskimage=rootfs.cpio.uboot
script=boot.scr
よろしくお願いします、
志明