Ubootはパラメータをカーネルに渡します!

Ubootはパラメータをカーネルに渡します!

ubootカーネルにコマンドライン引数を渡す方法は?インターネット検索をしてみると、bootargs環境変数を使用していることがわかりました。そこに記載されているsetenv bootargs key=value。使っているbashのになくてsetenv使っているexport bootargs="value"のにあまり影響はありません。私が確認したパラメータは/proc/cmdline同じままです。私が間違っていることを知っていますか?

答え1

uEnv.txtブートパーティションのファイルを使用してブートパラメータを指定できます。以下は、yocto Meta-ZyboレイヤーのXilinx zynq-7000デバイスの例です。

kernel_image=uImage
devicetree_image=zybo-zynq7.dtb
bootargs=console=ttyPS0,115200 root=/dev/mmcblk0p2 rw rootwait earlyprintk
uenvcmd=echo Copying Linux from SD to RAM... && fatload mmc 0 0x3000000 ${kernel_image} && fatload mmc 0 0x2A00000 ${devicetree_image} && bootm 0x3000000 - 0x2A00000

使用するデバイスツリーを指定し(デバイスツリーが呼び出される場合は不要device_tree.dtb)、カーネルパラメータセットが続きます。

ご利用に関する詳細情報をご確認いただけます。uEnv.txt ここ

答え2

パラメータをカーネルに渡す方法は2つあります。 1. パラメータを内部でコンパイルします。 2. ブートローダの使用

まず、パラメータがカーネルにコンパイルされていないことを確認してください。 2番目に見つかったsetenvコマンドはbashコマンドではなくbootloaderコマンドです。特定のデバイスがどのように作成されたかによって異なりますが、通常、ブートローダはファイルシステムのパラメータまたはファイルを読み取る一部の内部ストレージ(ホストではなくデバイスのフラッシュメモリ)にパーティションがあり、u-boot設定を取得します。そこから。

別の方法は、ケーブルを介してデバイスを接続し、デバイス固有の方法を使用してブートローダのプロンプトを表示し、インタラクティブに設定を変更することです。

特定のデバイスの起動シナリオに慣れていない場合、これは小さなことではありません。デバイス名を指定すると、質問に対する回答に役立ちます。

答え3

SDカードのファイルに加えて、uEnv.txtファイルを介して起動ファイルを渡すこともできます。

起動には次のファイルが必要です。(BOOT.binfsblとubootの読み込み)、bitstream.bit(PLにロードされたビットストリーム、uImage(コンパイルされたLinuxカーネル)devicetree.dtb、(Linuxがドライバを読み取るアドレス)、uramdisk.image.gz(起動後のLinuxファイル)。

次のコマンドを使用してDDRにロードできます。

bootargs=console=ttyPS0,115200 root=/dev/ram rw earlyprintk
load_image=fatload mmc 0 ${kernel_load_address} ${kernel_image} && 
fatload mmc 0 ${devicetree_load_address} ${devicetree_image} && 
fatload mmc 0 ${ramdisk_load_address} ${ramdisk_image} uenvcmd=run mmc_loadbit_fat && 
echo Copying Linux from SD to RAM... && 
run load_image && 
bootm ${kernel_load_address} ${ramdisk_load_address} ${devicetree_load_address}

また、SDのext4パーティションから別のLinuxファイルをロードするには、次のコマンドを使用できますuEnv.txt

bootargs=console=ttyPS0,115200 root=/dev/mmcblk0p2 rw earlyprintk rootfstype=ext4 rootwait devtmpfs.mount=0
load_image=fatload mmc 0 ${kernel_load_address} ${kernel_image} && 
fatload mmc 0 ${devicetree_load_address} ${devicetree_image} uenvcmd=run mmc_loadbit_fat && 
echo Copying Linux from SD to RAM... && 
mmcinfo &&  run load_image && 
bootm ${kernel_load_address} - ${devicetree_load_address}

関連情報