内容 (詳細はとりまとめ中です。少々お待ち下さい)
発表内容
- 自己紹介- PF部に参加した理由- 今回の発表について
→ initについて知りたいと言ったら「なら調べてぜひ発表をと言われた」→そういわれて調べたら楽しかった。(記録者注:こことても大事)
- BeagleBoard(OMAP3)が起動するまで
- OMAPおよびBeagleBoardについて
OMAPはTI社が製造しているARM Cortex-A8にDSP,2D/3Dグラフィックスアクセラレータ等を追加したSocで、BeagleBoardは、このOMAPを実装しながら、低価格で販売されている組み込みボード
- 起動シーケンス
- ROMがMLO(X-loader)を起動
- X-Loaderがu-boot.bin(U-boot)を起動
- U-bootが各種環境変数を設定してLinux Kernelを起動
- カーネルパラメータについて
- u-bootパラメータについて
- init(init.c)の流れ(概要)
今回は、init(system/core/init/init.c)の入力、出力を見ながら説明する
- /dev/_null_, /dev/_kmsg_の作成
- init.rcについて
- PF_NETLINKの生成(udevとの通信に使われる?)
- Ashmemをつかったシステムプロパティ領域の確保
- /dev/ashmemを経由してopen,ioctlをつかってアクセスする
- Linuxのカーネルドライバとして実装されている(@l_b__さんがこの後解説)
@l_b__ 「Binderの初めの一歩とAndroidのプロセス間通信 - Android IPCのとりあえず1回目」(資料)
- Androidのプロセス間通信プロセス間通信といえば・Binder・Ashmem・UNIXドメインソケット・TCP, UDP・名前付きソケット(利用している場所は見当たらない)- Binderのはじめの一歩+ Binderって何?・Android独自のプロセス間通信・POSIXのメッセージの置き換え・プロセス間で小さいデータを高速にやり取りするのに向く+ 何故Binder?・AndroidはSystemV由来のIPCをサポートしていないため。・詳しい理由をしりたければ、NDKのdocs/system/libc/SYSV-IPC.txt- カーネルでのリソースリーク問題- リソースを枯渇させる+ Android独自のIPC- メッセージキューはBinderへ- 共有メモリは、Ashmemへ- セマフォはPOSIX IPCのセマフォへ+ Binderの歴史- 実はNext Generation BeOSに採用される予定だったOpenBinder- 分散コンポーネント環境を提供するフレームワーク- OpenBinderをメンテしていたHackbornさんは、Androidのプラットフォームエンジニア。よくGroupに投稿している+ Binderの仕組み- Service Managerに対してレシーバーがサービス登録- 他のアプリは、Serviceマネージャに問い合わせる(libBinder経由)- IPCはBinder Driver(/dev/binder)経由でやりとりしている+ 実際につかってみる- Ashmemについて+ AshmemってAshmemは、プロセス間で複数のプロ競るからアクセスできる共有メモリのAndroid版ashmemドライバ(/dev/ashmem)を介してアクセスするopenしたashmemのFDを使いmmapして利用可能以下の用途で使われている- システムのプロパティ格納領域- android.os.MemoryFileクラスの内部実装- グラフィックメモリのバッファ領域- Skiaのバッファ領域+ Ashmemの関数(/system/core/include/cutils/ashmem.h , libcutils.so)・ashmem_create_region()・ashmem_set_prot_region()・ashmem_pin_region()・ashmem_unpin_region()・asgnen_get_suze_region()+ 実際にAshmemを使ってみる・・・という報告をしようと試みたが今の所うまく行っていない。とりあえず現状のコードを解析。
a_yokoyama 「Androidプラットフォーム学習環境構築の軌跡<ファイナル>」(資料)
- 前回の振り返り自己啓発でJavaやAndroidの学習を始める。プラットフォームや組み込み系の知識の無いままPF部に参加。そこで、第一回勉強会の@l_b__さんの発表をもとに、実践し、第二回勉強会で発表してみるも様々な問題に遭遇していた。前回は、最後まで実施できていなかった。そこで、前回発表時のアドバイスをもとに、ファイナルといえるところまでたどり着いたので、その報告をする。前回のアドバイス・まずは端末で普通にmakeしてみてはどうか→ これ自体は必要なかった・ネイティブコードは'froyo'を指定して取得する→ これが重要・Nativeアプリのプロジェクト生成時は空のプロジェクトから作る方がよい- 1. EclipseにAndroidのソースを読み込ませる→ Eclipseからのビルドでもmake が行われた(注釈) 前回ここで相当数のエラーがでていました。前回の勉強会では、トランクを取得しており、不安定なトランクが要因ではないのかという話がでていました。- 2. EclipseにNativeコードのアプリを読み込ませる→ 基本は、@l_b__さんの手順に従ってできた。ただし一点おおはまりした。それは、資料から直接コピペをしたAndroid.mkに、資料に含まれていた全角空白が含まれてしまっていた。これがわかる前相当時間を使ってしまった。- 3. EclipseでNativeアプリをデバックしてみる→こちらは、大きくはまる事無く手順通りですすんだ。アプリの実行とlogcatは別々のウィンドウを開くという事に気づくのに少し時間がかかった。- 4. EclipseでAndroidのJavaフレームワークをデバックしてみる→原因は不明だが、1回目のデバックは問題ないものの2回目以降、リモートVMに接続できないというエラーが出てしまってデバックできなくなってしまう。→ adb start-serverを行い直し、Eclipseを再起動すると回復した- 最後になんとかここまでたどり着いた。今後は通信部分を中心に追いかけていきたい。
・@hermit4 内容未定(仮)・未定 募集中
どうにも敷居が高くて参加しにくデ部内の話題をちらほらこんなもの創りたいんだ話題。暇村さん熱く語る!噂のあの人のそんな話題他、こっそりとしか語れない話題満載で盛り上がりました。