読者です 読者をやめる 読者になる 読者になる

ひつじのにっき

mhidakaのにっきです。たまに長文、気が向いたとき更新。

ET2009自分メモ:Android向けデバイスドライバを開発する際のキモ(佐藤 勝彦 氏)

Android向けデバイスドライバを開発する際のキモ
佐藤 勝彦 氏
日本Androidの会/(株)ユビラボ 代表取締役
http://www.ubilabo.net/index.html

組み込み技術者にはめちゃめちゃ参考になる話でした。
もっと聞いていたかった!

Androidでのドライバ種類

  • HALレイヤー
  • Linuxドライバ

会社紹介

東京工科大ケータイにAndroidを移植

Android, BREW, MIDP, Limo

導入実績

Driver開発

 Android にはKernelの間に、HALがある

  • Linuxドライバは通常の手順で。

 Android特有のドライバ
 LGPL/GPKライセンス上はグレー?

 - Audio Radio Interface Layer
- Sensor
- Video , Camera
- Wifi
ここはApacheライセンス

Linuxのドライバ

2.6.29
 - driver/staging/android
- driver/misc

ドライバ一覧

 Binder / Logger / RAM Console / Timed_output / LowMemoryKiller / Pmem / 電源管理周り(Power_supply)

Binder

  • IPCの実現に利用されている。

OpenBinderを変更(miscドライバになっている)

  • Androidでは、ServiceManagerにて利用

プロセス間通信で利用

- Framework/base/cmd/servicemanager
- ネイティブのサービス間通信
  アンドロイド Java層のサービス間通信
  AIDLファイルからBinder用のスタブが自動生成

Logger

 /dev/log_main
/dev/log_events
/dev/log_ragio
system/core/liblog配下にログ書き込み用ライブラリ

 Logcatのコマンドによってどのログファイルを呼び出すか、決める

RAM Console

シリアルポートを使えない、使うのが難しい場合に利用
 WindowsMobile端末へのポーティング

 メモリ上にprintkができる。
 カーネルパニック時:

  • リブート後にリブート前のログがメモリに残っていればリブート後にもログが取得できる
  • 物理メモリのアドレスを指定できる

Timed_Output

  • 時間指定での出力が可能
  • アンドロイドではカメラ用フラッシュ、バイブレータ、LEDやGPIOのリセット単位
  • ユーザアプリからやった場合、オンにしてオフにする場合、だれもオフにしなくなるケースがあるので、動き続けるのをさけるため。バイブレータについては最長のタイムアウトが指定される(10秒とか)

LowMemoryKiller

  • メモリが少なくなったときにプロセスをKILLする仕組み
  • プロセスを指定してKILL対象から外す事が可能。優先度を決める事もできる

アンドロイドでは

  • アプリケーション全般に適応
  • メモリが少なくなった際は、自動的にアプリケーションがKILLされる

 フロントアプリケーション、HOMEアプリケーション、サービスアプリケーションの順で優先度が高い

 onExistなど終了処理があるが、終了コマンドを必ず通る訳ではない。
 カーネルから勝手にKILLされるため。
 init.rcにて優先度を書かれている(KILL対象の範囲を確認できる)

pmem

決められた物理アドレスをユーザプログラムからアクセス
mallocのような複数のメモリを確保する方法
メモリ全体を確保する方法

アンドロイドでは
 利用しているユーザプログラム

 pmem+サービスアプリケーションで提供する

ソースコード非公開。プロプライエタリなライブラリではよく使う。

ashmem

ソースの場所
 /kernel_root/mm/ashmem.c
/dev/ashmem
システム用のプロパティで利用
 setprop/getpropこまんどで利用している
 このドライバがない場合は、利用せず、ファイルをつかう実装が提供されている

アンドロイドのHAL

 LibHardware HAL用のモジュールを作成するためのライブラリ
 Libhardware_legacy
RIL/Audio

 サービスnativeアプリからsoファイルをインポート
HALを駆使すれば、GPS・コンパスシミュレータが可能

移動シミュレーションが可能
エミュレータで開発する場合に有用(ゆびらぼさんでやった)

ネイティブサービスの実装とアンドロイドフレームワークとの連携概要

 独自センサーモジュールを作成
 Local_socket
Dbus

最後に

組み込みワーキンググループのメーリングリストがあるらしい