こんにちは、
OCRAMにアクセスしてデータを読み込み、メモリに取り込む方法を学びたいです。
Linux Cortex A-53でそれを実現するにはどうすればいいか、誰かアドバイスをいただけませんか?
オンチップRAM - OCRAM (576 KB)
開始アドレス: 0x00900000 => ROM用に予約済み
開始アドレス: 0x00918000 =>OCRAMフリーエリア
終了アドレス: 0x0097FFFF
https://www.nxp.com/webapp/Download?colCode=IMX8MPRM
ご回答をお待ちしています。
こんに ちは、@Roman_Loz、compatible = "shared-dma-pool"を含めるといいですよ;そして、それはうまくいくはずです。
ocram_dma: ocram_dma@970000 {
no-map;
compatible = "shared-dma-pool";
reg = <0 0x970000 0 0xC00>; // 3KB
};よろしくお願いいたします。
サムヒタ・カシャップ
こんにちは、
ご提案いただいた方法で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);
こんにちは、 @Samhitha_Kashyap さん。
なお、NXPは他のドライバーが使用する448KBのOCRAM空間に対するノードの変更を推奨していません。
互換性のある=「shared-dma-pool」プロパティを用いて、0x970000後にメモリ領域をDMAサポートに利用できます。
ありがとうございます。よろしくお願いいたします。
サンケット・パレク
こんにちは、 @Sanket_Parekh さん。
ご回答ありがとうございました。大変参考になりました!
もしユーザーアプリケーションで使えない場合、448KBのOCRAM空間内でDMAをサポートするようにデバイスツリーを変更することは可能でしょうか?
よろしくお願いいたします。
サムヒタ・カシャップ
こんにちは、 @Samhitha_Kashyap さん。
resmem: 予約メモリ {
#address-cells = <2>;
#size-cells = <2>;
範囲;
ocram: ocram@900000 {
地図なし;
reg = <0 0x900000 0 0x70000>;
};
.....
.....
}
こんにちは、サンケットさん。
Linuxがどれだけのメモリを消費し、残りはユーザーアプリケーションに使えるか確認することは可能でしょうか?
もし可能なら、どうやって同じことを検証し、残りのメモリをアプリケーション用に割り当てればいいのでしょうか。
よろしくお願いいたします。
サムヒタ・カシャップ
こんにちは、 @Samhitha_Kashyap さん。
お元気でお過ごしでしょうか。
OCRAM Firstにアクセスするには、ATFが使用している地域にアクセスしようとしないように注意する必要があります。
U-Bootの場合、md/mwコマンドを使ってOCRAMに直接アクセスできます。
Linux自体がOCRAMを使用しているため、ユーザースペースでのOCRAM使用は推奨されません。
ありがとうございます。よろしくお願いいたします。
サンケット・パレク