第13章 SGX用カーネルモジュールのビルド

本章では、PowerVR SGX DDK(Driver Development Kit)のソースコードを作業用PCでクロスビルドし、カーネルモジュールを作成する方法について記載します。

[ティップ]

Kernel featuresなど、カーネルの構成に大きく影響のあるコンフィギュレーションを変更したカーネルイメージをAndroidで利用した場合、稀にSGX用カーネルモジュールが動作しなくなる場合があります。カスタマイズを行ったカーネルを使用する場合は、そのカーネルにあわせたSGX用カーネルモジュールを作成する必要があります。

事前に 11章開発環境の準備 を参照して、作業用PCに開発環境が構築されている必要があります。

13.1. ソースアーカイブ取得

SGX DDKのソースコードアーカイブ eurasia_km-[version].tar.gz を取得します。ソースアーカイブは付属DVD-ROMから取得可能です。

13.2. カーネルの準備

SGX用カーネルモジュールをビルドするためには、ビルド済みのカーネルソースコードが必要です。12章カーネルのビルド を参考にしてカーネルソースコードをビルドします。

13.3. ビルド

「ソースアーカイブ取得」で取得したソースアーカイブを展開し、ビルド環境にあわせたパラメーターを設定してビルドを行います。「カーネルの準備」でビルドしたカーネルソースコードが~/linux-2.6.35-a800evaに配置されている場合、以下のコマンドを実行します。

[ティップ]

SGX用カーネルモジュールのビルドにはdos2unixを使用します。作業用PCにインストールされていない場合は、次のようにインストールを行ってください。

[PC ~]# apt-get update
[PC ~]# apt-get install dos2unix

1[PC ~]$ tar zxvf eurasia_km-[version].tar.gz
2[PC ~]$ cd eurasia_km-[version]/eurasiacon/build/linux2/r8a7740_android
3[PC ~/eurasia_km-[version]/eurasiacon/build/linux2/r8a7740_android]$ make ARCH=arm KERNEL_CROSS_COMPILE=arm-linux-gnueabi- CROSS_COMPILE=arm-linux-gnueabi- TARGET_PRODUCT=armadillo-800eva HAL_VARIANT=armadillo-800eva KERNELDIR=~/linux-2.6.35-a800eva
(省略)
  MODPOST 3 modules
  CC      /home/atmark/eurasia_km-[version]/eurasiacon/binary2_r8a7740_android_release/target/kbuild/bc_example.mod.o
  LD [M]  /home/atmark/eurasia_km-[version]/eurasiacon/binary2_r8a7740_android_release/target/kbuild/bc_example.ko
  CC      /home/atmark/eurasia_km-[version]/eurasiacon/binary2_r8a7740_android_release/target/kbuild/pvrsrvkm.mod.o
  LD [M]  /home/atmark/eurasia_km-[version]/eurasiacon/binary2_r8a7740_android_release/target/kbuild/pvrsrvkm.ko
  CC      /home/atmark/eurasia_km-[version]/eurasiacon/binary2_r8a7740_android_release/target/kbuild/shmobilelfb.mod.o
  LD [M]  /home/atmark/eurasia_km-[version]/eurasiacon/binary2_r8a7740_android_release/target/kbuild/shmobilelfb.ko
4[PC ~/eurasia_km-[version]/eurasiacon/build/linux2/r8a7740_android]$ ls ../../../binary2_r8a7740_android_release/target/kbuild/*ko
../../../binary2_r8a7740_android_release/target/kbuild/bc_example.ko
../../../binary2_r8a7740_android_release/target/kbuild/pvrsrvkm.ko
../../../binary2_r8a7740_android_release/target/kbuild/shmobilelfb.ko

1

SGX DDKのソースコードアーカイブを展開します

2

ソースコードディレクトリに移動します

3

ビルドを実行します

4

3つのカーネルモジュールが作成されます

図13.1 SGX用カーネルモジュールのビルド


13.4. インストール

SGX用カーネルモジュールを、内蔵ストレージのAndroidシステムにインストールします。事前に9章SDブートの活用を参照して、Debian GNU/Linux を SD ブートしている必要があります。

「ビルド」で作成したSGX用カーネルモジュールはカレントディレクトリ以下にあることを想定しています。

[armadillo ~]$ ls
bc_example.ko  pvrsrvkm.ko  shmobilelfb.ko
1[armadillo ~]$ mount /dev/mmcblk0p4 /mnt
2[armadillo ~]$ cp *.ko /mnt/lib/modules/
[armadillo ~]$ umount /mnt

1

eMMCパーティション4をマウントします。

2

eMMCパーティション4の/lib/modules/以下にカーネルモジュールをコピーします。

図13.2 SGX用カーネルモジュールのインストール