web-dev-qa-db-ja.com

Ubootはカーネルに引数を渡します!

カーネルにコマンドライン引数をどのようにuboot渡すことができますか?私はいくつかグーグルを行い、それがbootargs環境変数を使用していることを知りました。そこでsetenv bootargs key=valuebashを使用していて、setenvがないため、export bootargs="value"。しかし、それは何にも影響を与えていません。チェックインしました/proc/cmdline引数は同じままです。私が間違っていることは何か考えていますか?

4
Thushi

カーネルに引数を渡すには2つの方法があります。1.内部でそれらをコンパイルします。 2.ブートローダーを使用する

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

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

特定のデバイスのブートスキームに慣れていない場合、それはそれほど簡単ではありません。デバイスに名前を付けます。質問への回答に役立つ場合があります。

3
gena2x

ブートパーティションのuEnv.txtファイルを使用して、ブートの引数を指定できます。これは、yocto meta-zyboレイヤーのザイリンクス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の使用に関する詳細情報 ここ

1
Michael Shaw

sDカード上のファイルに加えて、uEnv.txtファイルを介してブートファイルを渡すことができます。

ブートには次のファイルが必要です:BOOT.bin(fsblと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}
0
Mojtaba Ahmadi