ブログ

Armadillo-IoT G3L:CMAサイズを変更する方法

at_yukari.hara
2020年10月6日 10時29分

必要なCMA領域のサイズはシステム構成により動的に決まるため、十分なサイズを一概に申し上げることはできません。
CMAサイズを変更する際は、動作に影響がないか、お客様自身で十分に確認を行ってください。

お客様の作成したアプリケーションが動作する領域が不足した際に、CMA領域のサイズを変更したい場合もあるかと思います。
今回は例としてArmadillo-IoT G3LのCMAサイズを標準の320MiBから64MiBに変更をしてみました。

CMA(Contiguous Memory Allocator)とは

ある領域を特別な領域として、普段はユーザプロセス用のメモリとして使用します。
ドライバが要求する場合などいざというときに、ユーザプロセス用のメモリを強制立ち退きさせてDMA用のメモリとして使用可能な技術です。

1.通常のCMAサイズ

Armadilloに電源を投入すると、起動ログに以下のログが表示され、CMAサイズが320MiBであることが確認できます。

>boot
…(略)
Reserved memory: created CMA memory pool at 0xac000000, size 320 MiB
…(略)

2.サイズの変更方法

DeviceTreeの以下ファイルの"size"を変更することで、CMAサイズの変更が可能です。

/linux-4.9-x1-at[バージョン]/arch/arm/boot/dts/imx7d.dtsi

以下修正箇所

reserved-memory {
    #address-cells = <1>;
    #size-cells = <1>;
    ranges;
 
    /* global autoconfigured region for contiguous allocations */
    linux,cma {
        compatible = "shared-dma-pool";
        reusable;
        size = <0x14000000>; /* こちらを変更 */
        linux,cma-default;
    };
};

"size"は16進数で指定しますので、64MiBに変更したい場合は、以下のように変更します。

size = <0x4000000>;

3.ビルド

Linuxカーネルをビルドして、イメージを書き換えます。
イメージの書き換え方法はマニュアルをご参照ください。

4.確認

イメージを書き換えてArmadilloに電源を投入すると、起動ログに以下のログが表示され、CMAサイズが64MiBに変更されたことが確認できます。

>boot
…(略)
Reserved memory: created CMA memory pool at 0xbc000000, size 64 MiB
…(略)