こんにちは。アスカ・クリエイション 石原繁彦です。
前回のAndroidのソースビルドに引き続きPanda Board用にカーネルをビルドしてみます。
カーネルビルドができるようになればカーネルの設定を変更できるのでデバイスドライバを追加するなどが可能になります。
AOSPの以下のページに情報がありますので、これを参考に進めます。
http://source.android.com/source/building-kernels.html
まず以下を実行します。
$ git clone https://android.googlesource.com/device/ti/panda
$ cd panda
$ git log kernel
PandaboardはOmapですのでOmapのカーネルソースを取得します。
$ git clone https://android.googlesource.com/kernel/omap.git
コンパイルのためのツールチェインを取得し、パスを通します。
$ git clone https://android.googlesource.com/platform/prebuilt
$ export PATH=$(pwd)/prebuilt/linux-x86/toolchain/arm-eabi-4.4.3/bin:$PATH
クロスビルドのための環境変数を設定します。
$ export ARCH=arm
$ export SUBARCH=arm
$ export CROSS_COMPILE=arm-eabi-
カーネルソースをチェックアウトします。ブランチはandroid-omap-panda-3.0を使用します。
$ cd omap
$ git checkout remotes/origin/android-omap-panda-3.0
panda_defconfigでカーネル設定を行い、ビルドします。
$ make panda_defconfig
$ make -j4
正常に終了するとarch/arm/boot/zImageができます。これがカーネルになります。前回の記事で取得したAndroidソースのdevice/ti/panda/kernelにコピーします。
$ cp omap/arch/arm/boot/zImage ~/panda_work/device/ti/panda/kernel
これで、システムをビルドし、焼き込むことでビルドしたカーネルが使用できます。AndroidのSettings ->About tabletにてカーネルのバージョンやビルド日時で確認できます。
続いて、カーネルの設定を変更してみます。Linuxカーネルの設定変更にmenuconfigを使いたいので、libncurses-devをインストールしておきます。
$ sudo apt-get install libncurses-dev
カーネルソースツリーで以下を実行します。
$ make menuconfig
今回はUSB WEBカメラを使用可能にしてみます。
Device Driver —>Multimedia support —>Video For Linux
Device Driver —>Multimedia support —>Video capture adapters —>V4L USB devices —> USB Video Class
それぞれチェックします。モジュールではなくカーネルに組み込みたいので<M>ではなく<*>にします。
これで良いはずですが、drivers/media/video/omapgfxのビルドでエラーとなります。linux/videodev.hの不整合のようですが、とりあえずこのドライバをビルドから外します。
Device Driver —>Multimedia support —>Video capture adapters —>V4L USB devices —> OMAP V4L2-GFX driver
セーブしてmenuconfigを終了し、makeします。正常終了したらデバイスに書き込み、USB Webカメラを接続し/dev/video0ができていたら成功です。
カメラの確認には工学院大学金丸研究室様で同じようなことをされていましたので、アプリのソースを頂き、動作させてみました。
/dev/video0のパーミッションを666に変更してアプリを実行させてみたところ、うまく動作しました。(工学院大学金丸研究室様ありがとうございます)
カーネル設定を変更できるとAndroidの可能性が広がりますね。
今回はここまでです。