SlideShare ist ein Scribd-Unternehmen logo
1 von 174
Androidポーティング
応用トレーニング
Ver1.00(10)
テキストのご利用に関して
2
・ 本コースのテキストは、 Creative Commons License BY-NC-SA
4.0に基づいて提供されています。OESF会員またはOESFエデュ
ケーションコンソーシアムメンバーでない場合、内容の改変の有無
にかかわらず、商用目的での利用は禁止されています。
OESFおよびOESFエデュケーションコンソーシアムへの加入につ
いては、以下のサイトをご覧ください。
● OESF公式サイト
http://www.oesf.jp/modules/about/index.php?content_id=12
● OESFエデュケーションコンソーシアム公式サイト
http://oesf-edu.com/aboutconsortium/
・ 本教育プログラムは、その中で提供される教材全てを含め、
OESFからのいかなる保証もなしに提供されます。OESFは、本
コースの内容またはコースの詳細な情報を使用することに起因して、
または誤って使用することに起因して何らかの障害や法的な行為が
生じても、いかなる責任も負いません。
This material is licensed under the Creative Commons License BY-NC-SA 4.0.
講義の目的
• Androidのポーティングに関する
基本的な知識を身につける。
-カーネルの取得/Build方法
-Androidの起動
-デバイスドライバの開発
-各ツールの使用方法
・実習を通して、ポーティング手法を体験
する。
3This material is licensed under the Creative Commons License BY-NC-SA 4.0.
1章.Androidとは
4This material is licensed under the Creative Commons License BY-NC-SA 4.0.
1章の概要
• 1.1 Androidとは?
• 1.2 組込みAndroid OSとは
• 1.3 Androidで出来る事
• 1.4 ライセンス
• 1.5 組込み用途でのAndroidメリット
5This material is licensed under the Creative Commons License BY-NC-SA 4.0.
1.1 Androidとは?
• Androidとは、携帯端末用のプ
ラットフォームである。
• Linuxベースのオープンソース・O
S、ミドルウェアなどソフトウェアス
タックパッケージで構成されている。
• 主にスマートフォンやタブレットPCなど
の携帯端末のプラットフォームとして利
用されている。
6This material is licensed under the Creative Commons License BY-NC-SA 4.0.
1.1 Androidとは?
• Androidの歴史
7
日 付 内 容
2003年10月 Android社発足
2005年8月 GoogleがAndroid社買収
2007年11月 OHA(Open Handset Alliance)発足、SDK 1.0リリース
2009年4月~7月 SDK 1.5r1~1.5r3リリース DoCoMoより「HT-03A」発売
2009年9月 SDK 1.6リリース
2009年10月~12月 SDK 2.0/2.0.1リリース
2010年1月 SDK 2.1リリース
2010年5月~9月 SDK 2.2~2.2.1リリース
2010年12月~2011年2月 SDK 2.3~2.3.3リリース
2011年2月 SDK 3.0リリース
2011年5月~7月 SDK3.1/SDK3.2
2011年10 SDK4.0
This material is licensed under the Creative Commons License BY-NC-SA 4.0.
1.2 組込みAndroid OSとは
• 組込み開発はCPUパワー、メモリ制限との戦い
ー 組込みデバイスに求められる高機能化に対する最適
化
が背景にある。従来の携帯電話に採用されている
Symbian、KCP+ではコストがかかる
ー スマートフォンで使用している高機能なデバイスの
環境が
利用できる
ー デバイスにアクセスするフレームワークが用意され
ている
ー Linux同様にハードウェアの制御できるネイティブ
コードの 8This material is licensed under the Creative Commons License BY-NC-SA 4.0.
1.3 Androidで出来る事
• Androidが提供する機能でスマートフォン
以外での組込みOSとして利用できる。
9
1.デバイスサポート
2.ユーザーインタフェース
3.開発環境
4.ライセンス
This material is licensed under the Creative Commons License BY-NC-SA 4.0.
1.3 Androidで出来る事
10
ネットワーク接続、GPS 、各センサー、写真、動画の
ハードウェアをサポート
Linuxカーネル・ドライバが流用できる為、
様々なハードウェアに対応しやすく、ポーティングが可能
1.デバイスサ
ポート
This material is licensed under the Creative Commons License BY-NC-SA 4.0.
1.3 Androidで出来る事
11
タッチパネルでのGUI操作が可能
高度なインターフェースの利用が可能
組込み機器でも高度なインターフェースの利用が可能
2.ユーザーインタ
フェース
This material is licensed under the Creative Commons License BY-NC-SA 4.0.
1.3 Androidで出来る事
12
Javaを中心とした開発効率のよい、開発環境が使用できる
JavaやC/C++等、高速な高級言語の使用が可能
ネイティブ層も使い慣れた言語で開発が可能
JavaScriptでのハードウェア制御、HTMLでのGUI画面開発。
3.開発環境
This material is licensed under the Creative Commons License BY-NC-SA 4.0.
1.3 Androidで出来る事
13
ライセンスフリーなOS
組込み機器でもライセンスフリーは変わらず。
ただし、ネイティブ開発に関してはGPL汚染に
注意する必要がある
4.ライセンス
This material is licensed under the Creative Commons License BY-NC-SA 4.0.
1.4 ライセンス
14
一般公衆利用許諾契約書で以下を承諾する
1、プログラムの実行
2、プログラムの動作を調べ、それを改変すること
(ソースコードへのアクセスは、その前提になる)
3、複製物の再頒布
4、プログラムを改良し、改良を公衆にリリースする
権利(ソースコードへのアクセスは、その前提になる)
GPLライセンス
This material is licensed under the Creative Commons License BY-NC-SA 4.0.
1.4 ライセンス
15
他のライセンス
プロダクト ライセンス
Android Apache Licence 2.0
Androidエ
ミュレータ
GNU General Public Li
cense(GPL)
Eclipse Eclipse Public Licens
e
Webkit LGPL and BSD License
Linux GNU General Public Li
cense(GPL)
This material is licensed under the Creative Commons License BY-NC-SA 4.0.
1.5 組込み用途での
Androidメリット
• 開発ツール、ソースコード、ドキュメントが無償で入手
できる。
ー Linuxカーネルを使用しており、フリーかつオープ
ンなライ
センスである
ー Linuxの資産を活かせる
(ライブラリ、ソフトウェアスタック)
ー 高度な機能が利用できる。
(ネット接続、静止画、動画、各センサー)
ー 技術習得コストが低い
16This material is licensed under the Creative Commons License BY-NC-SA 4.0.
2章概要
2.1 Android OS レイア構成
2.2 Android OS関係図
2.3 組込み開発に必要な環境
17This material is licensed under the Creative Commons License BY-NC-SA 4.0.
• Android OSのレイア構成
実行が可能
2.1 Android OS レイア構成
18This material is licensed under the Creative Commons License BY-NC-SA 4.0.
• Android の一般的なレイア概要
2.1 Android OS レイア構成
19This material is licensed under the Creative Commons License BY-NC-SA 4.0.
• Android OSのレイア概要
2.1 Android OS レイア構成
20This material is licensed under the Creative Commons License BY-NC-SA 4.0.
• Android OS bionicを含むレイア概要
2.1 Android OS レイア構成
21This material is licensed under the Creative Commons License BY-NC-SA 4.0.
2.2 Android OS関係図
22
Android
アプリケー
ション
Android
アプリケー
ション
Androidフレームワーク
Androidアプリケーション
JNIJNI
Linux Kernel
Dalvik VM
HAL
デバイスドライバ
ライブラ
リ
ディスプレ
イ
ネットワー
ク
Bluetooth カメラ GPS Etc..
Etc..
This material is licensed under the Creative Commons License BY-NC-SA 4.0.
2.3 組込み開発に必要な環境
・JNI(Java Native Interface)の役割
JNIはJavaからネイティブコードを呼び出せる仕組み。
JavaとC/C++を結び付けるライブラリと、I/F規約の構
成。
23This material is licensed under the Creative Commons License BY-NC-SA 4.0.
2.3 組込み開発に必要な環境
・提供されている開発ツールとして、下記2つがあります
ー Android SDK【Software Development Kit】
バーチャルマシーン(Dalvik VM)上で動作する
Android
アプリケーションを作成する為のツール
ー Android NDK【Native Development Kit】
ネイティブ開発環境。ハードウェアへ直接アクセ
スする
プログラムを作成する事ができます。C又はC+
+で作成
し、作成した関数をJavaソースコード側から呼
び出しがで 24This material is licensed under the Creative Commons License BY-NC-SA 4.0.
3章.組込みボードについて
25This material is licensed under the Creative Commons License BY-NC-SA 4.0.
3章概要
• 3.1 プラットフォーム
• 3.2 MIPS
• 3.3 MIPSシェア
• 3.4 組込みボード BeagleBoard概要
• 3.5 BeagleBoard外観
• 3.6 BeagleBoardブロック図
• 3.7 BeagleBoardポーティング イメージ
26This material is licensed under the Creative Commons License BY-NC-SA 4.0.
3.1 プラットフォーム
• Androidが動作するプラットフォーム
Androidが動作するプラットフォームは広範囲に
存在します。
Androidで使用しているカーネルは、Linux2.6のカー
ネルが動作することが最低条件となります。
27This material is licensed under the Creative Commons License BY-NC-SA 4.0.
3.1 プラットフォーム
1.Androidは基本的にARM系CPU向けに作成されてい
る。
2.MIPS社でも開発ツールを市リリースしており、
MIPSベースでも動作可能。
Android on MIPS
http://developer.mips.com/android/
Android on x86
http://www.android-x86.org/
28This material is licensed under the Creative Commons License BY-NC-SA 4.0.
3.2 MIPS
29
1.MIPS
MIPSは多くのライセンスを世界中の半導体メー
カーなどに供与しており、さまざまな製品に搭載さ
れている。
This material is licensed under the Creative Commons License BY-NC-SA 4.0.
3.3 MIPSシェア
2.製品別シェア
30This material is licensed under the Creative Commons License BY-NC-SA 4.0.
3.3 MIPSシェア
31This material is licensed under the Creative Commons License BY-NC-SA 4.0.
3.4 組込みボード BeagleBoard概要
• BeagleBoard(リビジョンC4)
– CPU TI OMAP3530
– ARM Cortex-A8コア (720 MHz)
• ARMベースのCPUコアとDSP(Digital Signal Processor)コ
ア,2D/3Dグラフィックス・アクセラレータ・コアを統合
した米Texas Instruments社製チップ
• ディジタル映像出力(HDMI)、SDカード,USB2.0ポー
ト,RS-232Cポート,オーディオ入出力などな外部インタ
フェースを備えている
• NAND Flash メモリ 256M
• RS-232C ポート,JTAG コネクタ
32This material is licensed under the Creative Commons License BY-NC-SA 4.0.
3.4 組込みボード BeagleBoard概要
・ BeagleBoardを使用する理由
Androidが標準でサポートしているアーキテク
トはARM系が多い。
32ビットの組込み機器向けCPUでARM系が使用
されている。
33This material is licensed under the Creative Commons License BY-NC-SA 4.0.
3.5 BeagleBoard外観
34This material is licensed under the Creative Commons License BY-NC-SA 4.0.
3.6 BeagleBoardブロック図
35This material is licensed under the Creative Commons License BY-NC-SA 4.0.
3.7 BeagleBoardポーティング イメージ
36
・ BeagleBoardへ実装イメージ
BeagleBoardに実装するために、Androidの
ソースコードを取得し、コンパイルし実行コード
を生成します。
PCではソースコードをコンパイルすれば、実
行ファイルが生成されますが、組込みではター
ゲットとなる機器は開発できないケースが多い。
一般的には、別機器でコンパイルする「クロス
コンパイル」を実施し実行コードを生成します。
This material is licensed under the Creative Commons License BY-NC-SA 4.0.
3.7 BeagleBoardへポーティング
37
・ ポーティング作業イメージ
1.クロスコンパ
イル
環境構築
2.ソースコード取
得
3.ライブラリ、ド
ライバ
開発
4.BeagleBoard用
クロスコンパイル
5.BeagleBoard
イメージ転送
6.起動設定
Config等
7.Android
起動
This material is licensed under the Creative Commons License BY-NC-SA 4.0.
3.7 BeagleBoardへポーティング
38
・ クロスコンパイル環境
apt-getコマンドでAndroidのビルドの際に必
要なパッケージのインストールします。
主な作業としてツールチェーン(クロスコンパイ
ラ)と
DevKit向けのツールを導入します。
※実際の作業は次章で実施します
This material is licensed under the Creative Commons License BY-NC-SA 4.0.
3.7 BeagleBoardへポーティング
39
・ uImageツール導入
Kernelイメージはu-bootが扱えるuImage形式に
する必要があるため,イメージ作成ツールを導入
します
This material is licensed under the Creative Commons License BY-NC-SA 4.0.
3.7 BeagleBoardへポーティング
40
・ ソース取得準備
Androidのソース・コードの取得にはgitコマン
ドのラッパ・スクリプトであるrepoを使用するた
め,curlコマンドで取得します。
Androidのソース・コードはプロジェクトごと
にgitレポジトリで管理されており,repoスクリプ
トを使用して複数のレポジトリからソースを一括
取得します。
This material is licensed under the Creative Commons License BY-NC-SA 4.0.
3.7 BeagleBoardへポーティング
41
・ ソース取得準備
OMAP用のAndroid KernelはBeagleBoardの
Androidポーティングで有名なlabs.embinux.orgの
ものを使用することにします。
標準のmanifestに含まれていないレポジトリは
local_manifest.xmlに追加することで取得できます。
local_manifest.xmlで追加したソースをrepo コマン
ド
で取得します。
This material is licensed under the Creative Commons License BY-NC-SA 4.0.
3.7 BeagleBoardへポーティング
42
・ BootDisk準備
SDカードの起動を行うには,先頭パーティ
ションを決まったシリンダ・ヘッド構成でかつ
ファイル・システムをvfat(FAT32)にする必要が
あります。
This material is licensed under the Creative Commons License BY-NC-SA 4.0.
3.7 BeagleBoardへポーティング
43
・ブート・ローダ準備
パーティション1にブート・ローダ(xloader
とu-boot)を格納します。
<格納ファイル>
xloarder(MLO)
u-boot.bin
This material is licensed under the Creative Commons License BY-NC-SA 4.0.
3.7 BeagleBoardへポーティング
44
・カーネル準備
BeagleBoard向けのカーネルBuildします。
Buildの前にターゲットに合わせたパッチを適用
します。
<主な修正>
・Bluetooth USBアダプタ
This material is licensed under the Creative Commons License BY-NC-SA 4.0.
3.7 BeagleBoardへポーティング
45
・ Bluetooth USBアダプタ
AndroidではBluetoothモジュールの電源制御に
RF KillというKernelの機能(Switch Class)を使用し
ますが,Bluetooth USBアダプタはこの仕組みに対
応していません.Bluetoothの電源制御は
libbluedroidライブラリで実施しており、ソース・
コードを修正する必要があります
This material is licensed under the Creative Commons License BY-NC-SA 4.0.
3.7 BeagleBoardへポーティング
46
・バッテリレスデバイス
BeagleBoardはバッテリを持たないため,バッ
テリ残量が0%と認識され、Android起動直後に低
バッテリの警告がポップアップします。
これに対応するため,バッテリ・サービスの
バッテリ状態の設定処理を修正します。
This material is licensed under the Creative Commons License BY-NC-SA 4.0.
3.7 BeagleBoardへポーティング
47
・マウスを有効化
Androidはデフォルトでタッチ・スクリーンと
トラック・ボールに対応していますが、ポイン
ティング・デバイスに対応しておらず、マウス・
カーソルも表示されません。この為、 Androidで
マウス操作を可能にするための修正が必要です。
This material is licensed under the Creative Commons License BY-NC-SA 4.0.
3.7 BeagleBoardへポーティング
48
・マウスを有効化
Androidはデフォルトでタッチ・スクリーンと
トラック・ボールに対応していますが、ポイン
ティング・デバイスに対応しておらず、マウス・
カーソルも表示されません。この為、 Androidで
マウス操作を可能にするための修正が必要となり
ます。
This material is licensed under the Creative Commons License BY-NC-SA 4.0.
3.7 BeagleBoardへポーティング
49
・キーレイアウトファイル修正
Androidでは,インプット・デバイスごとに
キー・レイアウト・ファイル(Androidのキー名
とキー・コードのマップ・ファイル)を持つこと
ができます。デフォルトではエミュレータ用の
キー・マップ・ファイル(qwerty.kl)がインス
トールされます。このデフォルトのキー・レイア
ウト・ファイルはBACK(戻る)が専用ボタンに
のみ割り当てられている為、EscキーにもBACKを
割り当てます。
This material is licensed under the Creative Commons License BY-NC-SA 4.0.
3.7 BeagleBoardへポーティング
50
・ initプロセス設定ファイル
Androidのinitプロセスが使用する設定ファイル
(init.rc)を修正します。
initの“init”トリガのアクションとして,ルー
ト・ファイル・システムをread only(ro)で再マウ
ントする処理が含まれていますが、この処理は
Kernelパニックを引き起こしてしまう為、コメン
ト・アウトし、変わりにbootトリガ―を記述しま
す。
This material is licensed under the Creative Commons License BY-NC-SA 4.0.
3.7 BeagleBoardへポーティング
51
・ Homeキー有効化
デフォルトでは携帯電話向けに,SIMのアク
ティベーションが完了するまで、Homeキーを無
効にする処置を行っています.これに対応するた
め,system.propファイルにHomeキーを有効にす
るプロパティを設定しておきます。
This material is licensed under the Creative Commons License BY-NC-SA 4.0.
3.7 BeagleBoardへポーティング
52
・ボード構成設定ファイル
Androidのビルド・システムは,ターゲットと
なるボードに合わせてビルド構成が変更可能なよ
うに,ボードごとに構成ファイル
(BoardConfig.mk)を持つことができます。
This material is licensed under the Creative Commons License BY-NC-SA 4.0.
3.7 BeagleBoardへポーティング
53
・ボード構成設定ファイル
This material is licensed under the Creative Commons License BY-NC-SA 4.0.
3.7 BeagleBoardへポーティング
54
・ SDカード有効化
Androidではvold (ボリューム・デーモン)がSD
カードのマウントを行います。デフォルトではエ
ミュレータ用のvold設定ファイル(vold.conf)が
インストールされますが、このファイルを
BeagleBoard用の設定に修正します。
This material is licensed under the Creative Commons License BY-NC-SA 4.0.
3.7 BeagleBoardへポーティング
55
・ Anroidのソース・コードビルド
ターゲットボードに合わせた環境にて、Android
のソース・コードをビルドを行い、Userlandを構
築します。
This material is licensed under the Creative Commons License BY-NC-SA 4.0.
3.7 BeagleBoardへポーティング
56
・ Userlandコピー
ビルドが完了以下のフォルダにイメージ・ファイ
ルが作成されます。
“~/mydroid/out/target/product/generic”
Userlandを構成する個別ファイルをSDカード
のパーティション1にコピーし、パーミッション
とオーナを変更します。
This material is licensed under the Creative Commons License BY-NC-SA 4.0.
4章.開発環境
57This material is licensed under the Creative Commons License BY-NC-SA 4.0.
4章の概要
58
• 4.1 全体構成
• 4.2 開発環境
• 4.3 beagleboardを動かす準備
This material is licensed under the Creative Commons License BY-NC-SA 4.0.
4.1 全体構成
• ハードウェア構成全体図
59
HDMI
RS232C
LCD
BeagleBoard
USB
SD
入力切り替え
アナログ/
開発PC
ディストリビューション: Ubuntu 10.10
カーネル: 2.6.35
This material is licensed under the Creative Commons License BY-NC-SA 4.0.
4.2 開発環境
• 開発環境構築
組込み用途の開発ツール
1.Ubuntu
2.JDK5(sun-java5-jdk)
3.Eclipse
4.Android Development Tool(Eclipse)
5.Android SDK
6.Android NDK
60This material is licensed under the Creative Commons License BY-NC-SA 4.0.
4.2 開発環境
• JDKについて
Androidに搭載しているDalvikDMはGoogle独自
ただし、独自の開発言語とコンパイラを作ら
ず、Javaを選択している。
Android SDKはJavaのバイトコードをDEXコード
に変換するトランスコーダを提供している
61This material is licensed under the Creative Commons License BY-NC-SA 4.0.
4.2 開発環境
• NDK(Native Development Kit)
AndroidアプリケーションはDalvikVM上で動作
しますが、NDKを利用してネイティブコードに
置き換えることができる。
62This material is licensed under the Creative Commons License BY-NC-SA 4.0.
4.2 開発環境
63
C/C++ ソースコー
ド
コンパイラ
中間ライブラリ
リンカ
各種ライブラリ
ネイティブコード
ライブラリ
Java ソースコード
コンパイラ
DalvikVM変換
各種
Javaライブラ
リ
Return ネイティブコードCALL
DalvikVM
バイトコード
ネイティブコード
ライブラリ
Android NDK
Android SDK
Android
アプリケーショ
ン
• NDKの概要
This material is licensed under the Creative Commons License BY-NC-SA 4.0.
4.2 開発環境
• NDKのメリット
1.既存のソースコードが利用できる
(C/C++)
2.Linuxのシステムを直接制御が可能 ※1
3.CPU機能をフルに引き出せる
(パフォーマンスを求める処理に向いてい
る)
64This material is licensed under the Creative Commons License BY-NC-SA 4.0.
4.2 開発環境
• NDKの制約
NDKはメリットだけではなく、制約は存在する
1.C++の標準ライブラリ、RTTI,STLが使用でき
ない
2.Androidワークフレームが呼び出せない
3.メモリ管理がシビア
4.リソース管理がシビア
5.例外処理ができない
6.NDKで高速化できない場合もある
65This material is licensed under the Creative Commons License BY-NC-SA 4.0.
4.2 開発環境
• 注意ポイント
制約の中で特に気付けるポイントとして、メ
モリ及びリソースの管理が必要。
Javaであればバーチャルマシーンが解放する
ので気にする必要はありませんが、C/C++の場合
は開発者が意識する必要がある。
66This material is licensed under the Creative Commons License BY-NC-SA 4.0.
4.2 開発環境
• 高速化できない理由
JNIの呼出にかかるオーバーヘットが発生。
これはJavaからJNI変換がおこなわれる為で、
呼び出す回数に注意する必要がある。
67This material is licensed under the Creative Commons License BY-NC-SA 4.0.
4.3 beagleboardを動かす準備
• 開発環境構築
Beagleboard用のカーネルを構築します。
ソースを取得する際のディレクトリを作成しま
す
ディレクトリ名:
TI_Android_GingerBread_2_3_4Sources
※以後、ワーキングディレクトリの起点は特に指定しない限
り”TI_Android_GingerBread_2_3_4Sources” とします。
68
詳細は http://processors.wiki.ti.com/index.php/TI-Android-GingerBread-2.3.4-DevKit-2.1_DeveloperGuide
This material is licensed under the Creative Commons License BY-NC-SA 4.0.
4.3 beagleboardを動かす準備
• ソース取得
wgetコマンドを使用し、Androidカーネルソース
一式をダウンロードし取得致します。
69
$ wget http://software-
dl.ti.com/dsps/dsps_public_sw/sdo_tii/TI_Android_DevKit/TI_Android_GingerBread_2_3_4_De
vKit_2_1/exports/TI_Android_GingerBread_2_3_4Sources.tar.gz
$ tar -xvzf TI_Android_GingerBread_2_3_4Sources.tar.gz
$ cd TI_Android_GingerBread_2_3_4Sources
$ ./.repo/repo/repo sync --local-only
This material is licensed under the Creative Commons License BY-NC-SA 4.0.
4.3 beagleboardを動かす準備
• ソース取得
wgetコマンドを使用し、Androidカーネルソース
一式をダウンロードし取得致します。
70
wget とは、UNIXコマンドラインで HTTP や FTP 経由のファイル取得
を行ツール
リンク先を階層で指定して一気に取得することができ、レジューム
機能があり便利です。
This material is licensed under the Creative Commons License BY-NC-SA 4.0.
4.3 beagleboardを動かす準備
• パッケージのダウンロード方法。
71
# パッケージのダウンロード
$ sudo apt-get install git-core gnupg flex bison gperf build-essential zip
curl zlib1g-dev libc6-dev lib32ncurses5-dev ia32-libs x11proto-core-dev
libx11-dev lib32readline5-dev lib32z1-dev libgl1-mesa-dev g++-multilib
mingw32 tofrodos python-software-properties uboot-mkimage -y
This material is licensed under the Creative Commons License BY-NC-SA 4.0.
4.3 beagleboardを動かす準備
72
# JDK6のインストール
$ sudo add-apt-repository ‘deb http://archive.canonical.com/ lucid partner’
$ sudo apt-get update
$ sudo apt-get install sun-java6-jdk -y
• JDK6のダウンロードとインストール方法
Tips:
install中に何らかで強制終了した後に再インストールする場合
下記フォルダのゴミを削除します。
/var/lib/dpkg/updates/*
This material is licensed under the Creative Commons License BY-NC-SA 4.0.
4.3 beagleboardを動かす準備
• ソースコードをビルドする際に必要なツールチェーン
(クロスコンパイラ)とDevKit向けのツールを導入します。
コンパイラ、リンカなどのBeagleBoard上で動くプログ
ラムを作成するためのツール集です。
binutils+gcc+glibc or uclibcなどが含まれます。
73This material is licensed under the Creative Commons License BY-NC-SA 4.0.
4.3 beagleboardを動かす準備
• ツールチェーン(クロスコンパイラ)とDevKit向けのツールを導入方法。
74
$ mkdir ~/tools
$ cd /tmp
$ wget http://www.codesourcery.com/sgpp/lite/arm/portal/package6488/public/arm-none-
linux-gnueabi/arm-2010q1-202-arm-none-linux-gnueabi-i686-pc-linux-gnu.tar.bz2
$ tar xvjf arm-2010q1-202-arm-none-linux-gnueabi-i686-pc-linux-gnu.tar.bz2 -C ~/tools/
$ echo 'export PATH=$PATH:~/tools/arm-2010q1/bin' >>~/.bashrc
$ source ~/.bashrc
$ wget http://software-
dl.ti.com/dsps/dsps_public_sw/sdo_tii/TI_Android_DevKit/TI_Android_GingerBread_2_3_4_De
vKit_2_1/exports/Tools.tar.gz
$ tar xvzf Tools.tar.gz
$ mv Tools/* ~/tools
This material is licensed under the Creative Commons License BY-NC-SA 4.0.
4.3 beagleboardを動かす準備
• ユーザランドのBuild
Beagleboard rev C4用のAndroidのユーザランドをビルドする
には以下のコマンドを入力します。
ユーザーランドとは
ハードウェアを直接管理操作するなどの最も中心的な機能の部分を、特に
カーネルと呼ぶケースがあります。この場合、カーネル以外の部分(シェ
ルなど)はユーザーランドと呼ばれています。
空間が違う事から、カーネルとユーザーランドではCPUモードやアドレス
空間が異なっています。
75
$ make TARGET_PRODUCT=beagleboard TARGET_BUILD_VARIANT=eng OMAPES=3.x -j4
This material is licensed under the Creative Commons License BY-NC-SA 4.0.
4.3 beagleboardを動かす準備
• ビルドシステムの必須オプション
TARGET_PRODUCTとTARGET_BUILD_VARIANTはAndroidのビルドシステム
で必須のオプションです。 下記では、makeコマンドに直接オプ
ションを渡しています。 事前に必須のビルドオプションを設定する
には以下のコマンドを入力します。
※なおAndroid-GingerBread-2.3.4 DevKitでは、ユーザランドをビルドす
るとカーネルも自動的にビルドされます。
76
$ source build/envsetup.sh
$ lunch beagleboard-eng # lunch <TARGET_PRODUCT>-<TARGET_BUILD_VARIANT> 形式で指
定
$ make OMAPES=3.x -j4
This material is licensed under the Creative Commons License BY-NC-SA 4.0.
4.3 beagleboardを動かす準備
• Bootプロセスイメージ
77
電源ON
ROMプログラム
X-Loader
U-boot
Linuxカーネル
Android起動
(init処理)
物理アドレ
ス
0x00000000
This material is licensed under the Creative Commons License BY-NC-SA 4.0.
4.3 beagleboardを動かす準備
• X-Loaderビルド
beagleboardではbootローダーとして、u-bootを使用します。
X-Loaderは特定のアドレスにプログラムをロードする機能がありま
す。
78
$ cd x-loader
$ make CROSS_COMPILE=arm-none-linux-gnueabi- omap3beagle_config
$ make CROSS_COMPILE=arm-none-linux-gnueabi-
$ ~/tools/signGP/signGP x-load.bin
$ mv x-load.bin.ift MLO
This material is licensed under the Creative Commons License BY-NC-SA 4.0.
4.3 beagleboardを動かす準備
• 次にU-Bootをビルドします。
U-bootは組込みで良く使用されるオープンソースのboot loader。
ネットワーク接続や環境変数を保持できます
79
$ cd u-boot
$ make CROSS_COMPILE=arm-none-linux-gnueabi- omap3_beagle_config
$ make CROSS_COMPILE=arm-none-linux-gnueabi-
<参考>
u-boot から利用可能なアドレス範囲
DDR-SDRAM(64M)
開始:00000000 終了:03FFFFFF
内部メモリマップドI/O領域
開始: F0000000 終了: F000FFFF
フラッシュメモリ(8M)
開始: FF800000 終了: FFFFFFFF
This material is licensed under the Creative Commons License BY-NC-SA 4.0.
4.3 beagleboardを動かす準備
• 起動スクリプトファイル作成
U-Boot用の起動スクリプトファイルを作成します
80
$ cd ~/tool/mk-bootscr/
$ ./mkbootscr # boot.scrファイルが作成される
This material is licensed under the Creative Commons License BY-NC-SA 4.0.
4.3 beagleboardを動かす準備
• ファイルシステム設定
SDカードブート起動用にSDカードのパーティションと
ファイルシステムを設定します。 PCにSDカードを挿入
し、以下のコマンドを実行します。
81
$ dmesg | tail # SDカードのブロックデバイス名を確認します。
$ export LANG=C
$ sudo ./mkmmc-android.sh /dev/sdx # /dev/sdxは各自の環境に合わせて下さい。
This material is licensed under the Creative Commons License BY-NC-SA 4.0.
4.3 beagleboardを動かす準備
• ビルド済みのファイルコピー
SDカードにビルド済みの以下のファイルをコピーしま
す。
1. X-Loaderイメージ
2. U-Bootイメージ
3.カーネルイメージ
4.起動スクリプト
5.Rootファイルシステム ユーザランド(rootfs)
6. Rootファイルシステム ユーザランド(system)
82
$ cp -a x-loader/MLO /media/boot # X-Loaderイメージ
$ cp -a u-boot/u-boot.bin /media/boot # U-Bootイメージ
$ cp -a kernel/arch/arm/boot/uImage /media/boot # カーネルイメージ
$ cp -a ~/tools/mk-bootscr/boot.scr /media/boot # 起動スクリプト
$ cp -a out/target/product/beagleboard/rootfs/* /media/rootfs # ユーザランド(rootfs)
$ cp -a out/target/product/beagleboard/system/* /media/rootfs/system # ユーザランド
(system)
This material is licensed under the Creative Commons License BY-NC-SA 4.0.
4.3 beagleboardを動かす準備
これで起動ディスクとカーネルの準備は完了です。
Beagleboardに電源を投入し、Androidの起動を行います。
83This material is licensed under the Creative Commons License BY-NC-SA 4.0.
5章.ドライバ開発
5章では簡単なドライバの作成を行います。
GPIOを使用し、LEDの点灯を行うドライバを作成し、開発
の
流れを学びます。
・現在の実装確認
・LEDドライバ作成
・HALの実装
84This material is licensed under the Creative Commons License BY-NC-SA 4.0.
5章の概要
85
5.1 LEDドライバ
5.2 実装確認
5.3 LEDドライバの作成
5.4 LEDドライバ実習
5.5.Androidでのハードウェアアクセス
5.6 LEDデバイス用のHALのインタフェース
5.7 LEDドライバ向けHALの実装(lights.c)
5.8.LEDドライバ向けHALの実装(Android.mk)
5.9.LEDドライバ向けHALの実装(アクセス権設定)
5.10 LEDドライバ向けHALのBuild
5.11 LEDドライバ向けHALの実装
This material is licensed under the Creative Commons License BY-NC-SA 4.0.
5.1 LEDドライバ
• LEDドライバ概要
beagleboardにはユーザーが自由に利用できるLEDが
2つ(user0, user1)が実装されている。
86This material is licensed under the Creative Commons License BY-NC-SA 4.0.
5.1 LEDドライバ
• このuser0, user1のLEDを制御するドライバはLinux標準のLED Class フ
レームワークを利用して実装されています。
87
SYSFSインタフェース
LED Class フレームワーク
LED GPIOドライバ
user0
LED
user1
LED
ユーザ空間
カーネル空間
ハードウェア
LED トリガードラ
イバ
ユーザ空間プログラム
This material is licensed under the Creative Commons License BY-NC-SA 4.0.
5.1 LEDドライバ
• カーネルコンフィギュレーション変更
LED Classフレームワーク、 LED GPIOドライバ、 LEDトリガードライ
バを利用するにはカーネルコンフィギュレーションの変更が必要と
なります。
カーネルコンフィギュレーション変更方法
88
$ cd kernel
$ make ARCH=arm CROSS_COMPILE=arm-none-linux-gnueabi- omap3_beagle_android_defconfig
$ make ARCH=arm CROSS_COMPILE=arm-none-linux-gnueabi- menuconfig
This material is licensed under the Creative Commons License BY-NC-SA 4.0.
5.1 LEDドライバ
• コンフィグを有効化
Spaceキーを押下し、対象のコンフィグを有効化します。
89
Device Drivers --->
[*] LED Support (CONFIG_NEW_LEDS) --->
[*] LED Class Support (CONFIG_LEDS_CLASS)
*** LED drivers ***
<*> LED Support for GPIO connected LEDs (CONFIG_LEDS_GPIO)
[*] Platform device bindings for GPIO LEDs (CONFIG_LEDS_GPIO_PLATFORM)
[*] LED Trigger support (CONFIG_LEDS_TRIGGERS)
*** LED Triggers ***
<*> LED Heartbeat Trigger (CONFIG_LEDS_TRIGGER_HEARTBEAT)
<*> LED Default ON Trigger (CONFIG_LEDS_TRIGGER_DEFAULT_ON)
This material is licensed under the Creative Commons License BY-NC-SA 4.0.
5.1 LEDドライバ
・カーネル再Build
カーネルコンフィグを変更を適用するには、カーネルを再ビルドする
必要があります。
以下の手順で再Buildを行います
90
$ make ARCH=arm CROSS_COMPILE=arm-none-linux-gnueabi- uImage
This material is licensed under the Creative Commons License BY-NC-SA 4.0.
5.1 LEDドライバ
・LEDドライバの識別子
ドライバを作成する為には識別名やsysfsエントリ名が必要となりま
す。
今回はソースファイル「board-omap3beagle.c」に
識別名、エントリ名、点滅トリガ、GPIO番号を追記致します。
91This material is licensed under the Creative Commons License BY-NC-SA 4.0.
5.2 実装確認
・現実装確認
【kernel/arch/arm/mach-omap2/board-omap3beagle.c】
92
static struct gpio_led gpio_leds[] = {
{
.name = "beagleboard::usr0",
.default_trigger = "heartbeat",
.gpio = 150,
},
{
.name = "beagleboard::usr1",
.default_trigger = "mmc0",
.gpio = 149,
},
{
.name = "beagleboard::pmu_stat",
.gpio = -EINVAL, /* gets replaced */
.active_low = true,
},
};
LED Classの識別名。 sysfsエントリ名
となる。
LEDを点滅させるトリガー
GPIO番号
This material is licensed under the Creative Commons License BY-NC-SA 4.0.
5.2 実装確認
• 現実装確認
プラットフォームデバイス定義と対応するドライバ名を確認します。
93
【kernel/arch/arm/mach-omap2/board-omap3beagle.c】
static struct gpio_led_platform_data gpio_led_info = {
.leds = gpio_leds,
.num_leds = ARRAY_SIZE(gpio_leds),
};
static struct platform_device leds_gpio = {
.name = "leds-gpio",
.id = -1,
.dev = {
.platform_data = &gpio_led_info,
},
};
対応するドライバ名(プラットフォームデバ
イスに対応するドライバを決定するための
キー)。 LED GPIOドライバの名前であ
る”leds-gpio”を指定。
プラットフォームデバイスの定義
This material is licensed under the Creative Commons License BY-NC-SA 4.0.
5.2 実装確認
94
static struct platform_device *omap3_beagle_devices[] __initdata = {
&leds_gpio,
&keys_gpio,
&beagle_dss_device,
};
platform_add_devices(omap3_beagle_devices,
ARRAY_SIZE(omap3_beagle_devices));
プラットフォームデバイスとし
て一括登録
• プラットフォームデバイス一括登録
プラットフォームデバイスを一括登録確認
This material is licensed under the Creative Commons License BY-NC-SA 4.0.
5.2 実装確認
・leds-gpio.c実装
leds-gpioはプラットフォームドライバの確認。
95
【kernel/ drivers/leds /leds-gpio.c】
static struct platform_driver gpio_led_driver = {
.probe = gpio_led_probe,
.remove = __devexit_p(gpio_led_remove),
.driver = {
.name = "leds-gpio",
.owner = THIS_MODULE,
},
};
ret = platform_driver_register(&gpio_led_driver);
leds-gpioはプラットフォームドライ
バとして実装されている。
This material is licensed under the Creative Commons License BY-NC-SA 4.0.
5.2 実装確認
96
【kernel/ drivers/leds /leds-gpio.c】
ret = platform_driver_register(&gpio_led_driver);
static int __devinit gpio_led_probe(struct platform_device *pdev)
{
struct gpio_led_platform_data *pdata = pdev->dev.platform_data;
:
for (i = 0; i < pdata->num_leds; i++) {
ret = create_gpio_led(&pdata->leds[i], &leds_data[i],
&pdev->dev, pdata->gpio_blink_set);
:
}
platform_set_drvdata(pdev, leds_data);
}
プラットフォームデバイスに対するドライ
バが見つかった場合に呼び出されるプロー
ブ関数では、引数でプラットフォームデー
タを受け取ることができる。
関数create_gpio_led()では、gpioの初期化処
理と、LED Classへの登録を行う。 LED Class
として登録されたLEDデバイスは、SYSFSで
制御可能となる。
・leds-gpio.c実装確認 <続き>
This material is licensed under the Creative Commons License BY-NC-SA 4.0.
5.3 LEDドライバの作成
• BeagleboardにはEXPANSIONヘッダがあり、OMAP Pinを
GPIOやI2C機能として利用することで、ペリフェラルデバ
イスを拡張することができます。
97This material is licensed under the Creative Commons License BY-NC-SA 4.0.
5.3 LEDドライバの作成
• OMAP Pin接続状況
EXPANSIONヘッダとOMAP Pinの接続状況は、BBSRM
(BeagleBoard System Reference Manual)で確認できます。
BBSRMのPage96のTable20に、EXPANSIONヘッダのコネクタ番号とOMAP Pin番号の
対応表があります。
<参考>
http://beagleboard.org/static/BBSRM_latest.pdf)
98This material is licensed under the Creative Commons License BY-NC-SA 4.0.
5.3 LEDドライバの作成
• コネクタ番号とOMAP Pin番号の対応表
今回は、コネクタ番号24/OMAP Pin AF15(GPIO 168)を使用してLEDを追加実装します。
99
:
This material is licensed under the Creative Commons License BY-NC-SA 4.0.
5.3 LEDドライバの作成
• OMAP PinはPin Multiplex(PinMux)の設定により、GPIOやI2Cなど最大8つの機
能(Mode0~Mode7)を切り替えて使用することができます(OMAPのレジスタ
でPinMuxを制御)。
• PinMuxのレジスタの詳細は
「OMAP35x Applications Processor Technical Reference Manual(OMAP35xx
TRM)」
(http://www.ti.com/lit/ug/spruf98u/spruf98u.pdf)で確認できます。
• PinMuxはU-BootおよびKernelで設定することが可能です。
100This material is licensed under the Creative Commons License BY-NC-SA 4.0.
5.3 LEDドライバの作成
• PinMuxはU-BootおよびKernelで設定方法
PinMuxはU-BootおよびKernelで設定することが可能です。
※ PinMux対象のOMAP Pin AF15(GPIO 168)はMode0の機能がI2C2_SCLであり、方法1で設定すると、直後のI2C初期化関
数omap3_beagle_i2c_init()によりPinMuxがMode0に設定し直されてしまうため、本トレーニングでは方法2の
omap_mux_init_gpio()関数を利用します。
101
■U-Boot
【u-boot/board/ti/beagle/beagle.h】
・MUX_VAL()マクロで設定
■Kernel
【kernel/arch/arm/mach-omap2/board-omap3beagle.c】
方法1) OMAP3_MUX()マクロで設定しomap3_mux_init()で一括設定※
方法2) omap_mux_init_gpio()関数で設定
方法3) omap_mux_init_signal()関数で設定
方法4) __raw_write()関数でレジスタに直接設定
This material is licensed under the Creative Commons License BY-NC-SA 4.0.
5.3 LEDドライバの作成
omap_mux_init_gpio
【概要】 GPIO番号指定でPinMuxを初期化します。
【書式】 int omap_mux_init_gpio(int gpio, int val);
【引数】
int gpio GPIO番号を指定します。
int val MUXレジスタのオプション(下記参照)を指定します。
OMAP_PIN_OUTPUT(OMAP→GPIO方向の信号),
OMAP_PIN_INPUT(OMAP←GPIO方向の信号)等
【戻り値】 負値のエラーコードを返却します。
【例】 [kernel/arch/arm/mach-omap2/board-omap3beagle.c]
static void __init omap3_beagle_init(void)
{
:
ret = omap_mux_init_gpio(168, OMAP_PIN_OUTPUT);
if (ret)
printk(KERN_ERR “omap_mux_init_gpio() failed(%d)”, ret);
}
102This material is licensed under the Creative Commons License BY-NC-SA 4.0.
5.4 LEDドライバ実習
103
実
習
【実習1】
LED Classフレームワークを利用してOMAP Pin
AF15(GPIO168)に接続されたLEDを制御せよ。 追加するコ
ードは10行以内とすること(異常時の処理は省略しても
構わない)
default_trigerは”default_on”を指定することとする。
This material is licensed under the Creative Commons License BY-NC-SA 4.0.
5.4 LEDドライバ実習
104
実
習
【実習1 回答】
【kernel/arch/arm/mach-omap2/board-omap3beagle.c】
static struct gpio_led gpio_leds[] = {
{
.name = "beagleboard::usr0",
.default_trigger = "heartbeat",
.gpio = 150,
},
{
.name = "beagleboard::usr1",
.default_trigger = "mmc0",
.gpio = 149,
},
{
.name = "beagleboard::pmu_stat",
.gpio = -EINVAL, /* gets replaced */
.active_low = true,
},
{
.name = "beagleboard::extled",
.default_trigger = "default-on",
.gpio = 168,
},
};
static void __init omap3_beagle_init(void)
{
:
ret = omap_mux_init_gpio(168, OMAP_PIN_OUTPUT);
if (ret)
printk(KERN_ERR "omap_mux_init_gpio() failed(%d)", ret);
}
This material is licensed under the Creative Commons License BY-NC-SA 4.0.
5.4 LEDドライバ実習
105
実
習
【実習1 回答確認】
• カーネルビルド
カーネルをビルドし、カーネルイメージをSDカードにコピーします。
$ cd kernel
$ make ARCH=arm CROSS_COMPILE=arm-none-linux-gnueabi- uImage
$ cp arch/arm/boot/uImage /media/boot/
This material is licensed under the Creative Commons License BY-NC-SA 4.0.
5.4 LEDドライバ実習
106
実
習
【実習1 回答確認】
• シリアルコンソールからコマンド操作で、実装したLEDドライバが
正しく動作するかどうかを確認します。
$ cd /sys/class/leds/beagleboard::extled
# パーミッションを確認しておく
$ ls -l brightness
-rw-rw---- root root 4096 2000-01-01 00:00 brightness
# ※デフォルトではオーナー/グループ共にrootであるため、Frameworkからアクセスする際はアクセス権を変更する
(後述)
# 現在のLEDの状態を確認する
$ cat brightness
1
# LEDが消灯することを確認する
$ echo 0 > brightness
$ cat brightness
0
This material is licensed under the Creative Commons License BY-NC-SA 4.0.
5.5.Androidでの
ハードウェアアクセス
• HALの実装
AndroidはLinuxカーネルのドライバをそのまま利用しデ
バイスにアクセスします。 但し、フレームワーク層から
ハードウェアを操作するインタフェース(HAL)は固定であ
るため、ドライバ毎にHALの実装が必要となります。
107This material is licensed under the Creative Commons License BY-NC-SA 4.0.
5.5.Androidでの
ハードウェアアクセス
• HALを含んだレイアー概要
108
Androidプラットフォーム
アプリケーション
Androidフレームワーク
Linuxカーネル
ハードウェア
アプリケーション
ライブラリ/ネイティブ
HAL(Hardware Abstruction Layer)
This material is licensed under the Creative Commons License BY-NC-SA 4.0.
5.5.Androidでの
ハードウェアアクセス
• バックライトの制御
AndroidではLEDデバイスアクセス用のHALインタフェースを利用し
て、設定アプリケーション(Settings)からバックライトの制御を行っ
ています。
109This material is licensed under the Creative Commons License BY-NC-SA 4.0.
5.5.Androidでの
ハードウェアアクセス
• 全体イメージ
110
アプリケーション
フレームワーク
ライブラリ/
ネイティブ/HAL
Linuxカーネル ハードウェア
sysfs I/F
LEDバックライト
ドライバ
LED Class
フレームワーク
LEDバックライト
PowerManager
Light
libandroid_servers.so
Settings
BrightnessPreference
libhardware.so
lights.<hardware>.so
JNIでアクセス
システムコール(open/read/write)
HALインタフェース(hardware/lights.h)を実装するライブラリ。
ドライバ毎にHALを実装することにより、上位はデバイスの違
いを意識せずにデバイスにアクセスできる。
LightsService
Lightクラスのインスタンス取得
PowerManagerService
This material is licensed under the Creative Commons License BY-NC-SA 4.0.
5.5.Androidでの
ハードウェアアクセス
• 画面の明るさ制御
OMAP Pin AF15(GPIO168)に接続されたLEDをAndroid標準の設定アプリ
(Settings)の「画面の明るさ」から制御するには?
HALより上位層ではデバイスの違いを意識しないため、 GPIO168のLED
用のHALを実装すれば良い。
111This material is licensed under the Creative Commons License BY-NC-SA 4.0.
5.5.Androidでの
ハードウェアアクセス
• まずソースコード上でバックライトをどのように制御しているかを
確認します。
112
【packages/apps/Settings/src/com/android/settings/BrightnessPreference.java】
public class PowerManager
{
:
public void onProgressChanged(SeekBar seekBar, int progress, boolean fromTouch) {
setBrightness(progress + MINIMUM_BACKLIGHT);
}
:
private void setBrightness(int brightness) {
try {
IPowerManager power = IPowerManager.Stub.asInterface(ServiceManager.getService("power"));
if (power != null) {
power.setBacklightBrightness(brightness);
}
:
「設定」→「表示」→「画面の明
るさ」のシークバーが変更された
場合に呼び出される
This material is licensed under the Creative Commons License BY-NC-SA 4.0.
• ソースコード確認<続き>
Binder IPCの呼出を確認
次ページへ
5.5.Androidでの
ハードウェアアクセス
113
【frameworks/ base/core/java/android/os/PowerManager.java】
public class PowerManager
{
:
public void setBacklightBrightness(int brightness)
{
try {
mService.setBacklightBrightness(brightness);
:
}
:
PowerManagerServiceの
setBacklightBrightnessメソッドが
Binder IPC経由で呼び出される
This material is licensed under the Creative Commons License BY-NC-SA 4.0.
• ソースコード確認<続き>
Lightクラスのバックライト用のインスタンス確認
5.5.Androidでの
ハードウェアアクセス
114
【frameworks/ base/services/java/com/android/server/PowerManagerService.java】
class PowerManagerService extends IPowerManager.Stub implements LocalPowerManager, Watchdog.Monitor {
:
private LightsService.Light mLcdLight;
void init(Context context, LightsService lights, IActivityManager activity, BatteryService battery) {
:
mLcdLight = lights.getLight(LightsService.LIGHT_ID_BACKLIGHT);
:
}
:
public void setBacklightBrightness(int brightness) {
mContext.enforceCallingOrSelfPermission(android.Manifest.permission.DEVICE_POWER, null);
// Don't let applications turn the screen all the way off
synchronized (mLocks) {
brightness = Math.max(brightness, Power.BRIGHTNESS_DIM);
mLcdLight.setBrightness(brightness);
}
:
}
:
LightsServiceのインナークラスの
Lightクラスのバックライト用のイ
ンスタンスを取得
LightクラスのsetBrightnessメソッ
ドを直接呼び出す
This material is licensed under the Creative Commons License BY-NC-SA 4.0.
5.5.Androidでの
ハードウェアアクセス
115
【frameworks/base/services/java/com/android/server/LightsService.java】
public class LightsService {
:
public Light getLight(int id) {
return mLights[id];
}
:
public final class Light {
:
public void setBrightness(int brightness) {
setBrightness(brightness, BRIGHTNESS_MODE_USER);
}
public void setBrightness(int brightness, int brightnessMode) {
synchronized (this) {
int color = brightness & 0x000000ff;
color = 0xff000000 | (color << 16) | (color << 8) | color;
setLightLocked(color, LIGHT_FLASH_NONE, 0, 0, brightnessMode);
}
}
private void setLightLocked(int color, int mode, int onMS, int offMS, int brightnessMode) {
if (color != mColor || mode != mMode || onMS != mOnMS || offMS != mOffMS) {
mColor = color;
mMode = mode;
mOnMS = onMS;
mOffMS = offMS;
setLight_native(mNativePointer, mId, color, mode, onMS, offMS, brightnessMode);
}
}
:
private static native void setLight_native(int ptr, int light, int color, int mode, int onMS, int offMS, int brightnessMode);
}
“native”キーワード付きのネイ
ティブメソッドをよびだす
This material is licensed under the Creative Commons License BY-NC-SA 4.0.
5.5.Androidでの
ハードウェアアクセス
116
【 frameworks/base/services/jni/com_android_server_LightsService.cpp】
:
static JNINativeMethod method_table[] = {
{ "init_native", "()I", (void*)init_native },
{ "finalize_native", "(I)V", (void*)finalize_native },
{ "setLight_native", "(IIIIIII)V", (void*)setLight_native },
};
static jint init_native(JNIEnv *env, jobject clazz)
{
:
err = hw_get_module(LIGHTS_HARDWARE_MODULE_ID, (hw_module_t const**)&module);
if (err == 0) {
devices->lights[LIGHT_INDEX_BACKLIGHT]
= get_device(module, LIGHT_ID_BACKLIGHT);
:
} else {
memset(devices, 0, sizeof(Devices));
}
return (jint)devices;
}
static void setLight_native(JNIEnv *env, jobject clazz, int ptr, int light, int colorARGB, int flashMode, int onMS, int offMS, int brightnessMode)
{
Devices* devices = (Devices*)ptr;
light_state_t state;
if (light < 0 || light >= LIGHT_COUNT || devices->lights[light] == NULL) {
return ;
}
:
devices->lights[light]->set_light(devices->lights[light], &state);
}
メソッドテーブルで、Javaのメソッド
をCの関数にマッピング
liblights.<hardware>.soがロードされてい
ない場合、LEDデバイスのIndexに対応
するLEDデバイスが存在しない場合はこ
こで復帰する
LightsServiceのコンストラクタで
init_nativeメソッドが呼び出され、その
延長のhw_get_module関数内で
libligths.<hardware>.soがロードされる
get_devieを呼び出し、
LIGHT_ID_BACKLIGHTなどの各LEDデバイ
スIDに対応するstruct light_device_t 型の
オブジェクトを取得する
HAL I/Fのset_lightハンドラをコールバッ
クする
This material is licensed under the Creative Commons License BY-NC-SA 4.0.
5.5.Androidでの
ハードウェアアクセス
117
struct light_device_t {
int (*set_light)(struct light_device_t* dev,
struct light_state_t const* state);
};
struct hw_device_t {
uint32_t tag;
uint32_t version;
struct hw_module_t* module;
uint32_t reserved[12];
int (*close)(struct hw_device_t* device);
} common;
struct light_device_t {
int (*set_light)(struct light_device_t* dev,
struct light_state_t const* state);
};
struct hw_device_t {
uint32_t tag;
uint32_t version;
struct hw_module_t* module;
uint32_t reserved[12];
int (*close)(struct hw_device_t* device);
} common;
struct light_device_t {
int (*set_light)(struct light_device_t* dev,
struct light_state_t const* state);
};
struct hw_device_t {
uint32_t tag;
uint32_t version;
struct hw_module_t* module;
uint32_t reserved[12];
int (*close)(struct hw_device_t* device);
} common;
struct light_device_t {
int (*set_light)(struct light_device_t* dev,
struct light_state_t const* state);
};
struct hw_device_t {
uint32_t tag;
uint32_t version;
struct hw_module_t* module;
uint32_t reserved[12];
int (*close)(struct hw_device_t* device);
} common;
typedef struct hw_module_t {
uint32_t tag;
uint16_t version_major;
uint16_t version_minor;
const char *id;
const char *name;
const char *author;
struct hw_module_methods_t* methods;
void* dso;
uint32_t reserved[32-7];
} hw_module_t;
typedef struct hw_module_methods_t {
int (*open)(const struct hw_module_t* module, const char* id,
struct hw_device_t** device);
} hw_module_methods_t;
struct Devices {
light_device_t* lights[LIGHT_COUNT];
};
HALではopenハンドラを実装し、
light_device_tのオブジェクト(メ
モリ)を確保、メンバの初期化を
行う必要がある
hw_get_module() ではdlopen()で共
有ライブラリをロードした後、
dlsym()で共有ライブラリ内
の”HMI”(HAL Module Information)と
いうシンボル名を検索し、そのア
ドレスを返却する。
HALでは必ずこの”HMI”という名前
のhw_module_tのオブジェクトを
静的に定義する必要がある。
LEDのHALではset_lightハンドラ
(LEDを制御する関数)を実装する
必要がある
HALではcloseハンドラを実
装し、light_device_tのオブ
ジェクトを解放する必要が
ある
This material is licensed under the Creative Commons License BY-NC-SA 4.0.
5.6 LEDデバイス用の
HALインタフェース
• LEDのHALは“hardware/msm7k/liblights”が参考に
なります。 これをベースにGPIO168のLED用の
HALを実装します。 ソースコードとメイクファ
イルは以下の様に配置します。
118
- hardware/ti/omap3/libligths/beagleboard/
├ Android.mk
└ lights.c
This material is licensed under the Creative Commons License BY-NC-SA 4.0.
5.7 LEDドライバ向け
HALの実装(lights.c)
119
#include <hardware/lights.h>
/* その他のヘッダは省略 */
#define BLPATH "/sys/class/leds/beagleboard::extled/brightness"
static pthread_mutex_t g_lock = PTHREAD_MUTEX_INITIALIZER;
static int write_int(char const* path, int value) {
int fd = open(path, O_RDWR);
if (fd >= 0) {
char buffer[20];
int bytes = sprintf(buffer, "%dn", value);
int amt = write(fd, buffer, bytes);
close(fd);
return amt == -1 ? -errno : 0;
} else
return -errno;
}
static int rgb_to_brightness(struct light_state_t const* state) {
int color = state->color & 0x00ffffff;
return ((77*((color>>16)&0x00ff))
+ (150*((color>>8)&0x00ff)) + (29*(color&0x00ff))) >> 8;
}
static int set_light_backlight(struct light_device_t* dev,
struct light_state_t const* state) {
int err = 0;
int brightness = rgb_to_brightness(state);
pthread_mutex_lock(&g_lock);
err = write_int(BLPATH, (brightness <= 30) ? 0 : 1);
pthread_mutex_unlock(&g_lock);
return err;
}
static int close_lights(struct light_device_t *dev) {
free(dev);
return 0;
}
static int open_lights(const struct hw_module_t* module,
char const* name, struct hw_device_t** device) {
if (!strcmp(LIGHT_ID_BACKLIGHT, name))
return -EINVAL;
struct light_device_t *dev = malloc(sizeof(struct light_device_t));
memset(dev, 0, sizeof(*dev));
dev->common.tag = HARDWARE_DEVICE_TAG;
dev->common.version = 0;
dev->common.module = (struct hw_module_t*)module;
dev->common.close = (int (*)(struct hw_device_t*))close_lights;
dev->set_light = set_light_backlight;
*device = (struct hw_device_t*)dev;
return 0;
}
static struct hw_module_methods_t lights_module_methods = {
.open = open_lights,
};
const struct hw_module_t HAL_MODULE_INFO_SYM = {
.tag = HARDWARE_MODULE_TAG,
.version_major = 1,
.version_minor = 0,
.id = LIGHTS_HARDWARE_MODULE_ID,
.name = “beagleboard lights module",
.author = “ISB TOHOKU CORPORATION",
.methods = &lights_module_methods,
};
set_lightハンドラの実装
closeハンドラの実装
openハンドラの実装
オブジェクト"HMI"の定義
hardware/hardware.hで以下の様に定
義
#define HAL_MODULE_INFO_SYM HMI
ARGBを輝度に変
換
writeシステムコールでLEDドライ
バに輝度情報を渡す
Sysfsエントリに輝度の値を
writeする(設定アプリから渡さ
れる値が30~255の範囲ため値
を調整)。
This material is licensed under the Creative Commons License BY-NC-SA 4.0.
5.8.LEDドライバ向け
HALの実装(Android.mk)
120
LOCAL_PATH:= $(call my-dir)
include $(CLEAR_VARS)
LOCAL_SRC_FILES := lights.c
LOCAL_PRELINK_MODULE := false
LOCAL_MODULE_PATH := $(TARGET_OUT_SHARED_LIBRARIES)/hw
LOCAL_SHARED_LIBRARIES := liblog
LOCAL_MODULE_TAGS := optional
LOCAL_MODULE := lights.$(TARGET_PRODUCT)
include $(BUILD_SHARED_LIBRARY)
ライブラリ名は”lights.beagleboard.so”
とする
共有ライブラリとしてビルドする
TARGET_BUILD_VARIANTは”optional”を指定
する
プレリンクの対象にはし
ない
LOCAL_XXX変数を初期化
ログ出力する際に必要なライブラリを追
加(今回は未使用)
This material is licensed under the Creative Commons License BY-NC-SA 4.0.
5.9.LEDドライバ向け
HALの実装(アクセス権設定)
• LEDドライバのsysfsエントリは前述のとおり、オーナー/グループの設定
がroot/rootとなっているため、このままではフレームワーク層のサービ
ス(UID/GUID=system/system)からアクセスすることができません。
デバイスノードやsysfsエントリのアクセス権を設定するには、
ueventd.<hardware>.rcを変更する必要があります。
※ sysfsエントリのアクセス権設定は他のデバイスノード等の設定と異なっていることに注意してください。
121
【device/ti/beagleboard/ueventd.omap3.rc】
/dev/cmem 0666 root root
/dev/dsplink 0666 root root
/dev/lpm0 0666 root root
/dev/sdma 0666 root root
/sys/devices/platform/leds-gpio/leds/beagleboard::extled
brightness 0660 system system
対象のエントリが存在するディレクトリのフルパス 対象のエントリ パーミッション オーナー グループ
This material is licensed under the Creative Commons License BY-NC-SA 4.0.
5.10 LEDドライバ向け
HALのBuild
• 以下の手順で作成したLED HALのライブラリをビルド(モジュールビ
ルド)します。
122
$ source build/envsetup.sh
$ lunch beagleboard-eng
$ mmm hardware/ti/omap3/liblights/beagleboard
# mmmはenvsetup.shのシェル関数。以下のようにmmを使用することも可能
# cd hardware/ti/omap3/liblights/beagleboard/
# mm
This material is licensed under the Creative Commons License BY-NC-SA 4.0.
5.11 LEDドライバ向け
HALの実装
• SDカードにビルドしたLED HALライブラリ(lights.beagleboard.so)と、
ueventd.omap3.rcをコピーします※。
123
$ cp out/target/product/beagleboard/system/lib/hw/lights.beagleboard.so /media/rootfs/
system/lib/hw/lights.beagleboard.so
$ cp device/ti/beagleboard/ueventd.omap3.rc out/target/product/beagleboard/root/
$ cp out/target/product/beagleboard/root/ueventd.omap3.rc /media/rootfs/
※ ueventd.omap3.rcは全体ビルドによってout配下にコピーされますが、簡略化のため手動でout配下とSDカードにコピーしま
す。
This material is licensed under the Creative Commons License BY-NC-SA 4.0.
5.11 LEDドライバ向け
HALの実装
• Androidを起動させ、設定アプリから「表示」→「画面の
明るさ」を実行しLED HALの動作確認をします。
• シークバーを最小にすると、LEDが消灯、それ以外は点
灯することを確認します。
124This material is licensed under the Creative Commons License BY-NC-SA 4.0.
5.12 Android HAL層
• Android HALレイア
HALとは、ハードウエアを抽象化するライブラリ を指し
ます。
HALはデバイスのラッパー機能という位置付けで
Android Frameworkからデバイスに簡単にアクセスできるよ
う 125
Androidプラットフォーム
アプリケーション
Androidフレームワーク
Linuxカーネル
ハードウェア
アプリケーション
ライブラリ/ネイティブ
HAL(Hardware Abstruction Layer)
This material is licensed under the Creative Commons License BY-NC-SA 4.0.
5.12 Android HAL層
• Android HAL
126
Androidプラットフォーム
アプリケーション
Androidフレームワーク
Linuxカーネル
ハードウェア
アプリケーション
ライブラリ/ネイティブ
HAL(Hardware Abstruction Layer)
グラ
フィック
Audio カメラGPS
Bluetooth
Radio Layer
Interface
(RIL)
Wi-Fi
スマートフォンで実装されて
いるデバイスはほとんど
用意されている
This material is licensed under the Creative Commons License BY-NC-SA 4.0.
5.12 Android HAL層
• Android HALのレイアイメージ
127
Framework
External Libraries
Runtime
XXXXXXX.so (libhardware_legacy )
Linux Device Driver
This material is licensed under the Creative Commons License BY-NC-SA 4.0.
5.12 Android HAL層
• Android HALの使用イメージ
128
Service/JNI
Framework/base/services/jni
Java Stub
HAL
Hardware/libhardware
sysfs /sys
HAL Stub
Kernel Modules
This material is licensed under the Creative Commons License BY-NC-SA 4.0.
5.12 Android HAL層
• Android HALのメリット
1.Linuxへの依存をHAL層で吸収。
デバイスを抽象化することで、独立性を高めLinuxの
依存
度を低くできる。
上位層(アプリケーション等)をハードウェアから分離で
きる。
129This material is licensed under the Creative Commons License BY-NC-SA 4.0.
5.12 Android HAL層
• Android HALのメリット
2.GPL汚染の心配がない
Androidプラットフォームと分離することにより、ラ
イセンス
の影響を抑えられる。
HAL部分はカーネルとリンクはしない為、ソースを
公開する
必要がない
(HAL層はApacheライセンス、LinuxドライバはGPLライ
センス)
130This material is licensed under the Creative Commons License BY-NC-SA 4.0.
5.12 Android HAL層
• Android HALでの注意点
ドライバに特殊な技術を実装した場合、ソース公開に
より
読み取られる場合がある。
技術隠ぺいの為、特殊なアルゴリズムはユーザー空間
側に
置く事ができるが、パフォーマンスを重視する場合は
注意する必要がある。
131This material is licensed under the Creative Commons License BY-NC-SA 4.0.
5.12 Android HAL層
• ポーティング手順から見たHAL
1. Android向けドライバの入ったLinux Kernelをター
ゲット
上で動作させる
(一般的にはボードメーカーによりBSPとして提供)
2.アーキテクチャに合わせてAndroidをビルド
3.各種設定ファイルをアーキテクチャ(ターゲット
ボード)に
合わせてカスタマイズする
4.接続デバイスのHALを用意(各種センサー、カメラ
等)
5.ターゲットボード動作検証
132This material is licensed under the Creative Commons License BY-NC-SA 4.0.
5.12 Android HAL層
• AndroidフレームワークのHALインターフェイス
以下のセンサー類のインターフェイスが用意されてい
ます。
インターフェイス定義先
hardware/libhardware/include/hardware/sensors.h
サポートする為にはセンサー対応のドライバと
Androidフレームワーク側の対応(実
装)が必要となります。
133
デバイス名(センサー名)
加速度センサー
近接センサー
ジャイロセンサー
(ジャイロスコープ)
磁気センサー
気圧センサー
光センサー
温度センサー
This material is licensed under the Creative Commons License BY-NC-SA 4.0.
5.12 Android HAL層
• 使用頻度の高いHALインターフェイス(GPS編)
良く使用するHALとしてGPS用が用意されている
インターフェイス定義先
include/hardware/gps.h
Androidで使用する際は、このHALインターフェイスを共有ライブラリをしてBuild
する
必要があります。
134This material is licensed under the Creative Commons License BY-NC-SA 4.0.
5.12 Android HAL層
• 使用頻度の高いHALインターフェイス(GPS編)
ハードウェア構成イメージ
135
Android
MAP系アプリケーショ
ン
Android Framework
Libgps.so
Linux
シリアル通信
GPSドライバ
GPSデバイス
USB
This material is licensed under the Creative Commons License BY-NC-SA 4.0.
6.GPIOドライバ
• 6章はBeagle Board のLEDをコントロールするGPIOドライ
バを開発します。
6章の進め方は配布したソースコードの内容を確認し、
モジュールをビルドしながら実習を進めて行きます。
136This material is licensed under the Creative Commons License BY-NC-SA 4.0.
6.GPIOドライバ
・GPIOとは
General Purpose Input/Output(汎用入出力)の略語。
電気回路等の部分からデジタル信号を読み取り、出力
と
して他デバイスの制御や信号の通知を行う事ができる。
GPIOは特定の用途や信号が決まっておらず、ソフト
ウェア
の実装によって入出力に利用できる。
137This material is licensed under the Creative Commons License BY-NC-SA 4.0.
Copyright 2012, Open Embedded Software Foundation, All rights reserved
6.GPIOドライバ
・GPIOポートから、モーター制御用信号を送信するドラ
イバを作成します
138
Expansion N o G PIO ポートLED
18 G PIO _159 青
19 G PIO _131 赤
20 G PIO _156 白
21 G PIO _130 黄色
23 G PIO _183 緑
24 G PIO _168 紫
B eagleboard Expansion 
1 3 5 7 9 11 13 15 17 19 21 23 25 27
2 4 6 8 10 12 14 16 18 20 22 24 26 28
【実習2 】
This material is licensed under the Creative Commons License BY-NC-SA 4.0.
Copyright 2012, Open Embedded Software Foundation, All rights reserved
6.GPIOドライバ
・ドライバファイル構成
.
|-- device/
| `-- ti/
| `-- beagleboard/
| `-- bb_ext_gpio_test/
| |-- Android.mk
| |-- bb_ext_gpio.h
| `-- bb_ext_gpio_test.c
`-- kernel/
|-- arch/
| `-- arm/
| `-- mach-omap2/
| `-- board-omap3beagle.c
`-- drivers/
`-- misc/
|-- Kconfig
|-- Makefile
|-- bb_ext_gpio.c
`-- bb_ext_gpio.h
139This material is licensed under the Creative Commons License BY-NC-SA 4.0.
6.GPIOドライバ
• コンフィグを有効化
Spaceキーを押下し、対象のコンフィグを有効化します。
140
Device Drivers --->
[*] Misc devices --->
[*] beagleboard extended gpio driver
$ cd kernel
$ make ARCH=arm CROSS_COMPILE=arm-none-linux-gnueabi- menuconfig
This material is licensed under the Creative Commons License BY-NC-SA 4.0.
6.GPIOドライバ
141
• カーネルビルド
カーネルをビルドし、カーネルイメージをSDカードにコピーします。
$ make ARCH=arm CROSS_COMPILE=arm-none-linux-gnueabi- uImage
$ cp arch/arm/boot/uImage /media/boot/
This material is licensed under the Creative Commons License BY-NC-SA 4.0.
6.GPIOドライバ
• 以下の手順で作成したGPIOドライバのテストプログラムをビルド
(モジュールビルド)します。
142
$ source build/envsetup.sh
$ lunch beagleboard-eng
$ mmm device/ti/beagleboard/bb_ext_gpio_test
# mmmはenvsetup.shのシェル関数。以下のようにmmを使用することも可能
$ sudo cp out/target/product/beagleboard/system/xbin/bbioctl /media/rootfs/system/xbin/.
This material is licensed under the Creative Commons License BY-NC-SA 4.0.
6.GPIOドライバ
143
実
習
【実習2 回答確認】
• シリアルコンソールからコマンド操作で、実装したGPIOドライバが
正しく動作するかどうかを確認します。
# cd /system/xbin/
# テストプログラムを実行する
# bbioctl
cmd=?[1,2,3,4,5,6,q] # 例えば、 6 = GPIO_168 (24PIN)
6
arg=?[0,1] # 0=Low, 1=High
1
ioctl((0x3, 0x40bb_ext_gpio_ioctl(cmd=40047e05, arg=0001)
047e05, 0x1)
ret=0
cmd=?[1,2,3,4,5,6,q] # 終了する場合は "q"
q
quit
#
This material is licensed under the Creative Commons License BY-NC-SA 4.0.
7.USB無線LANアダプタのポーティング
• 市販のUSB無線LANアダプタをAndroid向け
にポーティングします。
• 4章で準備したAndroidのソースコードに
USB無線LANアダプタを有効にする変更を
加え、Androidへのネットワーク機器のポ
ーティング方法を学習します。
144This material is licensed under the Creative Commons License BY-NC-SA 4.0.
7.USB無線LANアダプタのポーティング
145
• Androidの無線LANデバイス機器の制御はWPA Supplicant (IEEE802.1Xに
準拠した認証を実現するソフトウェア)を利用して実現されています。
アプリケーション
フレームワーク
ライブラリ/
ネイティブ/HAL
Linuxカーネル ハードウェアUSB無線LAN
アダプタドライバ
USB無線LAN
アダプタ
WifiManager
WifiNative
WiFiSettings
WifiEnabler
libhardware_legacy.solibwpa_client.so
WiFiStateTracker
WifiService
Wireless Extension
wpa_supplicant
USBホストコントローラドラ
イバ
dhcpcd
Network Device I/F
WifiMonitor
libandroid_runtime.so
NetworkUtils libcore
XXXアプリ
WiFiのHALを実装するライブラ
リ。 ドライバに合わせて実装
する必要がある。
java.net.Socket や
java.net.ServerSocket 等の
Network I/Fを使用するAPI
insmod/rmmod ifconfig/send/recvWEXT command
This material is licensed under the Creative Commons License BY-NC-SA 4.0.
7.USB無線LANアダプタのポーティング
146
• PLANEX社製USB無線LANアダプタ「GW-USNano2」は、Realtec社製の
「RTL8192CU」という無線チップが使用されています。
「RTL8192CU」のドライバおよびHALの実装をRealtec社からダウン
ロードすることができます。
http://www.realtek.com/products/productsView.aspx?Langid=1&PNid=21&PFid=48&Level=5&Conn=4&ProdID=274
※2011/11/16現在、上記URLからダウンロードしたものをそのまま適
用すると、Androidが起動できなくなる現象が確認されています。
この問題を解消したアーカイブファイルおよびパッチファイルを用意
しましたので、本トレーニングではこれを適用することとします。
This material is licensed under the Creative Commons License BY-NC-SA 4.0.
7.USB無線LANアダプタのポーティング
147
【RTL8192CU 向けHALの実装の導入】
以下の手順でアーカイブファイル(realtek_wifi_SDK_for_android.tar.gz)を展開しま
す。
# realtek_wifi_SDK_for_android.tar.gzは予め/tmpに配置してあることとします。
$ cd TI_Android_GingerBread_2_3_4Sources
$ tar xvzf /tmp/realtek_wifi_SDK_for_android.tar.gz
【RTL8192CU 向けドライバの導入】
以下の手順でカーネルにパッチファイル(realkernel-rtl8192cu.patch)を適用します。
# realkernel-rtl8192cu.patchは予め/tmpに配置してあることとします。
$ cd TI_Android_GingerBread_2_3_4Sources/kernel
$ patch -p1 < /tmp/realkernel-rtl8192cu.patch
This material is licensed under the Creative Commons License BY-NC-SA 4.0.
7.USB無線LANアダプタのポーティング
148
【RTL8192CU 向けのビルド設定】
WiFiのHALの実装をAndroidのシステムに導入するには、ボード構成設定ファイル
(BoardConfig.mk)を修正する必要があります。
【device/ti/beagleboard/BoardConfig.mk】
# ファイル先頭付近に以下を追加します。
BOARD_USES_REALTEK_WIFI := true
WPA_SUPPLICANT_VERSION := VER_0_5_X
BOARD_WPA_SUPPLICANT_DRIVER := WEXT
WIFI_DRIVER_MODULE_PATH := /system/wifi/8192cu.ko
WIFI_DRIVER_MODULE_NAME := 8192cu
← RTL8192CU 向けHALのビルド指
定 ← WPA Supplicantのバージョン指
定
← WPA Supplicantの使用するドライバのI/F(Wireless Extension)を指
定
← RTL8192CU のドライバモジュールのパスを指
定
← RTL8192CU のドライバモジュール名を指定
This material is licensed under the Creative Commons License BY-NC-SA 4.0.
7.USB無線LANアダプタのポーティング
149
【device/ti/beagleboard/wpa_supplicant.conf】
# 以下の内容で新規に作成します。
update_config=1
ctrl_interface=DIR=/data/misc/wifi/wpa_supplicant GROUP=wifi
ap_scan=1
【WPA Supplicantの設定ファイルの準備】
WPA Supplicantはドライバ毎に設定を変更する必要があります。
RTL8192CU向けに設定ファイル(wpa_supplicant.conf)を用意し、ビルド
時にoutディレクトリ配下にコピーされるようにボードメイクファイ
ル(AndroidBoard.mk)を修正します。
【device/ti/beagleboard/AndroidBoard.mk】
# ファイル末尾付近に以下を追加します。
PRODUCT_COPY_FILES += 
$(LOCAL_PATH)/wpa_supplicant.conf:system/etc/wifi/wpa_supplicant.conf
endif
This material is licensed under the Creative Commons License BY-NC-SA 4.0.
7.USB無線LANアダプタのポーティング
150
【init設定ファイルの修正】
wpa_supplicantやdhcpcdをAndroidのサービスとして登録するために、init設定ファ
イル(init.rc)を修正する必要があります※。
【device/ti/beagleboard/init.rc】
# 競合する不要なサービスを無効化します。
#service wlan_loader /system/bin/wlan_loader -n 
# -f /system/etc/wifi/firmware.bin 
# -i /system/etc/wifi/tiwlan.ini
# disabled
# oneshot
#service btpwr /wl1271bt_enable /dev/ttyS1
# disabled
# oneshot
#service wpa_supplicant /system/bin/wpa_supplicant -Dtiwlan0 -itiwlan0 -c/data/misc/wifi/wpa_supplicant.conf -dd
# socket wpa_tiwlan0 dgram 660 wifi wifi
# disabled
# oneshot
#service dhcpcd /system/bin/dhcpcd -ABKL tiwlan0
# disabled
# oneshot
※本来はinit.omap3.rcを修正するのが適切ですが、本トレーニングで使用するTI-Android-GingerBread-2.3.4-DevKit-2.1では、ビルド時に当該
ファイルがout配下にコピーされないため、init.rcを修正しています。
This material is licensed under the Creative Commons License BY-NC-SA 4.0.
7.USB無線LANアダプタのポーティング
151
【device/ti/beagleboard/init.rc】
# 以下のサービスを追加します。(hostapdはWiFiテザリング時に必要なサービスであり本トレーニングでは使用しま
せん)
service wpa_supplicant /system/bin/wpa_supplicant -Dwext -iwlan0 -c/data/misc/wifi/wpa_supplicant.conf
disabled
oneshot
service hostapd /system/bin/hostapd_wps /data/misc/wifi/hostapd.conf
disabled
oneshot
service dhcpcd_wlan0 /system/bin/dhcpcd -ABKL wlan0
disabled
oneshot
WiFiのnetwork interfaceの名前をシステムプロパティ※として登録している箇所があるため、
RTL8192CUドライバのnetwork interface名である"wlan0"に変更します。
【device/ti/beagleboard/init.rc】
<変更前>
setprop wifi.interface tiwlan0
<変更後>
setprop wifi.interface wlan0
※Androidシステムプロパティは、DalvicVM上のプログラム(Java)、ネイティブプログラム(C/C++)のどちらからでも参照可能な帯域変数。
This material is licensed under the Creative Commons License BY-NC-SA 4.0.
7.USB無線LANアダプタのポーティング
152
• 以下の手順でユーザランドとカーネルを再ビルドします。
$ source build/envsetup.sh
$ make TARGET_PRODUCT=beagleboard TARGET_BUILD_VARIANT=eng
OMAPES=3.x -j4
$ make ARCH=arm CROSS_COMPILE=arm-none-linux-gnueabi- modules
RTL8192CUドライバはカーネルコンフィグで「モジュール」としてビルド
するようにに指定(CONFIG_RTL8192CU=m)しているため、別途以下の手順で
ビルドします。
4.3章と同様の方法でSDカードにビルドイメージをコピーします。 この
際に上記手順でビルドしたRTL8192CUドライバモジュールもSDカード
にコピーします。$ mkdir /media/rootfs/system/wifi/
$ cp kernel/drivers/net/wireless/rtl8192cu/8192cu.ko /media/rootfs/system/wifi/
This material is licensed under the Creative Commons License BY-NC-SA 4.0.
8.Tablet連携
• 起動用SDカードの作成
153
カーネルイメージのコピー
(※ビルド済のファイルは、/media/userdata/android/training/07_wifi/complete/ に収録しています)
# cd /media/userdata/android/training/07_wifi/complete/
# tar xvzf build_images.tar.gz
# sudo cp -a out/target/product/beagleboard/root/* /media/rootfs/
# sudo cp -a out/target/product/beagleboard/system/* /media/rootfs/system/
# sudo cp -a out/target/product/beagleboard/data/* /media/rootfs/data/
# sudo mkdir -p /media/rootfs/system/wifi/
# sudo cp -a kernel/drivers/net/wireless/rtl8192cu/8192cu.ko
# sudo cp -a kernel/arch/arm/boot/uImage /media/boot/
This material is licensed under the Creative Commons License BY-NC-SA 4.0.
8.Tablet連携
• 8章はTabletをコントローラーとして、LEDの点灯操作します。
6,7章で作成したドライバとアプリケーション連携を行い、
Donkyを操作します。
8章の進め方は配布したソースコード、完成モジュールを利
用しながら
進めて行きます。
154This material is licensed under the Creative Commons License BY-NC-SA 4.0.
8.Tablet連携
• 全体イメージ
155
Wi-fi
コントロールアプリ
ケーション実装
Wi-fiからデータを
受け取るサービス
を実装
GPIOポート
でLEDコントロー
ル
This material is licensed under the Creative Commons License BY-NC-SA 4.0.
8.Tablet連携
• 機能概要
– BeagleBoardとTableは、Wi-Fiで接続する
– BeagleBoard
• Socket通信のサーバーサービスを自動実行する
– タブレット : Socket通信のクライアント
• IPアドレスを指定し、 GPIOポートへ信号を送信す
る
156This material is licensed under the Creative Commons License BY-NC-SA 4.0.
8.Tablet連携
• BeagleBoard側の作業
– LEDドライバのポーティング(6章参照)
– Socket通信用サーバーアプリの導入
• タブレット側の作業
– Socket通信用クライアントアプリの導入
157This material is licensed under the Creative Commons License BY-NC-SA 4.0.
8.Tablet連携
• 起動用SDカードの作成
158
カーネルイメージのコピー
(※ビルド済のファイルは、/media/userdata/android/training/08_tablet/complete/ に収録しています)
# cd /media/userdata/android/training/08_tablet/complete/
# sudo cp -p boot/uImage /media/boot/.
rootfsの展開
# sudo tar xfv wifi_rootfs.tar.gz -C /media/rootfs/.
syncコマンドでバッファの内容を書き込みます
# sync
This material is licensed under the Creative Commons License BY-NC-SA 4.0.
Socket
Server
8.Tablet連携
• Androidアプリの仕様概要
159
タブレットBeagleBoard
Wi-Fiルー
タ
※IPアドレスは、ルータのDHCPからリース
※別途Wi-Fiのパスワード設定が必要
8080 port Andoird App
GPIO HAL
GPIO Device
This material is licensed under the Creative Commons License BY-NC-SA 4.0.
8.Tablet連携
• SocketSeverサービスの実装①
• バックエンドで処理させるAndroidのサービスとして実装します
• システム起動時に自動開始させるため、 BroadCastReceiver を作成し、システムのブ
ロードキャスト BOOT_COMPLETEDを受け取り、サービスを開始します
• システムからBOOT_COMPLETEDを受けるためには、 AndroidManifest.xml にパーミッシ
ョンの設定が必要です。
160
【 AndroidManifest.xml 】
<receiver android:name=".receiver" android:permission="android.permission.RECEIVE_BOOT_COMPLETED">
<intent-filter>
<action android:name="android.intent.action.BOOT_COMPLETED"/>
</intent-filter>
</receiver>
・・・
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"></uses-permission>
This material is licensed under the Creative Commons License BY-NC-SA 4.0.
8.Tablet連携(Wi-Fi)
161
• SocketSeverサービスの実装②
• Androidサービスから、JNIを利用してGPIOポートへアクセスします。
WifiOnOffReceiver.java
TCPServer.java
libbb_ext_gpio_test.so
サービス開始トリガー
/dev/bb_ext_gpio
JNI
デバイスopen
This material is licensed under the Creative Commons License BY-NC-SA 4.0.
8.Tablet連携(Wi-Fi)
162
• SocketSeverサービスの実装②
• サービスから直接デバイスにアクセスするので、デバイスのパーミッションを変更
します。
【device/ti/beagleboard/ueventd.omap3.rc】
/dev/bb_ext_gpio 0666 root root
This material is licensed under the Creative Commons License BY-NC-SA 4.0.
8.Tablet連携(Wi-Fi)
• Androidアプリのビルド
Androidアプリは、一般的に統合開発環境のEclipseを利用して開発を行います。
JNIを利用する場合は、Android-SDKの他に、Android-NDKをインストールします
。
163
Android-SDKのインストール
# wget http://dl.google.com/android/android-sdk_r15-linux.tgz
# tar xvf android-sdk_r15-linux.tgz
Android-NDKのインストール
# wget http://dl.google.com/android/ndk/android-ndk-r7-linux-x86.tar.bz2
# tar xvf android-ndk-r7-linux-x86.tar.bz2
~/.bashrc にパスを追加します
export PATH=$PATH:/media/userdata/android/android-sdk-linux_x86/platform-tools:/media/userdata/android/android-sdk-
linux_x86/tools/media/userdata/android/android-ndk-r7
This material is licensed under the Creative Commons License BY-NC-SA 4.0.
8.Tablet連携(Wi-Fi)
• Andoirdアプリのインストール①
PCとBeagleBoardをUSBケーブルで接続します
164
カーネルイメージのコピー
(※ビルド済のファイルは、/media/userdata/android/training/07_wifi/complete/ に収録しています)
# cd /media/userdata/android/training/07_wifi/complete/
adb コマンドで、アプリパッケージをインストールします
# adb install SocketServerApp.apk
アンインストールの場合は、パッケージ名を指定します
# adb uninstall jp.co.isb.itc.android.training.SocketServer
This material is licensed under the Creative Commons License BY-NC-SA 4.0.
8.Tablet連携(Wi-Fi)
• Andoirdアプリのインストール②
PCとタブレットをUSBケーブルで接続します
165
カーネルイメージのコピー
(※ビルド済のファイルは、/media/userdata/android/training/07_wifi/complete/ に収録しています)
# cd /media/userdata/android/training/07_wifi/complete/
adb コマンドで、アプリパッケージをインストールします
# adb install SocketClientApp.apk
アンインストールの場合は、パッケージ名を指定します
# adb uninstall jp.co.isb.itc.android.training.SocketClient
This material is licensed under the Creative Commons License BY-NC-SA 4.0.
8.Tablet連携(Wi-Fi)
• BeagleBoardのWi-Fi準備
• SDカード、シリアルケーブル、無線LANアダプタを装着し、電源を入れま
す。
• 無線LANアダプタは、下図のUSBホストに直接装着します。バスパワーの
USBハブ経由で接続すると電力不足により動作しない場合があります。
166This material is licensed under the Creative Commons License BY-NC-SA 4.0.
8.Tablet連携(Wi-Fi)
• IPアドレスの確認
• シリアル端末から、BeagleBoardのIPアドレスを確認します。
wlan0 が無線LANのIPアドレスになります
167
# netcfg
lo UP 127.0.0.1 255.0.0.0 0x00000049
wlan0 UP 192.168.1.33 255.255.255.0 0x00001043
This material is licensed under the Creative Commons License BY-NC-SA 4.0.
8.Tablet連携(Wi-Fi)
• タブレットからの操作
• インストールしたSocketClientApp を開始して、IPアドレスを指定します
• 各ボタンをタップすると、BeagleBoardの該当するGPIOポートの
出力が操作できます
※画面UIはモーター制御をイメージしていますが
実習ではLED点灯で制御を確認します。
168
タブレット BeagleBoard
アプリ
Expansion
Header
GPIOポート
右 停止 18 GPIO_159
右 低速 19 GPIO_131
右 高速 20 GPIO_156
左 停止 21 GPIO_130
左 低速 23 GPIO_183
左 高速 24 GPIO_168
This material is licensed under the Creative Commons License BY-NC-SA 4.0.
8.Tablet連携(Wi-Fi)
• タブレットでBeagle Boardを操作してみま
しょう
Wi-fi経由でLEDの点灯が確認できます。
169This material is licensed under the Creative Commons License BY-NC-SA 4.0.
8.Tablet連携(Wi-Fi)
• <応用>
タブレット側の操作をボタンではなく、
3軸センサーでコントロール。
BeagleBoard 側のGPIOでモーター制御を
行えは簡単なラジコン操作も可能
170This material is licensed under the Creative Commons License BY-NC-SA 4.0.
まとめ
• まとめ
1.Android とは
2.Androidの概要
3.BeagleBoardへのポーティング
4.開発環境
5.ドライバ開発概要
171This material is licensed under the Creative Commons License BY-NC-SA 4.0.
まとめ
• まとめ
5. ドライバ開発概要
6. LED(GPIO)ドライバ
7. 無線LANドライバ
8. BeagleBoardとタブレットの連携
172This material is licensed under the Creative Commons License BY-NC-SA 4.0.
173
本ドキュメントは株式会社アイエスビー東北が作成しています。
http://www.isb.co.jp
This material is licensed under the Creative
Commons License BY-NC-SA 4.0.
Contributed By:
End of Document
174
This material is licensed under the Creative
Commons License BY-NC-SA 4.0.

Weitere ähnliche Inhalte

Was ist angesagt?

Linuxカーネルから紐解くAndroid
Linuxカーネルから紐解くAndroidLinuxカーネルから紐解くAndroid
Linuxカーネルから紐解くAndroiddemuyan
 
Android組み込み開発テキスト pandaboard es編
Android組み込み開発テキスト pandaboard es編Android組み込み開発テキスト pandaboard es編
Android組み込み開発テキスト pandaboard es編OESF Education
 
Binderのはじめの一歩とAndroid
Binderのはじめの一歩とAndroidBinderのはじめの一歩とAndroid
Binderのはじめの一歩とAndroidl_b__
 
Docker と ECS と WebSocket で最強のマルチプレイ・ゲームサーバを構築
Docker と ECS と WebSocket で最強のマルチプレイ・ゲームサーバを構築Docker と ECS と WebSocket で最強のマルチプレイ・ゲームサーバを構築
Docker と ECS と WebSocket で最強のマルチプレイ・ゲームサーバを構築gree_tech
 
そろそろSELinux を有効にしてみませんか?
そろそろSELinux を有効にしてみませんか?そろそろSELinux を有効にしてみませんか?
そろそろSELinux を有効にしてみませんか?Atsushi Mitsu
 
Kubernetesのしくみ やさしく学ぶ 内部構造とアーキテクチャー
Kubernetesのしくみ やさしく学ぶ 内部構造とアーキテクチャーKubernetesのしくみ やさしく学ぶ 内部構造とアーキテクチャー
Kubernetesのしくみ やさしく学ぶ 内部構造とアーキテクチャーToru Makabe
 
Secure element for IoT device
Secure element for IoT deviceSecure element for IoT device
Secure element for IoT deviceKentaro Mitsuyasu
 
Kubernete Meetup Tokyo #18 - Kubebuilder/controller-runtime 入門
Kubernete Meetup Tokyo #18 - Kubebuilder/controller-runtime 入門Kubernete Meetup Tokyo #18 - Kubebuilder/controller-runtime 入門
Kubernete Meetup Tokyo #18 - Kubebuilder/controller-runtime 入門Preferred Networks
 
RISC-Vのセキュリティ技術(TEE, Root of Trust, Remote Attestation)
RISC-Vのセキュリティ技術(TEE, Root of Trust, Remote Attestation)RISC-Vのセキュリティ技術(TEE, Root of Trust, Remote Attestation)
RISC-Vのセキュリティ技術(TEE, Root of Trust, Remote Attestation)Kuniyasu Suzaki
 
ネットワーク ゲームにおけるTCPとUDPの使い分け
ネットワーク ゲームにおけるTCPとUDPの使い分けネットワーク ゲームにおけるTCPとUDPの使い分け
ネットワーク ゲームにおけるTCPとUDPの使い分けモノビット エンジン
 
コンテナの作り方「Dockerは裏方で何をしているのか?」
コンテナの作り方「Dockerは裏方で何をしているのか?」コンテナの作り方「Dockerは裏方で何をしているのか?」
コンテナの作り方「Dockerは裏方で何をしているのか?」Masahito Zembutsu
 
C/C++プログラマのための開発ツール
C/C++プログラマのための開発ツールC/C++プログラマのための開発ツール
C/C++プログラマのための開発ツールMITSUNARI Shigeo
 
BuildKitによる高速でセキュアなイメージビルド
BuildKitによる高速でセキュアなイメージビルドBuildKitによる高速でセキュアなイメージビルド
BuildKitによる高速でセキュアなイメージビルドAkihiro Suda
 
3種類のTEE比較(Intel SGX, ARM TrustZone, RISC-V Keystone)
3種類のTEE比較(Intel SGX, ARM TrustZone, RISC-V Keystone)3種類のTEE比較(Intel SGX, ARM TrustZone, RISC-V Keystone)
3種類のTEE比較(Intel SGX, ARM TrustZone, RISC-V Keystone)Kuniyasu Suzaki
 
[Container Runtime Meetup] runc & User Namespaces
[Container Runtime Meetup] runc & User Namespaces[Container Runtime Meetup] runc & User Namespaces
[Container Runtime Meetup] runc & User NamespacesAkihiro Suda
 
いまさら聞けないarmを使ったNEONの基礎と活用事例
いまさら聞けないarmを使ったNEONの基礎と活用事例いまさら聞けないarmを使ったNEONの基礎と活用事例
いまさら聞けないarmを使ったNEONの基礎と活用事例Fixstars Corporation
 
Implementing generic JNI hardware control for Kotlin based app on AOSP
Implementing generic JNI hardware control for Kotlin based app on AOSPImplementing generic JNI hardware control for Kotlin based app on AOSP
Implementing generic JNI hardware control for Kotlin based app on AOSPCheng Wig
 
Kuberneteの運用を支えるGitOps
Kuberneteの運用を支えるGitOpsKuberneteの運用を支えるGitOps
Kuberneteの運用を支えるGitOpsshunki fujiwara
 

Was ist angesagt? (20)

Linuxカーネルから紐解くAndroid
Linuxカーネルから紐解くAndroidLinuxカーネルから紐解くAndroid
Linuxカーネルから紐解くAndroid
 
Android組み込み開発テキスト pandaboard es編
Android組み込み開発テキスト pandaboard es編Android組み込み開発テキスト pandaboard es編
Android組み込み開発テキスト pandaboard es編
 
Binderのはじめの一歩とAndroid
Binderのはじめの一歩とAndroidBinderのはじめの一歩とAndroid
Binderのはじめの一歩とAndroid
 
Docker と ECS と WebSocket で最強のマルチプレイ・ゲームサーバを構築
Docker と ECS と WebSocket で最強のマルチプレイ・ゲームサーバを構築Docker と ECS と WebSocket で最強のマルチプレイ・ゲームサーバを構築
Docker と ECS と WebSocket で最強のマルチプレイ・ゲームサーバを構築
 
そろそろSELinux を有効にしてみませんか?
そろそろSELinux を有効にしてみませんか?そろそろSELinux を有効にしてみませんか?
そろそろSELinux を有効にしてみませんか?
 
Kubernetesのしくみ やさしく学ぶ 内部構造とアーキテクチャー
Kubernetesのしくみ やさしく学ぶ 内部構造とアーキテクチャーKubernetesのしくみ やさしく学ぶ 内部構造とアーキテクチャー
Kubernetesのしくみ やさしく学ぶ 内部構造とアーキテクチャー
 
Secure element for IoT device
Secure element for IoT deviceSecure element for IoT device
Secure element for IoT device
 
Kubernete Meetup Tokyo #18 - Kubebuilder/controller-runtime 入門
Kubernete Meetup Tokyo #18 - Kubebuilder/controller-runtime 入門Kubernete Meetup Tokyo #18 - Kubebuilder/controller-runtime 入門
Kubernete Meetup Tokyo #18 - Kubebuilder/controller-runtime 入門
 
RISC-Vのセキュリティ技術(TEE, Root of Trust, Remote Attestation)
RISC-Vのセキュリティ技術(TEE, Root of Trust, Remote Attestation)RISC-Vのセキュリティ技術(TEE, Root of Trust, Remote Attestation)
RISC-Vのセキュリティ技術(TEE, Root of Trust, Remote Attestation)
 
ネットワーク ゲームにおけるTCPとUDPの使い分け
ネットワーク ゲームにおけるTCPとUDPの使い分けネットワーク ゲームにおけるTCPとUDPの使い分け
ネットワーク ゲームにおけるTCPとUDPの使い分け
 
コンテナの作り方「Dockerは裏方で何をしているのか?」
コンテナの作り方「Dockerは裏方で何をしているのか?」コンテナの作り方「Dockerは裏方で何をしているのか?」
コンテナの作り方「Dockerは裏方で何をしているのか?」
 
C/C++プログラマのための開発ツール
C/C++プログラマのための開発ツールC/C++プログラマのための開発ツール
C/C++プログラマのための開発ツール
 
BuildKitによる高速でセキュアなイメージビルド
BuildKitによる高速でセキュアなイメージビルドBuildKitによる高速でセキュアなイメージビルド
BuildKitによる高速でセキュアなイメージビルド
 
3種類のTEE比較(Intel SGX, ARM TrustZone, RISC-V Keystone)
3種類のTEE比較(Intel SGX, ARM TrustZone, RISC-V Keystone)3種類のTEE比較(Intel SGX, ARM TrustZone, RISC-V Keystone)
3種類のTEE比較(Intel SGX, ARM TrustZone, RISC-V Keystone)
 
initramfsについて
initramfsについてinitramfsについて
initramfsについて
 
[Container Runtime Meetup] runc & User Namespaces
[Container Runtime Meetup] runc & User Namespaces[Container Runtime Meetup] runc & User Namespaces
[Container Runtime Meetup] runc & User Namespaces
 
いまさら聞けないarmを使ったNEONの基礎と活用事例
いまさら聞けないarmを使ったNEONの基礎と活用事例いまさら聞けないarmを使ったNEONの基礎と活用事例
いまさら聞けないarmを使ったNEONの基礎と活用事例
 
Implementing generic JNI hardware control for Kotlin based app on AOSP
Implementing generic JNI hardware control for Kotlin based app on AOSPImplementing generic JNI hardware control for Kotlin based app on AOSP
Implementing generic JNI hardware control for Kotlin based app on AOSP
 
Kuberneteの運用を支えるGitOps
Kuberneteの運用を支えるGitOpsKuberneteの運用を支えるGitOps
Kuberneteの運用を支えるGitOps
 
Argo CD Deep Dive
Argo CD Deep DiveArgo CD Deep Dive
Argo CD Deep Dive
 

Ähnlich wie Android™組込み開発基礎コース BeagleBoard編

Androidアプリケーション開発入門
Androidアプリケーション開発入門Androidアプリケーション開発入門
Androidアプリケーション開発入門OESF Education
 
ロボットシステムのつくりかた 〜Robot Operating Systemというアプローチ〜
ロボットシステムのつくりかた 〜Robot Operating Systemというアプローチ〜ロボットシステムのつくりかた 〜Robot Operating Systemというアプローチ〜
ロボットシステムのつくりかた 〜Robot Operating Systemというアプローチ〜Hideki Takase
 
bc10 (Android 2.2対応) について @Gadget1 R2
bc10 (Android 2.2対応) について @Gadget1 R2 bc10 (Android 2.2対応) について @Gadget1 R2
bc10 (Android 2.2対応) について @Gadget1 R2 BeatCraft
 
【de:code 2020】 セキュリティは万全ですか? Azure Sphere によるセキュリティ紹介
【de:code 2020】 セキュリティは万全ですか? Azure Sphere によるセキュリティ紹介【de:code 2020】 セキュリティは万全ですか? Azure Sphere によるセキュリティ紹介
【de:code 2020】 セキュリティは万全ですか? Azure Sphere によるセキュリティ紹介日本マイクロソフト株式会社
 
エンジニアのためのOSSライセンス管理~OSS管理ツールの池の水全部抜く~
エンジニアのためのOSSライセンス管理~OSS管理ツールの池の水全部抜く~エンジニアのためのOSSライセンス管理~OSS管理ツールの池の水全部抜く~
エンジニアのためのOSSライセンス管理~OSS管理ツールの池の水全部抜く~Daisuke Morishita
 
App017 power shellの新しい相棒_visual_studio_
App017 power shellの新しい相棒_visual_studio_App017 power shellの新しい相棒_visual_studio_
App017 power shellの新しい相棒_visual_studio_Tech Summit 2016
 
App017 power shellの新しい相棒_visual_studio
App017 power shellの新しい相棒_visual_studioApp017 power shellの新しい相棒_visual_studio
App017 power shellの新しい相棒_visual_studioTech Summit 2016
 
Open棟梁 社会インフラシステム アーキテクチャの提案
Open棟梁 社会インフラシステム アーキテクチャの提案Open棟梁 社会インフラシステム アーキテクチャの提案
Open棟梁 社会インフラシステム アーキテクチャの提案Daisuke Nishino
 
Androidタブレットアプリケーション開発入門
Androidタブレットアプリケーション開発入門Androidタブレットアプリケーション開発入門
Androidタブレットアプリケーション開発入門OESF Education
 
技術選択とアーキテクトの役割
技術選択とアーキテクトの役割技術選択とアーキテクトの役割
技術選択とアーキテクトの役割Toru Yamaguchi
 
サポート エンジニアが語る、Microsoft Azure を支えるインフラの秘密
サポート エンジニアが語る、Microsoft Azure を支えるインフラの秘密サポート エンジニアが語る、Microsoft Azure を支えるインフラの秘密
サポート エンジニアが語る、Microsoft Azure を支えるインフラの秘密ShuheiUda
 
Hyper-V + Linux {which Microsoft Loves}
Hyper-V + Linux {which Microsoft Loves}Hyper-V + Linux {which Microsoft Loves}
Hyper-V + Linux {which Microsoft Loves}Norio Sashizaki
 
Microsoft Intelligent Edge Technologies
Microsoft Intelligent Edge TechnologiesMicrosoft Intelligent Edge Technologies
Microsoft Intelligent Edge TechnologiesTakeshi Fukuhara
 
見せてもらおうか、新しい Microsoft Edge の性能とやらを
見せてもらおうか、新しい Microsoft Edge の性能とやらを見せてもらおうか、新しい Microsoft Edge の性能とやらを
見せてもらおうか、新しい Microsoft Edge の性能とやらを彰 村地
 
de:code 2018 DA06 SQL Server 管理者におくる SQL Server on Linux Tips
de:code 2018 DA06 SQL Server 管理者におくる SQL Server on Linux Tipsde:code 2018 DA06 SQL Server 管理者におくる SQL Server on Linux Tips
de:code 2018 DA06 SQL Server 管理者におくる SQL Server on Linux TipsMasayuki Ozawa
 
20130203 OSS-DB Exam Silver 技術解説無料セミナー
20130203 OSS-DB Exam Silver 技術解説無料セミナー20130203 OSS-DB Exam Silver 技術解説無料セミナー
20130203 OSS-DB Exam Silver 技術解説無料セミナーKazuko Itoda
 
ET2016 Smart Japan Alliance Llilum 161118
ET2016 Smart Japan Alliance Llilum 161118ET2016 Smart Japan Alliance Llilum 161118
ET2016 Smart Japan Alliance Llilum 161118Atomu Hidaka
 

Ähnlich wie Android™組込み開発基礎コース BeagleBoard編 (20)

Androidアプリケーション開発入門
Androidアプリケーション開発入門Androidアプリケーション開発入門
Androidアプリケーション開発入門
 
ロボットシステムのつくりかた 〜Robot Operating Systemというアプローチ〜
ロボットシステムのつくりかた 〜Robot Operating Systemというアプローチ〜ロボットシステムのつくりかた 〜Robot Operating Systemというアプローチ〜
ロボットシステムのつくりかた 〜Robot Operating Systemというアプローチ〜
 
bc10 (Android 2.2対応) について @Gadget1 R2
bc10 (Android 2.2対応) について @Gadget1 R2 bc10 (Android 2.2対応) について @Gadget1 R2
bc10 (Android 2.2対応) について @Gadget1 R2
 
【de:code 2020】 セキュリティは万全ですか? Azure Sphere によるセキュリティ紹介
【de:code 2020】 セキュリティは万全ですか? Azure Sphere によるセキュリティ紹介【de:code 2020】 セキュリティは万全ですか? Azure Sphere によるセキュリティ紹介
【de:code 2020】 セキュリティは万全ですか? Azure Sphere によるセキュリティ紹介
 
エンジニアのためのOSSライセンス管理~OSS管理ツールの池の水全部抜く~
エンジニアのためのOSSライセンス管理~OSS管理ツールの池の水全部抜く~エンジニアのためのOSSライセンス管理~OSS管理ツールの池の水全部抜く~
エンジニアのためのOSSライセンス管理~OSS管理ツールの池の水全部抜く~
 
App017 power shellの新しい相棒_visual_studio_
App017 power shellの新しい相棒_visual_studio_App017 power shellの新しい相棒_visual_studio_
App017 power shellの新しい相棒_visual_studio_
 
App017 power shellの新しい相棒_visual_studio
App017 power shellの新しい相棒_visual_studioApp017 power shellの新しい相棒_visual_studio
App017 power shellの新しい相棒_visual_studio
 
Open棟梁 社会インフラシステム アーキテクチャの提案
Open棟梁 社会インフラシステム アーキテクチャの提案Open棟梁 社会インフラシステム アーキテクチャの提案
Open棟梁 社会インフラシステム アーキテクチャの提案
 
Androidタブレットアプリケーション開発入門
Androidタブレットアプリケーション開発入門Androidタブレットアプリケーション開発入門
Androidタブレットアプリケーション開発入門
 
技術選択とアーキテクトの役割
技術選択とアーキテクトの役割技術選択とアーキテクトの役割
技術選択とアーキテクトの役割
 
サポート エンジニアが語る、Microsoft Azure を支えるインフラの秘密
サポート エンジニアが語る、Microsoft Azure を支えるインフラの秘密サポート エンジニアが語る、Microsoft Azure を支えるインフラの秘密
サポート エンジニアが語る、Microsoft Azure を支えるインフラの秘密
 
Hyper-V + Linux {which Microsoft Loves}
Hyper-V + Linux {which Microsoft Loves}Hyper-V + Linux {which Microsoft Loves}
Hyper-V + Linux {which Microsoft Loves}
 
Microsoft Intelligent Edge Technologies
Microsoft Intelligent Edge TechnologiesMicrosoft Intelligent Edge Technologies
Microsoft Intelligent Edge Technologies
 
見せてもらおうか、新しい Microsoft Edge の性能とやらを
見せてもらおうか、新しい Microsoft Edge の性能とやらを見せてもらおうか、新しい Microsoft Edge の性能とやらを
見せてもらおうか、新しい Microsoft Edge の性能とやらを
 
Androidアプリケーション開発中級研修 前編
Androidアプリケーション開発中級研修 前編Androidアプリケーション開発中級研修 前編
Androidアプリケーション開発中級研修 前編
 
de:code 2018 DA06 SQL Server 管理者におくる SQL Server on Linux Tips
de:code 2018 DA06 SQL Server 管理者におくる SQL Server on Linux Tipsde:code 2018 DA06 SQL Server 管理者におくる SQL Server on Linux Tips
de:code 2018 DA06 SQL Server 管理者におくる SQL Server on Linux Tips
 
20130203 oss-db-lpi
20130203 oss-db-lpi20130203 oss-db-lpi
20130203 oss-db-lpi
 
20130203 OSS-DB Exam Silver 技術解説無料セミナー
20130203 OSS-DB Exam Silver 技術解説無料セミナー20130203 OSS-DB Exam Silver 技術解説無料セミナー
20130203 OSS-DB Exam Silver 技術解説無料セミナー
 
Node-RED v2.0新機能紹介
Node-RED v2.0新機能紹介Node-RED v2.0新機能紹介
Node-RED v2.0新機能紹介
 
ET2016 Smart Japan Alliance Llilum 161118
ET2016 Smart Japan Alliance Llilum 161118ET2016 Smart Japan Alliance Llilum 161118
ET2016 Smart Japan Alliance Llilum 161118
 

Mehr von OESF Education

Introduction of oesf education consortium
Introduction of oesf education consortiumIntroduction of oesf education consortium
Introduction of oesf education consortiumOESF Education
 
Android UIデザイン入門
Android UIデザイン入門Android UIデザイン入門
Android UIデザイン入門OESF Education
 
Android Application Development Advanced
Android Application Development AdvancedAndroid Application Development Advanced
Android Application Development AdvancedOESF Education
 
Android Application Development Basic
Android Application Development BasicAndroid Application Development Basic
Android Application Development BasicOESF Education
 
Androidプログラミング入門
Androidプログラミング入門Androidプログラミング入門
Androidプログラミング入門OESF Education
 
Androidアプリケーション応用 WebAPI開発
Androidアプリケーション応用 WebAPI開発Androidアプリケーション応用 WebAPI開発
Androidアプリケーション応用 WebAPI開発OESF Education
 
Android アプリケーション開発応用
Android アプリケーション開発応用Android アプリケーション開発応用
Android アプリケーション開発応用OESF Education
 
Android Application WebAPI Development Training
Android Application WebAPI Development TrainingAndroid Application WebAPI Development Training
Android Application WebAPI Development TrainingOESF Education
 

Mehr von OESF Education (8)

Introduction of oesf education consortium
Introduction of oesf education consortiumIntroduction of oesf education consortium
Introduction of oesf education consortium
 
Android UIデザイン入門
Android UIデザイン入門Android UIデザイン入門
Android UIデザイン入門
 
Android Application Development Advanced
Android Application Development AdvancedAndroid Application Development Advanced
Android Application Development Advanced
 
Android Application Development Basic
Android Application Development BasicAndroid Application Development Basic
Android Application Development Basic
 
Androidプログラミング入門
Androidプログラミング入門Androidプログラミング入門
Androidプログラミング入門
 
Androidアプリケーション応用 WebAPI開発
Androidアプリケーション応用 WebAPI開発Androidアプリケーション応用 WebAPI開発
Androidアプリケーション応用 WebAPI開発
 
Android アプリケーション開発応用
Android アプリケーション開発応用Android アプリケーション開発応用
Android アプリケーション開発応用
 
Android Application WebAPI Development Training
Android Application WebAPI Development TrainingAndroid Application WebAPI Development Training
Android Application WebAPI Development Training
 

Kürzlich hochgeladen

IoT in the era of generative AI, Thanks IoT ALGYAN.pptx
IoT in the era of generative AI, Thanks IoT ALGYAN.pptxIoT in the era of generative AI, Thanks IoT ALGYAN.pptx
IoT in the era of generative AI, Thanks IoT ALGYAN.pptxAtomu Hidaka
 
新人研修のまとめ 2024/04/12の勉強会で発表されたものです。
新人研修のまとめ       2024/04/12の勉強会で発表されたものです。新人研修のまとめ       2024/04/12の勉強会で発表されたものです。
新人研修のまとめ 2024/04/12の勉強会で発表されたものです。iPride Co., Ltd.
 
Postman LT Fukuoka_Quick Prototype_By Daniel
Postman LT Fukuoka_Quick Prototype_By DanielPostman LT Fukuoka_Quick Prototype_By Daniel
Postman LT Fukuoka_Quick Prototype_By Danieldanielhu54
 
PHP-Conference-Odawara-2024-04-000000000
PHP-Conference-Odawara-2024-04-000000000PHP-Conference-Odawara-2024-04-000000000
PHP-Conference-Odawara-2024-04-000000000Shota Ito
 
20240412_HCCJP での Windows Server 2025 Active Directory
20240412_HCCJP での Windows Server 2025 Active Directory20240412_HCCJP での Windows Server 2025 Active Directory
20240412_HCCJP での Windows Server 2025 Active Directoryosamut
 
プレイマットのパターン生成支援ツール
プレイマットのパターン生成支援ツールプレイマットのパターン生成支援ツール
プレイマットのパターン生成支援ツールsugiuralab
 
プレイマットのパターン生成支援ツールの評価
プレイマットのパターン生成支援ツールの評価プレイマットのパターン生成支援ツールの評価
プレイマットのパターン生成支援ツールの評価sugiuralab
 
Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。
Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。
Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。iPride Co., Ltd.
 

Kürzlich hochgeladen (8)

IoT in the era of generative AI, Thanks IoT ALGYAN.pptx
IoT in the era of generative AI, Thanks IoT ALGYAN.pptxIoT in the era of generative AI, Thanks IoT ALGYAN.pptx
IoT in the era of generative AI, Thanks IoT ALGYAN.pptx
 
新人研修のまとめ 2024/04/12の勉強会で発表されたものです。
新人研修のまとめ       2024/04/12の勉強会で発表されたものです。新人研修のまとめ       2024/04/12の勉強会で発表されたものです。
新人研修のまとめ 2024/04/12の勉強会で発表されたものです。
 
Postman LT Fukuoka_Quick Prototype_By Daniel
Postman LT Fukuoka_Quick Prototype_By DanielPostman LT Fukuoka_Quick Prototype_By Daniel
Postman LT Fukuoka_Quick Prototype_By Daniel
 
PHP-Conference-Odawara-2024-04-000000000
PHP-Conference-Odawara-2024-04-000000000PHP-Conference-Odawara-2024-04-000000000
PHP-Conference-Odawara-2024-04-000000000
 
20240412_HCCJP での Windows Server 2025 Active Directory
20240412_HCCJP での Windows Server 2025 Active Directory20240412_HCCJP での Windows Server 2025 Active Directory
20240412_HCCJP での Windows Server 2025 Active Directory
 
プレイマットのパターン生成支援ツール
プレイマットのパターン生成支援ツールプレイマットのパターン生成支援ツール
プレイマットのパターン生成支援ツール
 
プレイマットのパターン生成支援ツールの評価
プレイマットのパターン生成支援ツールの評価プレイマットのパターン生成支援ツールの評価
プレイマットのパターン生成支援ツールの評価
 
Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。
Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。
Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。
 

Android™組込み開発基礎コース BeagleBoard編