1516438_ja-JP

取消
显示结果 
显示  仅  | 搜索替代 
您的意思是: 

1516438_ja-JP

1516438_ja-JP

IMX8MP オンチップRAMメモリアクセス

こんにちは、

OCRAMにアクセスしてデータを読み込み、メモリに取り込む方法を学びたいです。

Linux Cortex A-53でそれを実現するにはどうすればいいか、誰かアドバイスをいただけませんか?

オンチップRAM - OCRAM (576 KB)

開始アドレス: 0x00900000 => ROM用に予約済み

開始アドレス: 0x00918000  =>OCRAMフリーエリア

終了アドレス: 0x0097FFFF

https://www.nxp.com/webapp/Download?colCode=IMX8MPRM


ご回答をお待ちしています。

IMX8MPLUS

i.MX 8ファミリ | i.MX 8QuadMax (8QM) | 8QuadPlusLinuxYocto ProjectRe: IMX8MP On chip RAM memory accessこんにちは、ロマン・ルースさん。
このアドバイスはあなたにとって効果がありますか?
よろしくお願いいたします。
ステファノ・ジリ
Re: IMX8MP On chip RAM memory access

こんに は、@Roman_Loz、compatible = "shared-dma-pool"を含めるといいですよ;そして、それはうまくいくはずです。

ocram_dma: ocram_dma@970000 {
        no-map;
        compatible = "shared-dma-pool";
        reg = <0 0x970000 0 0xC00>;  // 3KB
    };

よろしくお願いいたします。

サムヒタ・カシャップ

Re: IMX8MP On chip RAM memory access

こんにちは、
ご提案いただいた方法でOCRAMを使おうとしているのですが、memcpyを実行しようとするとカーネルパニックが発生します。
私が何を間違っているのか、あるいは見落としているのか理解する手助けをしてもらえますか?

dtsi:

resmem: reserved-memory {
    #address-cells = <2>;
    #size-cells = <2>;
    ranges;

    ocram: ocram@900000 {
        no-map;
        reg = <0 0x900000 0 0x70000>;
    };

    ocram_dma: ocram_dma@970000 {
        no-map;
        reg = <0 0x970000 0 0xC00>;  // 3KB
    };
...

モジュール初期化:

    // Find the OCRAM DMA node by name
    np = of_find_node_by_name(NULL, "ocram_dma");
    if (!np) {
        pr_err("Failed to find OCRAM DMA node in device tree\n");
        return -ENODEV;
    }

    // Lookup the reserved memory region
    rmem = of_reserved_mem_lookup(np);
    if (!rmem) {
        pr_err("Failed to lookup reserved memory for OCRAM DMA\n");
        return -ENODEV;
    }

    // Map the reserved memory region
    ocram_dma_base = ioremap(rmem->base, rmem->size);
    if (!ocram_dma_base) {
        pr_err("Failed to map OCRAM DMA memory\n");
        return -ENOMEM;
    }


コピー:

memcpy(current_address, mv->A, MATRIX_STRUCT_SIZE);


 

Re: IMX8MP On chip RAM memory access

こんにちは、 @Samhitha_Kashyap さん

なお、NXPは他のドライバーが使用する448KBのOCRAM空間に対するノードの変更を推奨していません。
互換性のある=「shared-dma-pool」プロパティを用いて、0x970000後にメモリ領域をDMAサポートに利用できます。


ありがとうございます。よろしくお願いいたします。

サンケット・パレク

Re: IMX8MP On chip RAM memory access

こんにちは、 @Sanket_Parekh さん

ご回答ありがとうございました。大変参考になりました!

もしユーザーアプリケーションで使えない場合、448KBのOCRAM空間内でDMAをサポートするようにデバイスツリーを変更することは可能でしょうか?


よろしくお願いいたします。
サムヒタ・カシャップ

Re: IMX8MP On chip RAM memory access

こんにちは、 @Samhitha_Kashyap さん

お元気でお過ごしでしょうか。
 
OCRAMやLinuxカーネルで自分専用にどれだけのメモリが割り当てられているかは、socのdtsiファイル(予約済みメモリノード)を調べることで判断できます
IMX8MPの場合は448KBです。
 
resmem: 予約メモリ {
 #address-cells = <2>;
 #size-cells = <2>;
範囲;

 ocram: ocram@900000 {
地図なし;
 reg = <0 0x900000 0 0x70000>;
 };
 
      .....
      .....
 
}
 
ここで0x70000(448K)バイトがLinux使用用に予約されています。そして、no-mapプロパティで指定されているユーザースペースに仮想的にマッピングすることはできません。
さらに0x7000バイトを経て、他のアプリケーションにも使えます。
ただし、OCRAMを使わないM7コアアプリケーションは必ず確認する必要があります。これは特定のアプリケーションのリンカースクリプトを調べることで判別できます。
 
ありがとうございます。よろしくお願いいたします。
サンケット・パレク
 
Re: IMX8MP On chip RAM memory access

こんにちは、サンケットさん。

Linuxがどれだけのメモリを消費し、残りはユーザーアプリケーションに使えるか確認することは可能でしょうか?

もし可能なら、どうやって同じことを検証し、残りのメモリをアプリケーション用に割り当てればいいのでしょうか。

よろしくお願いいたします。

サムヒタ・カシャップ

Re: IMX8MP On chip RAM memory access

こんにちは、 @Samhitha_Kashyap さん。

お元気でお過ごしでしょうか。

OCRAM Firstにアクセスするには、ATFが使用している地域にアクセスしようとしないように注意する必要があります。

U-Bootの場合、md/mwコマンドを使ってOCRAMに直接アクセスできます。

Linux自体がOCRAMを使用しているため、ユーザースペースでのOCRAM使用は推奨されません。

ありがとうございます。よろしくお願いいたします。

サンケット・パレク

标记 (1)
无评分
版本历史
最后更新:
昨天
更新人: