U-Bootでmemmapをどのように使用しますか?

U-Bootでmemmapをどのように使用しますか?

私のハードウェアがこの場所にメモリRAMを書き、この部分をメモリに触れないようにカーネルが必要なので、最初の2GBをRAM用に予約したいと思います。

このオプションを使用するには、注文を開始する必要があることを読みました。メモリマップブートローダではYocto OSのドライバカーネルを使いたいので、私が使用するブートローダはU-Bootです。

使用するためにこの例を読みました。メモリマップ:

memmap=nn[KMG]$ss[KMG]
    [KNL,ACPI] Mark specific memory as reserved.
    Region of memory to be reserved is from ss to ss+nn.
    Example: Exclude memory from 0x18690000-0x1869ffff
             memmap=64K$0x18690000
             or
             memmap=0x10000$0x18690000
    Some bootloaders may need an escape character before '$',
    like Grub2, otherwise '$' and the following number
    will be eaten.

このような場合は書くことができませんでした。

編集:新しい質問

memmap=2G$0x00000000 および memmap=7fffffff$0x00000000 を使用して U-Boot でこのオプションを作成しましたが、例外が返されませんでした。正しく書いたようです。猫/プロセス/iomem私はこのメモリがメモリ用に予約されていることを知らせることを何も見ませんでした。

.dtbを修正する必要がありますか?

答え1

起動時にUbootの "mem"属性を使用する方が良いと思います。ここ:

SoC Cortex-A9で実行されているLinuxでメモリが使用されないようにスケジュールするには、Linuxカーネルにメモリの最上部(アドレス指定可能な最高のRAMアドレス)が何であるかを知らせる必要があります。このアドレス以外のすべてのRAMアドレスは、Linuxオペレーティングシステム以外の目的に使用できます。

bootargs U-boot環境変数に "mem = ..." Linuxブートパラメータを追加して、U-bootでアドレス可能な最高のRAMアドレスを設定できます。

以下は、メモリの上部を0x3E800000に設定するサンプルU-bootコマンドラインコマンドです。

setenv bootargs console=ttyS0,115200 mem=1000M

"mmcboot"、"ramboot"、および "qspiboot" U-boot 環境変数も bootargs 環境変数をオーバーライドします。これらの変数を使用する場合は、その変数のbootargsを変更する必要があるかもしれません。

デフォルトのU-boot環境変数は、「uboot-socfga¥include¥configs¥soccpga_common.h」Cヘッダーファイルを介してSoC用に定義されています。

関連情報