SlideShare a Scribd company logo
1 of 314
This	
  material	
  is	
  licensed	
  under	
  the	
  Crea1ve	
  Commons	
  License	
  BY-­‐NC-­‐SA	
  4.0.	
   1	
  1	
  
Android組込み開発
基礎コース
Pandaboard  ES  編
20120823オリジナル	
20140901改定
This	
  material	
  is	
  licensed	
  under	
  the	
  Crea1ve	
  Commons	
  License	
  BY-­‐NC-­‐SA	
  4.0.	
   2	
  2	
  
テキストのご利用に関して
・本コースとコースのモジュールの内容、および受講者に渡される印刷物
などを含めたコースに関連する教材全ての著作権はOESFに帰属します。	
・本コースのテキストは、Creative Commons License BY-NC-SA 4.0 に基
づいて提供されています。OESF会員またはOESFエデュケーションコン
ソーシアムメンバーでない場合、内容の改変の有無にかかわらず、商用
目的での利用は禁止されています。	
	
・本教育プログラムは、その中で提供される教材全てを含め、OESFからの
いかなる保証もなしに提供されます。OESFは、本コースの内容または
コースの詳細な情報を使用することに起因して、または誤って使用する
ことに起因して何らかの障害や法的な行為が生じても、いかなる責任も
負いません。
This	
  material	
  is	
  licensed	
  under	
  the	
  Crea1ve	
  Commons	
  License	
  BY-­‐NC-­‐SA	
  4.0.	
   3	
  3	
  
トレーニングの目的
•  LinuxとAndroidの違いを理解する	
•  組込みLinuxとAndroidの開発環境を構築できる	
•  LinuxとAndroidの起動手順の違いを理解する	
•  実機へのAndroidの移植方法を理解する	
•  実機のデバッグ方法を理解する	
•  演習を通してプラットフォーム開発を体験する
This	
  material	
  is	
  licensed	
  under	
  the	
  Crea1ve	
  Commons	
  License	
  BY-­‐NC-­‐SA	
  4.0.	
   4	
  4	
  
受講するに当たって必要なスキル
•  OSの概念を理解している事	
•  Java言語またはC/C++言語の開発経験がある事	
–  基本的なJavaやC/C++の言語仕様について理解がある事	
•  Linuxのコマンド操作経験がある事	
–  演習では実際にLinuxコマンドを操作して移植作業を実
施する	
•  Eclipseを使用した経験がある事	
–  Androidのアプリケーション開発はEclipseを使用する
This	
  material	
  is	
  licensed	
  under	
  the	
  Crea1ve	
  Commons	
  License	
  BY-­‐NC-­‐SA	
  4.0.	
   5	
  5	
  
目次
1章. Linux概要	
2章. Android概要	
3章. ターゲットのボード	
4章. 実機でAndroidを動かす(実習)	
5章. デバイスの組み込み	
6章. NDK/JNI概要	
7章. 外部装置との連携アプリケーション作成(実習)
This	
  material	
  is	
  licensed	
  under	
  the	
  Crea1ve	
  Commons	
  License	
  BY-­‐NC-­‐SA	
  4.0.	
   6	
  6	
  
第1章    Linux概要
This	
  material	
  is	
  licensed	
  under	
  the	
  Crea1ve	
  Commons	
  License	
  BY-­‐NC-­‐SA	
  4.0.	
   7	
  7	
  
1章の概要
•  Linuxとは	
•  ルートファイルシステム	
•  起動シーケンス	
•  Initの概要	
•  組み込み向けOS	
•  組み込みLinux
This	
  material	
  is	
  licensed	
  under	
  the	
  Crea1ve	
  Commons	
  License	
  BY-­‐NC-­‐SA	
  4.0.	
   8	
  8	
  
Linuxとは?
u  1998年~	
u  オープンソースで完全フリーで世界中で最もよく使われている	
u  GPLライセンス(ソースコードの公開義務)	
u  UNIX*1のクローンなのでUNIXの一部資産が流用可能	
u  リーナス・トーバルズ氏が開発/公開したOS :カーネルのみの提供
(kernel.org)	
u  Linus中心の強固な管理体制と安定性の確保	
u  主なLinuxシステム(ブートローダーやfsも含む)のディストリビューション	
l  Debian系:パッケージ管理はdeb形式	
l Debian GNU Linux、Ubuntu: コミュニティベース、100%フリーであることが理念	
l  RedHat系:パッケージ管理はRPM形式	
l Fedora、VineLinux : RedHatLinux後継のコミュニティによる実験要素が強い	
l RedHat Enterprise Linux(商用)	
*1 : UNIXは現在BSD系UNIXとして存続(FreeBSD,NetBSD)
This	
  material	
  is	
  licensed	
  under	
  the	
  Crea1ve	
  Commons	
  License	
  BY-­‐NC-­‐SA	
  4.0.	
   9	
  9	
  
Debian系Linuxの起動シーケンス
BIOS	
 ブートデバイスの専用ブロック読み出し	
ブートローダ	
 LILO/GRUBなど	
起動パラメータの設定	
Boot カーネル	
 CPU初期化	
ハードウェアのチェック	
ドライバ読みこみ	
起動用ファイル(init)が	
ある領域のマウント	
initrd	
起動に必要なドライバが格納され
ている一時的なルートファイルシス
テム(初期RAMディスク)	
init	
/etc/inittab	
基本設定	
 ・ネットワーク	
 ・キーボード	
 ・デバイス初期化	
デーモンの起動	
(rcスクリプト経由)	
login	
メモリに展開	
シェル	
initは以下のいずれかの場所にある	
/sbin/init, /etc/init,	
/bin/init, /bin/sh	
Power ON or Reboot	
login:hogetaro	
password:	
$
This	
  material	
  is	
  licensed	
  under	
  the	
  Crea1ve	
  Commons	
  License	
  BY-­‐NC-­‐SA	
  4.0.	
   10	
  10	
  
Debian系Linuxのinitが行う設定
/etc/inittab	
#	
 デフォルトランレベル3	
 
id:3:initdefault:	
 
#	
 ブート時の処理(システム初期化スクリプト)	
 
si::systeminit:/etc/init.d/rcS	
 
#各ランレベル用のrcスクリプトを実行し、その終了を待つ	
 
10:0:wait:/etc/init.d/rc	
 0	
 
11:1:wait:/etc/init.d/rc	
 1	
 
12:2:wait:/etc/init.d/rc	
 2	
 
13:3:wait:/etc/init.d/rc	
 3	
 
14:4:wait:/etc/init.d/rc	
 4	
 
15:5:wait:/etc/init.d/rc	
 5	
 
16:6:wait:/etc/init.d/rc	
 6	
 
#	
 1度だけ実行される処理(/sbin/update実行)	
 
ud::once:/sbin/update	
 
#	
 端末制御(ランレベル2~5で/sbin/mingetty実行)	
 
#	
 終了されると再実行	
 
1:2345:respawn:/sbin/mingetty	
 tty1	
 
:	
 
#	
 ランレベル5の時のログイン処理(/	
 etc/X11/prefdmを実行)	
 
#	
 終了されると再実行	
 
X:5:respawn:/etc/X11/prefdm	
 -nodaemon	
 
init	
デーモン3	
•  initが行う各種設定はinittabに記載されている情報を元
に行う	
デーモン2	
デーモン1
This	
  material	
  is	
  licensed	
  under	
  the	
  Crea1ve	
  Commons	
  License	
  BY-­‐NC-­‐SA	
  4.0.	
   11	
  11	
  
Debian系Linux  の  inittabの書式
/etc/init.d/rcSがやること	
∟/etc/default/rcSを実行	
∟/etc/rcS.d内のスクリプト全てを実行	
•  ホスト名の設定	
•  クロックの設定	
•  キーマップの設定	
•  言語とフォントの設定	
•  ハードディスクの検査と修復	
•  ハードディスクのマウント	
initdefault	
 システム起動完了時に入るべきランレ
ベル	
respawn	
 プロセスが終了したらすぐに再起動する	
ondemand	
 respawnと同じだがオンデマンドランレ
ベルが指定された場合のみ実行する	
wait	
 プロセスが終了するまで待機してラン
レベルになったときだけ実行する	
once	
 指定ランレベルになったときだけ一度
だけ実行する	
off	
 何もしない	
boot	
 システム起動中に実行する	
bootwait	
 システム起動中に実行し、プロセスが
終了するまで待機	
sysinit	
 システム起動中に実行する
(boot,bootwaitより先に実行される)	
ctrlaltdel	
 SIGINTを受け取ったときに実行する	
アクションの種類	
ランレベルと動作モード	
0	
 Halt	
1	
シングルユーザモ
ード	
2	
3	
4	
マルチユーザモード	
(text)	
5	
 マルチユーザ(X)	
6	
 reboot
This	
  material	
  is	
  licensed	
  under	
  the	
  Crea1ve	
  Commons	
  License	
  BY-­‐NC-­‐SA	
  4.0.	
   12	
  12	
  
Debian系Linux  の
ルートファイルシステム
bin	
boot	
dev	
etc	
lib	
mnt(media)	
opt	
proc	
home/root	
sbin	
sys	
tmp	
usr	
var	
コマンド類	
起動ファイル	
デバイスファイル	
設定ファイル	
ライブラリ、カーネルモジュール	
マウントポイント	
追加アプリケーション	
カーネル情報(cpu、process、メモリ情報の参照)	
ユーザのホームディレクトリ	
システム管理コマンド(shtdown、mountなど)	
システムレポジトリ	
一時ファイル	
各種ユーザプログラム	
可変データ(ログ、キャッシュ、スプーラなど)	
root	
/
This	
  material	
  is	
  licensed	
  under	
  the	
  Crea1ve	
  Commons	
  License	
  BY-­‐NC-­‐SA	
  4.0.	
   13	
  13	
  
組込み機器向けOSの条件
•  少ない資源(メモリ)で動作可能	
•  リアルタイムオペレーティングシステム	
•  低価格	
•  製品企画から市場投入までの短期化
This	
  material	
  is	
  licensed	
  under	
  the	
  Crea1ve	
  Commons	
  License	
  BY-­‐NC-­‐SA	
  4.0.	
   14	
  14	
  
従来の組込み向けOS
OS名	
 提供	
 開発環境	
 主な用途	
 価格	
 対応PF	
VxWorks	
 ウィンドリバー	
 Eclipse	
 組込み機器全般	
有償	
ソースコード
は別途購入	
ARM他	
多数	
WindowsCE	
 マイクロソフト	
Windows CE Toolkit for
Visual C++/Visual BASIC	
(Visual Studio)	
組込み機器全般	
有償	
Closed Source	
ARM他	
多数	
T-kernel	
T-kernel
Extension	
T-Engineフォー
ラム	
Eclipse for PMC T-
Kernel	
組込み機器全般	
無償/有償	
Open Source	
(ただし独自
のライセンス)	
ARM	
SH	
M32	
Windows	
Phone8	
マイクロソフト	
 Visual Studio	
 WindowsPhone専用	
プロプライエタリ	
EULA形式の
契約書が必要	
ARM	
iOS	
 Apple	
 XCode	
iPhone/	
iPad専用	
プロプライエタリ	
EULA形式の
契約書が必要	
Aoole独自	
Symbian OS	
 Nokia	
Carbide C++ (Eclipse)	
MOAP,S60,UIQ3	
携帯電話/スマート
フォン	
SDKは有償版
と無償版がある	
OpenSource	
ARM
This	
  material	
  is	
  licensed	
  under	
  the	
  Crea1ve	
  Commons	
  License	
  BY-­‐NC-­‐SA	
  4.0.	
   15	
  15	
  
組込み向けLinux
OS名	
 提供	
 主な用途	
 価格	
 対応PF	
MontaVista
Linux	
米モンタビスタソフトウェア	
 携帯電話向け	
 有償	
x86、
PowerPCMIP
Sなど	
Wind River
Linux	
Wind River	
 組込み機器全般	
 有償	
x86、
PowerPC、
MIPS、	
Tizen	
Linux Foundation/LiMo	
Tizen Association	
組込み機器全般	
無償	
オープンソース	
ARM	
Intel(X86)	
AxLinux	
 アックス	
 組込み機器全般	
 有償	
ARM、OMAP	
SHなど	
Lineo uLinux	
リネオ ソリューションズ
株式会社	
	
組込み機器全般	
オープンソース	
ソフトウェアコンポ
ーネント:提供各社
ライセンスによる	
ARM他	
多数	
Android	
 Google & OHA	
スマートフォン	
タブレット	
無償	
オープンソース	
ARM、x86、
MIPS、OMA
Pなど	
Embedded Master	
 OESF	
 組込み機器全般	
無償	
オープンソース	
ARM	
OMAPなど	
Tizen Association・・・docomo, intel, orange, Panasonic, SAMSUNG, NEC, Sprint, HUAWEI, vodafoneなどが参加
This	
  material	
  is	
  licensed	
  under	
  the	
  Crea1ve	
  Commons	
  License	
  BY-­‐NC-­‐SA	
  4.0.	
   16	
  16	
  
組込みLinuxの特徴
•  Linuxカーネルに少数のフリーソフトウェアを組み合わせたもの	
•  組込みCPUアーキテクチャのサポート	
•  ARM、MIPS、X86など	
•  RAMや二次記憶装置などの容量が小さい	
•  2MB以下のメモリで起動可能	
•  組込み機器のアプリケーションや対象ハードウェアに必要な機
能に特化	
•  MMUユニット※のないCPUでも動作可能(CONFIG_MMU=n) 	
•  シングルプロセッサに最適化可能(CONFIG_SMP=n) 	
•  NANDの直接使用(JFFS2、UBIFS)	
•  ファイルシステム 	
•  マウント速度が速い(YAFFS2など) 	
•  読み出し専用(romfs)	
※MMU:メモリ管理ユニット
This	
  material	
  is	
  licensed	
  under	
  the	
  Crea1ve	
  Commons	
  License	
  BY-­‐NC-­‐SA	
  4.0.	
   17	
  17	
  
組込みLinuxのリアルタイム性能
• ソフトリアルタイム (CONFIG_PREEMPT) 	
• ハードリアルタイム (CONFIG_PREEMPT_RT patch set)	
	
• 他のカーネルとの組み合わせでリアルタイム性を向上	
• RTAI (Adeos+Linux) 	
• RTLinux (Realtime executive+Linux) 	
• Linux on ITRON (ITRON+Linux) 	
• T-Linux (T-Engine+Linux) 	
• L4-Linux (L4+Linux) 	
• Litron (TOPPERS/JSPカーネル+Linux) 	
• Wind River Real-Time Core for Linux (Real-Time Core+Linux) 	
参考:http://monoist.atmarkit.co.jp/mn/articles/0501/12/news113.html
This	
  material	
  is	
  licensed	
  under	
  the	
  Crea1ve	
  Commons	
  License	
  BY-­‐NC-­‐SA	
  4.0.	
   18	
  18	
  
組込みLinuxの開発環境
• 一般的なツール	
• Eclipse C/C++ Development Tooling (CDT) :EclipseでのCやC++の開発に必須 	
• Target Management (RSE) 	
• Linux Tools Project :プロファイラや動的解析などの機能を統合 	
• Tools for mobile Linux (TmL) 	
• EGit :バージョン管理システムの一つ、Gitの統合 	
• Mylyn :バグトラッカの統合 	
• 特定のOSに特化したEclipseプラグイン	
• Moblin Eclipse Plug-in	
• Android Development Tools (ADT) 	
• その他の開発環境	
• QEMU:エミュレータ	
• distcc、icecc:分散コンパイル用コンパイラ	
• 専用の商用製品など
This	
  material	
  is	
  licensed	
  under	
  the	
  Crea1ve	
  Commons	
  License	
  BY-­‐NC-­‐SA	
  4.0.	
   19	
  19	
  
組込みLinuxに関わる団体
•  Linux Foundation (CE Linux Forumを吸収)	
•  Linuxオペレーティングシステムの普及をサポートする非営利のコンソーシアム	
•  旧CE Linux Forumが開催する定期的な無料イベント開催	
•  日本テクニカルジャンボリー
http://elinux.org/Japan_Technical_Jamboree_Guidance	
•  LiMo Foundation	
•  Linuxを使った携帯電話のアプリケーション環境の標準化団体	
•  モトローラ、NEC、パナソニック、サムスン電子、NTTドコモ、ボーダフォンなど	
•  Open Handset Alliance (OHA)	
•  Googleとともに携帯向けAndroidの開発推進を行うアライアンス	
•  Open Embedded Software Foundation (OESF)	
•  組み込み機器向けAndroidに関わる企業間の協力を目的とした一般社団法人	
•  Linaro	
•  ARMのチップベンダである参加企業の各SoCに最適化されたツール、カーネル、
ミドルウェアを提供することなどを目的とした非営利団体
This	
  material	
  is	
  licensed	
  under	
  the	
  Crea1ve	
  Commons	
  License	
  BY-­‐NC-­‐SA	
  4.0.	
   20	
  20	
  
第2章    Android概要
This	
  material	
  is	
  licensed	
  under	
  the	
  Crea1ve	
  Commons	
  License	
  BY-­‐NC-­‐SA	
  4.0.	
   21	
  21	
  
2章の概要
•  Androidとは	
–  主な機能、歴史	
•  Androidアプリケーションの動作環境	
•  Androidのアーキテクチャ	
•  アプリケーション開発環境	
•  プラットフォーム開発環境	
–  ソースコード	
–  ルートファイルシステム	
–  Androidの起動処理	
•  エミュレータ
This	
  material	
  is	
  licensed	
  under	
  the	
  Crea1ve	
  Commons	
  License	
  BY-­‐NC-­‐SA	
  4.0.	
   22	
  22	
  
Androidとは?
•  GoogleとOHAが提供するモバイル端末向けのオープンソー
スのプラットフォーム	
•  Linuxカーネルをベースにした独自OS	
•  主にApache2.0ライセンスなので複写・修正・再配布が自由	
ü  カーネルなどの一部はGPLライセンス	
•  アプリケーション開発用に無償でSDK、NDKが提供	
ü  リッチな開発環境と端末エミュレータ	
ü  既存ソフトウェア資産の再利用	
•  ソースコードが公開されているのでプラットフォームのカスタ
マイズが可能
This	
  material	
  is	
  licensed	
  under	
  the	
  Crea1ve	
  Commons	
  License	
  BY-­‐NC-­‐SA	
  4.0.	
   23	
  23	
  
Androidの主な機能
【プラットフォーム全般】	
l リッチなユーザインタフェース	
l ブラウザによるWebサイトの閲覧 	
→ベースはオープンソースWebKitエンジン	
l 2D、3Dグラフィック	
→カスタム2Dグラフィックライブラリ、 OpenGL/ES	
l 軽量データベース	
→構造化されたデータ領域のためのSQLite3搭載 	
l 一般的なオーディオ、ビデオと静止画フォーマットをサポート	
→MPEG4、H.264、MP3、AAC、AMR、JPG、PNG、GIF、WebM	
l Dalvik VM(ダルビック バーチャルマシン)	
→JavaVMよりもモバイル端末などの低メモリ環境に最適化	
l Bluetooth、EDGE、3G、WiFi、カメラ、GPS、コンパス、加速度計・・・ハード制御用API 	
	
【開発】	
l リッチな開発環境(Eclipse、DDMSなど)と端末エミュレータ	
l 豊富で整ったアプリケーションフレームワークと拡張の自由 	
→コンポーネントの再利用と置き換えが可能
This	
  material	
  is	
  licensed	
  under	
  the	
  Crea1ve	
  Commons	
  License	
  BY-­‐NC-­‐SA	
  4.0.	
   24	
  24	
  
Androidの歴史
年月	
 できごと	
2003年10月	
 Android社発足	
2005年 8月	
 GoogleがAndroid社を買収	
2007年11月	
 Open	
  Handset	
  Alliance	
  (OHA)が発足	
Android	
  SDK	
  1.0	
  リリース	
2008年10月	
 世界初のAndroid搭載スマートフォン 「T-­‐Mobile	
  G1」 発売	
2009年 4月	
 Android	
  SDK	
  1.5r1	
  リリース	
2009年 5月	
 Android	
  SDK	
  1.5r2	
  リリース	
2009年 7月	
 NTTドコモより、日本国内初のAndroid携帯 「HT-­‐03A」発売	
Android	
  SDK	
  1.5r3	
  発表
This	
  material	
  is	
  licensed	
  under	
  the	
  Crea1ve	
  Commons	
  License	
  BY-­‐NC-­‐SA	
  4.0.	
   25	
  25	
  
Androidの歴史
年月	
 できごと	
2009年 9月	
 Android	
  SDK	
  1.6	
  発表	
2009年10月	
 Android	
  SDK	
  2.0	
  発表	
2010年 1月	
 Android	
  SDK	
  2.1	
  発表	
2010年 5月	
 Android	
  SDK	
  2.2	
  発表	
2010年 12月	
 Android	
  SDK	
  2.3	
  発表	
2011年 2月	
 Android	
  SDK	
  3.0	
  発表	
2011年 7	
  月	
 Android	
  SDK	
  3.2	
  発表	
2011年 10月	
 Android	
  SDK	
  4.0	
2011年 12月	
 Android	
  SDK	
  4.0.3	
  	
スマートフォン向け	
タブレット向け	
スマートフォン向けとタブ
レット向けの融合
This	
  material	
  is	
  licensed	
  under	
  the	
  Crea1ve	
  Commons	
  License	
  BY-­‐NC-­‐SA	
  4.0.	
  
年月	
 できごと	
2012年6月	
 Android	
  SDK	
  4.1	
  発表(Jelly	
  Bean)	
2012年11月	
 Android	
  SDK	
  4.2	
  発表(Jelly	
  Bean)	
2013年7月	
 Android	
  SDK	
  4.3	
  発表(Jelly	
  Bean)	
2013年11月	
 Android	
  SDK	
  4.4	
  発表(KitKat)	
2014年6月	
 Android	
  L(4.5?)	
  発表	
26	
  26	
  
Androidの歴史
スマートフォン向けとタブ
レット向けの融合
This	
  material	
  is	
  licensed	
  under	
  the	
  Crea1ve	
  Commons	
  License	
  BY-­‐NC-­‐SA	
  4.0.	
   27	
  27	
  
Androidアプリケーションの動作環境
AndroidアプリケーションはDalvik VMという仮想マシンの上で動作する	
Androidランタイムの実行基盤としてAndroid用にカスタマイズ	
(電源管理、Binderなど)されたLinuxカーネルを採用している	
ソフトウェア(Androidプラットフォーム)	
アプリケーション	
Androidランタイム(コアライブラリ+Dalvik	
  VM)	
  
Linuxカーネル	
ハードウェア	
アプリケーション
This	
  material	
  is	
  licensed	
  under	
  the	
  Crea1ve	
  Commons	
  License	
  BY-­‐NC-­‐SA	
  4.0.	
   28	
  28	
  
Androidのアーキテクチャ
Linuxカーネル 2.6 / 3.x
ディスプレイ	
ドライバ	
Bluetooth
ドライバ	
カメラドライバ	
フラッシュメモリ	
ドライバ	
バインダ(IPC)
ドライバ	
キーパッド	
ドライバ	
USBドライバ	
 WiFiドライバ	
オーディオ	
ドライバ	
電源管理	
アプリケーション	
Home Contacts Phone Browser 自作アプリ	
 ・・・	
アプリケーションフレームワーク	
アクティビティ	
マネージャ	
ウィンドウ	
マネージャ	
コンテンツ	
プロバイダ	
ビューシステム	
 通知マネージャ	
パッケージ	
マネージャ	
電話	
マネージャ	
リソース	
マネージャ	
位置	
マネージャ	
ライブラリ	
サーフェス	
マネージャ	
メディア	
フレームワーク	
SQLite
OpenGL | ES FreeType WebKit
SGL SSL Libc
Dalvik
仮想マシン	
コアライブラリ	
Androidランタイム	
XMPP
サービス	
自作	
フレームワーク	
自作ライブラリ	
自作ドライバ	
HARDWARE ABSTRACTION LAYER
Radio(RIL) WiFiGraphics Audio Camera
・・・
This	
  material	
  is	
  licensed	
  under	
  the	
  Crea1ve	
  Commons	
  License	
  BY-­‐NC-­‐SA	
  4.0.	
   29	
  29	
  
アプリケーション開発の手法
Linuxカーネル 2.6 / 3.x
アプリケーション	
ライブラリ	
デバイスドライバ	
HAL
Radio(RIL) WiFiGraphics Audio Camera
・・・	
アプリケーション	
アプリケーション	
アプリケーション	
アプリケーションフレームワーク	
BIONIC
Libc othread Libm Linker ・・・	
自前のライブラリ	
JNI JNI JNI
OpenGLESWebkit OpenGLES OpenGLES
dalvikVM
・・・
This	
  material	
  is	
  licensed	
  under	
  the	
  Crea1ve	
  Commons	
  License	
  BY-­‐NC-­‐SA	
  4.0.	
   30	
  30	
  
カーネルとネイティブライブラリ
•  Linuxカーネル2.6がベース  (ただし4.0以降のカーネルはほぼ3.xベースに)	
–  Android用変更パッチ(電源管理、Binder、WakeLockなど)	
–  ハードウェアのドライバ類	
–  システムデーモン	
–  GPLライセンス	
•  HAL (Hardware Abstraction Layer)	
–  Linuxのハードウェアドライバを抽象化しデバイスIO的な役割を果たす	
–  Androidのユーザランドとカーネルをライセンス的に分離	
•  ライブラリ	
–  Bionic libc	
•  Unix系libcよりも高速でコンパクト(pthreadの実装)	
•  BSDライセンス	
–  C/C++で記述されたライブラリ	
•  OpenGL/ES、SQLite、Webkitなど
This	
  material	
  is	
  licensed	
  under	
  the	
  Crea1ve	
  Commons	
  License	
  BY-­‐NC-­‐SA	
  4.0.	
   31	
  31	
  
Androidランタイム
• コアライブラリ	
• Android用のJavaのコアライブラリで基本的なJava APIを提供	
• J2SEをベースにしているので開発用ホストPCにJDKが入っていればアプリケーションの
開発が可能	
• 未サポートであるJ2SEのAPIもあるので注意	
	
• Dalvik仮想マシン(Dalvik VM)	
• メモリの少ない環境でも複数のアプリケーションを同時実行できるように設計	
• すべてのアプリケーションはDalvik VMのインスタンスとなって独自のプロセスとして動作	
• JavaVM(スタックベース) ≠ DalvikVM(レジスタベース)	
• Apache2.0	
• アプリケーションのビルド時にdxツールがclassから.dexファイルに変換(.dex≒.class/2)	
• Dalvik VMにおける実行ファイルはdexファイル	
Java	
  VM	
  
Dalvik	
  VM	
.dex	
.jar	
.class	
 異なる
This	
  material	
  is	
  licensed	
  under	
  the	
  Crea1ve	
  Commons	
  License	
  BY-­‐NC-­‐SA	
  4.0.	
   32	
  32	
  
アプリケーション層
•  アプリケーションフレームワーク	
–  Androidアプリケーション作成のための拡張可能なJavaのコンポーネント類	
項目	
 説明	
アクティビティマネージャ	
 アプリケーションのライフサイクルや画面の共通バックスタックを管理	
ウィンドウマネージャ	
 ウィンドウの配置や外観を管理するシステムソフトウェア	
コンテンツプロバイダ	
 パッケージ間(異なるアプリケーション間)でデータ共有を行う手段を提供する	
ビューシステム	
 UIの制御	
通知マネージャ 	
 メッセージの到着、時間、アラームなどのイベント通知(ステータスバーやトースト
など)	
パッケージマネージャ	
 アプリのインストール、更新、削除などを管理	
電話マネージャ 	
 電話の状態や通話機能を管理	
リソースマネージャ	
 アプリで使用するリソースの管理	
位置マネージャ 	
 GPSデバイスによる位置情報取得や更新などを実現、管理	
XMPPサービス 	
 XMPP(IMのメッセージ交換やログイン状況の通知用通信プロトコル)のサービス
を管理
This	
  material	
  is	
  licensed	
  under	
  the	
  Crea1ve	
  Commons	
  License	
  BY-­‐NC-­‐SA	
  4.0.	
   33	
  33	
  
アプリケーション層
•  アプリケーション	
–  Google製標準アプリケーション	
•  アラーム時計、Bluetooth、ブラウザ、電卓、カメラ、コンタクトリスト、	
	
検索ボックス、電子メールクライアント、ギャラリー、3Dギャラリー、	
	
インスタントメッセージ、ランチャー、音楽再生、	
パッケージインストーラ、電話、システム設定、音声レコーダ、	
スピーチレコーダー・・・など	
–  独自アプリケーションはこのレイヤに該当する
This	
  material	
  is	
  licensed	
  under	
  the	
  Crea1ve	
  Commons	
  License	
  BY-­‐NC-­‐SA	
  4.0.	
   34	
  34	
  
アプリケーション開発環境
項目	
 必要な環境	
OS	
Windows XP (32-bit), Vista (32- or 64-bit), or Windows 7
(32- or 64-bit)	
Mac OS X 10.5.8以降(x86のみ)	
Linux(Ubuntu Linux, Lucid Lynxにてテスト済)	
Java JDK	
 JDK 6(GingerbreadからKitKat) / JDK 7(Android L以降)	
Android開発ツール	
 Android SDK	
テキストベース	
開発環境	
Apache Ant(1.8以降)	
l 開発用エミュレータが用意されている	
l エミュレータではセンサー等、一部利用できないものがある	
*必要なマシンスペックは http://developer.android.com/sdk/index.html
This	
  material	
  is	
  licensed	
  under	
  the	
  Crea1ve	
  Commons	
  License	
  BY-­‐NC-­‐SA	
  4.0.	
   35	
  35	
  
プラットフォーム開発環境
項目	
 Froyo(2.2)より古いAndroidのソースコード取得やビルドに必要な環境	
ホストOS	
Mac OS X 10.5.8以降(x86のみ)	
32bit_Linux(Ubuntu 8.04 以上)(64bitLinuxの場合は下表参照)	
必要なツール	
Python2.4、 git1.5.4以上、 JDK5	
git-core, gnupg, flex, bison, gperf, libsdl-dev, libesd0-dev, libwxgtk2.6-dev, build-
essential, zip, curl, libncurses5-dev, zlib1g-dev, valgrind, libreadline5-dev, repo	
項目	
 Gingerbread(2.3)以上のAndroidのソースコード取得やビルドに必要な環境	
ホストOS	
 64bit_Linux(Ubuntu 10.04 以上)	
必要なツール	
Python2.4、 git1.5.4以上、 JDK6	
git-core gnupg flex bison gperf build-essential zip curl zlib1g-dev gcc-multilib g
++-multilib libc6-dev-i386 lib32ncurses5-dev ia32-libs x11proto-core-dev
libx11-dev lib32readline5-dev lib32z-dev 	
項目	
 必要な環境(共通)	
スペック	
CPU:2G以上、 メモリ:2G以上	
ハードディスク空き容量:80G以上(プラットフォームひとつあたり20G)	
ネットワーク常時接続	
ソースコード入手先	
 Android Open Source Project (AOSP)
This	
  material	
  is	
  licensed	
  under	
  the	
  Crea1ve	
  Commons	
  License	
  BY-­‐NC-­‐SA	
  4.0.	
   36	
  36	
  
組込み開発とは
組込み機器のプラットフォーム開発はネイティブ言語で開発(gcc)を行う	
	
	
【必要な作業】	
1.  ホストPCにてクロス開発環境構築	
–  ターゲットボードのチップのアーキテクトに適用したクロスコンパイル環境であること	
	
(ARM, x86, ・・・)	
2.  ホストPCにてカーネル作成	
3.  ターゲットボードに移植	
–  (必要であれば)デバイスドライバ作成、組み込み	
4.  ホストPCにてユーザランド作成	
5.  ターゲットボードに移植、評価	
	
	
【ターゲットボードに最低限必要なインタフェース】	
–  ネットワークポート(LANなど)	
–  シリアルポート(RS232Cなど)	
–  JTAG (ICE接続などに使用)
This	
  material	
  is	
  licensed	
  under	
  the	
  Crea1ve	
  Commons	
  License	
  BY-­‐NC-­‐SA	
  4.0.	
   37	
  37	
  
Androidのクロス開発環境
ホストPC (X86)	
Ubuntu on VMWarePlayer	
Ubuntu on VirtualBox	
ターゲットボード(ARM)	
Pandaboard ES	
ソースコード取得	
編集	
コンパイル	
カーネルイメージ作成	
ユーザランドのルートファイルシステム作成	
実機へ転送	
AOSP	
 Androidソースコードツリー*2	
repo & git	
Ubuntu	
追加パッケージ	
*1 : コンパイラ(gcc)、プリプロセッサ & リンカ & アセンブラ(bin-utility)、	
Cライブラリ、ダイナミックローダ などビルドに必要なツール一式	
*2 : Linuxカーネル、ユーザランドのソースコード	
*3 : ボードに搭載しているハードウェアに依存するドライバやAndroidとの差異を吸収するパッチ、	
   ブートローダーなど	
デバッグ	
ボードベンダなど	
LAN or シリアル
This	
  material	
  is	
  licensed	
  under	
  the	
  Crea1ve	
  Commons	
  License	
  BY-­‐NC-­‐SA	
  4.0.	
   38	
  38	
  
本実習で使用するホストPC構成
ホストPC Windows 7/8/8.1	
(64_bit )	
VMWarePlayer 	
	
ゲストOS Ubuntu ver. 14.04.1LTS	
64_bit 版	
http://www.vmware.com/jp/products/player/	
 http://www.ubuntulinux.jp/download/ja-remix	
VMWare Player入手先サイト	
 Ubuntu 14.04.1 LTS イメージ(iso) 入手先サイト	
VirtualBox	
	
https://www.virtualbox.org/	
VirtualBox入手先サイト
This	
  material	
  is	
  licensed	
  under	
  the	
  Crea1ve	
  Commons	
  License	
  BY-­‐NC-­‐SA	
  4.0.	
  
Ubuntu  on  VirtualBox	
39	
  
インストールウィザード
に	
必要な項目を入力して
インストール開始	
ディスクトップに
VirtulBoxのショー
トカットができるの
でダブルクリック	
 「新規」ボタンを押
して仮想マシンの
設定を行う
This	
  material	
  is	
  licensed	
  under	
  the	
  Crea1ve	
  Commons	
  License	
  BY-­‐NC-­‐SA	
  4.0.	
  
Ubuntu  on  VirtualBox	
40	
  
名前にUbuntuと入れると
タイプとバージョンが自動
設定される。異なる場合
は手動で変更	
最低2GB。可能ならば
16GB。不足分はswapで
設定(Androidシステムの
ビルド時間が長くなりま
す)
This	
  material	
  is	
  licensed	
  under	
  the	
  Crea1ve	
  Commons	
  License	
  BY-­‐NC-­‐SA	
  4.0.	
  
Ubuntu  on  VirtualBox	
41	
  
デフォルトのVDIが最も早
い	
速度を重視するため固定
サイズ。ディスクの空き容
量に注意。
This	
  material	
  is	
  licensed	
  under	
  the	
  Crea1ve	
  Commons	
  License	
  BY-­‐NC-­‐SA	
  4.0.	
  
Ubuntu  on  VirtualBox	
42	
  
swap、ソースプログラム
などを展開し十分な容量
を確保するために256GB
確保	
UbuntuのDVDイメージを
設定するために「設定」ボ
タンをクリック	
ストレージ->コントローラ
IDE->空を選択し、右の
Diskのアイコンをクリック
してDVDイメージファイル
を選択
This	
  material	
  is	
  licensed	
  under	
  the	
  Crea1ve	
  Commons	
  License	
  BY-­‐NC-­‐SA	
  4.0.	
  
Ubuntu  on  VirtualBox	
43	
  
設定が完了したので「起
動」ボタンをクリック	
「Ubuntuをインストール」
ボタンを押してインストー
ル	
「インストール中にアップ
デート」および「サード
パーティのソフトウェアを
インストールする」の
チェックをONにして「続け
る」ボタンを押す。
This	
  material	
  is	
  licensed	
  under	
  the	
  Crea1ve	
  Commons	
  License	
  BY-­‐NC-­‐SA	
  4.0.	
  
Ubuntu  on  VirtualBox	
44	
  
「ディスクを削除して
Ubuntuをインストール」を
選択し、「インストール」ボ
タンをクリック	
「続ける」ボタンをクリック	
 「続ける」ボタンをクリック
This	
  material	
  is	
  licensed	
  under	
  the	
  Crea1ve	
  Commons	
  License	
  BY-­‐NC-­‐SA	
  4.0.	
  
Ubuntu  on  VirtualBox	
45	
  
お好みで設定。テキストで
は、ユーザ名:es、パス
ワード:androidとしている。	
また「自動ログインする」を
選択している。	
しばらくするとインストール
完了	
再起動後[デバイス]-
[Guest AddtionsのCDイ
メージを挿入」を実行する
とWindowsと連携しやすい
機能が追加される。イン
ストールしたらUbuntuを
再起動し、[デバイス]-[ク
リップボードの共有]およ
び[ドラッグ&ドロップ]を
[双方向]に設定する
This	
  material	
  is	
  licensed	
  under	
  the	
  Crea1ve	
  Commons	
  License	
  BY-­‐NC-­‐SA	
  4.0.	
   46	
  46	
  
本実習のクロス開発環境の構築
$	
 sudo	
 apt-get	
 install	
 git-core	
 gnupg	
 flex	
 bison	
 gperf	
 build-essential	
 zip	
 curl	
 
zlib1g-dev	
 libc6-dev	
 lib32ncurses5-dev	
 lib32z1	
 x11proto-core-dev	
 libx11-dev	
 
lib32readline-gplv2-dev	
 lib32z-dev	
 libgl1-mesa-dev	
 g++-multilib	
 mingw32	
 tofrodos	
 
python-markdown	
 libxml2-utils	
 python-software-properties	
 xsltproc	
 libx11-dev:i386	
 
$	
 cd	
 ~/	
 
$	
 wget	
 http://www.reucon.com/cdn/java/jdk-6u45-linux-x64.bin	
 
$	
 chmod	
 a+x	
 jdk-6u45-linux-x64.bin	
 
$	
 ./jdk-6u45-linux-x64.bin	
 
~/.bashrc	
 に以下の3行を追加する。	
 
export	
 JAVA_HOME=~/jdk1.6.0_45	
 
export	
 PATH=$JAVA_HOME/bin:$PATH	
 
export	
 ANDROID_JAVA_HOME=$JAVA_HOME	
 
追加後、読み直す。	
 
$	
 source	
 ~/.bashrc	
 
必要なツールのインストール	
JDK6のインストール	
ホストPCがUbuntu ver.14.0.4LTS (64_bit 版)の場合	
 カンペ	
  
P02_01.txt、P02_02.txt参照
This	
  material	
  is	
  licensed	
  under	
  the	
  Crea1ve	
  Commons	
  License	
  BY-­‐NC-­‐SA	
  4.0.	
  
本実習のクロス開発環境の構築	
•  JDKについて	
  
– 作成するAndroidのプラットフォームに合わせて
JDKを選択する	
  
•  Android	
  L以降(?):	
  JDK	
  7(調査中)	
  
•  GingerbreadからKitKatまで:JDK	
  6	
  
•  CupcakeからFroyoまで:JDK	
  5	
47	
  
※参考:https://source.android.com/source/initializing.html#installing-the-jdk
This	
  material	
  is	
  licensed	
  under	
  the	
  Crea1ve	
  Commons	
  License	
  BY-­‐NC-­‐SA	
  4.0.	
   48	
  48	
  
本実習のクロス開発環境の構築
/etc/udev/rules.d/51-android.rules	
 を作成して、以下の内容を記述する。	
 
###	
 OWNER="es"の部分は実在するユーザ名を記述すること	
 
---------cut	
 here------------------cut	
 here------------------cut	
 here---------	
 
#	
 adb	
 protocol	
 on	
 panda	
 (PandaBoard)	
 
SUBSYSTEM=="usb",	
 ATTR{idVendor}=="0451",	
 ATTR{idProduct}=="d101",	
 MODE="0600",	
 OWNER="es"	
 
#	
 adb	
 protocol	
 on	
 panda	
 (PandaBoard	
 ES)	
 
SUBSYSTEM=="usb",	
 ATTR{idVendor}=="18d1",	
 ATTR{idProduct}=="d002",	
 MODE="0600",	
 OWNER="es"	
 
#	
 fastboot	
 protocol	
 on	
 panda	
 (PandaBoard)	
 
SUBSYSTEM=="usb",	
 ATTR{idVendor}=="0451",	
 ATTR{idProduct}=="d022",	
 MODE="0600",	
 OWNER="es"	
 
#	
 usbboot	
 protocol	
 on	
 panda	
 (PandaBoard)	
 
SUBSYSTEM=="usb",	
 ATTR{idVendor}=="0451",	
 ATTR{idProduct}=="d00f",	
 MODE="0600",	
 OWNER="es"	
 
#	
 usbboot	
 protocol	
 on	
 panda	
 (PandaBoard	
 ES)	
 
SUBSYSTEM=="usb",	
 ATTR{idVendor}=="0451",	
 ATTR{idProduct}=="d010",	
 MODE="0600",	
 OWNER="es"	
 
---------cut	
 here------------------cut	
 here------------------cut	
 here---------	
 
	
 
追記後、次のコマンドを実行する。	
 
$	
 sudo	
 /etc/init.d/udev	
 restart	
 
USB の設定	
※参照: https://source.android.com/source/initializing.html#configuring-usb-access	
カンペ	
  
P02_03.txt参照
This	
  material	
  is	
  licensed	
  under	
  the	
  Crea1ve	
  Commons	
  License	
  BY-­‐NC-­‐SA	
  4.0.	
   49	
  49	
  
本実習のクロス開発環境の構築
ダウンロードサイト(Android Developers > SDK)	
http://developer.android.com/sdk/index.htmlにてLinux 64-bit版をダウンロード	
*proxy環境ではAndroid SDK and AVD Managerからダウンロードサイトに接続できま
せん
This	
  material	
  is	
  licensed	
  under	
  the	
  Crea1ve	
  Commons	
  License	
  BY-­‐NC-­‐SA	
  4.0.	
   50	
  50	
  
本実習のクロス開発環境の構築
zip形式のアーカイブをダウンロードして、ホームディレクトリで以下の
コマンドを実行して展開。ツールのアップデートを行う。androidコマン
ドを引数なしで起動するとGUI画面が表示される。	
*proxy環境ではAndroid SDK and AVD Managerからダウンロードサイトに接続できま
せん	
カンペ	
  
P02_04.txt参照	
$	
 cd	
 
$	
 unzip	
 ~/Downloads/adt-bundle-linux-x86_64-20140702.zip	
 
$	
 cd	
 adt-bundle-linux-x86_64-20140702/sdk	
 
$	
 ls	
 
add-ons	
 	
 	
 	
 	
 	
 extras	
 	
 	
 	
 	
 platform-tools	
 	
 sources	
 	
 	
 	
 	
 	
 	
 	
 temp	
 
build-tools	
 	
 platforms	
 	
 samples	
 	
 	
 	
 	
 	
 	
 	
 	
 system-images	
 	
 tools	
 
$	
 cd	
 tools	
 
$	
 ./android	
 update	
 sdk	
 -u	
 -a	
 -f	
 -t	
 add-on,extra,platform,system-
image,tool,platform-tool	
 
	
 	
 	
 	
 	
 	
 	
 	
 	
 	
 	
 	
 	
 	
 	
 :	
 
Do	
 you	
 accept	
 the	
 license	
 'mips-android-sysimage-license-65b5afcc'	
 [y/n]:	
 y	
 
$
This	
  material	
  is	
  licensed	
  under	
  the	
  Crea1ve	
  Commons	
  License	
  BY-­‐NC-­‐SA	
  4.0.	
   51	
  51	
  
本実習のクロス開発環境の構築
~/.bashrc	
 に以下の2行を追加する。	
 
export	
 PATH=~/adt-bundle-linux-x86_64-20140702/sdk/platform-tools:$PATH	
 
export	
 PATH=~/adt-bundle-linux-x86_64-20140702/sdk/tools:PATH	
 
	
 
追加後、読み直す。	
 
$	
 source	
 ~/.bashrc	
 
Android SDK の設定	
カンペ	
  
P02_05.txt参照
This	
  material	
  is	
  licensed	
  under	
  the	
  Crea1ve	
  Commons	
  License	
  BY-­‐NC-­‐SA	
  4.0.	
   52	
  52	
  
本実習のクロス開発環境の構築
$	
 git	
 config	
 --global	
 user.email	
 "android"	
 
$	
 git	
 config	
 --global	
 user.name	
 "android"	
 
$	
 mkdir	
 ~/bin	
 
$	
 curl	
 http://commondatastorage.googleapis.com/git-repo-downloads/repo	
 >	
 ~/bin/repo	
 
$	
 chmod	
 a+x	
 ~/bin/repo	
 
	
 
~/.bashrc	
 に以下の1行を追加する。	
 
export	
 PATH=~/bin:$PATH	
 
	
 
追加後、読み直す。	
 
$	
 source	
 ~/.bashrc	
 
git の設定	
repoの取得と設定	
カンペ	
  
P02_06.txt、P02_07.txt参照
This	
  material	
  is	
  licensed	
  under	
  the	
  Crea1ve	
  Commons	
  License	
  BY-­‐NC-­‐SA	
  4.0.	
   53	
  53	
  
android  open  source  project  
(AOSP)
http://source.android.com/	
Androidのソースコードはgitプロジェクト単位(リポジトリ)にTree構造となっている	
コミッターは個々のリポジトリをフォークして変更を加え、本Treeにコミットしている	
AOSPのkernel以外の全リポジトリは	
https://android.googlesource.com/platform/manifest	
で管理されている
This	
  material	
  is	
  licensed	
  under	
  the	
  Crea1ve	
  Commons	
  License	
  BY-­‐NC-­‐SA	
  4.0.	
   54	
  54	
  
Android  のバージョン対応表
Androidの指定バージョンのソースコードを取得する場合はAOSPのBuildNumbers
で記載されているBranchを指定する	
https://source.android.com/source/build-numbers.html	
Build	
  Tag	
  Notes	
 
DMD64	
  android-1.6_r1.5	
  latest	
 Donut	
 version	
 
EPF21B	
  android-2.1_r2.1p2	
  latest	
 Eclair	
 version	
 
FRK76C	
  android-2.2.3_r2	
  latest	
 Froyo	
 version	
 
GWK74	
  android-2.3.7_r1	
  latest	
 Gingerbread	
 version,	
 Nexus	
 S	
 4G	
 
ITL41D	
  android-4.0.1_r1	
  earliest	
 IceCreamSandwich	
 version,	
 
Galaxy	
 Nexus	
 
ITL41D	
  android-4.0.1_r1.1	
  Galaxy	
 Nexus	
 
ITL41F	
  android-4.0.1_r1.2	
  Galaxy	
 Nexus	
 
ICL53F	
  android-4.0.2_r1	
  Galaxy	
 Nexus	
 
IML74K	
  android-4.0.3_r1	
  Nexus	
 S	
 
KRT16M	
  android-4.4_r1	
  Nexus	
 5	
 (hammerhead)	
 
※一部のみ掲載
This	
  material	
  is	
  licensed	
  under	
  the	
  Crea1ve	
  Commons	
  License	
  BY-­‐NC-­‐SA	
  4.0.	
   55	
  55	
  
Androidのソースコード管理
(Git)
•  Gitとは	
–  分散型バージョン管理システム	
–  複数リポジトリ間での変更履歴のやり取りが可能	
–  Linux kernelのソースコード管理に利用されている	
	
【gitサーバにあるリポジトリのコピー】	
$ git clone https://android.googlesource.com/platform/manifest + project path 	
	
例1:フレームワーク関連の最新のソースコードを取得する場合	
	
	
例2:フレームワーク関連のKitKatのソースコードを取得する場合(Tag名を指定)	
	
	
	
$	
 git	
 clone	
 https://android.googlesource.com/platform/frameworks/base.git	
 	
 
$	
 git	
 clone	
 https://android.googlesource.com/platform/frameworks/base.git	
 –b	
 android-4.4_r1.1
This	
  material	
  is	
  licensed	
  under	
  the	
  Crea1ve	
  Commons	
  License	
  BY-­‐NC-­‐SA	
  4.0.	
   56	
  56	
  
Androidのソースコード管理
(repo)
•  repoとは	
–  Gitの複数リポジトリを一括で管理するためのツール	
【gitサーバにあるkernel以外のすべての標準プロジェクトを一括
で取得】	
$ repo init -u https://android.googlesource.com/platform/manifest + project path	
$ repo sync	
	
	
例1:最新のソースコードを一括取得するためのリポジトリの作成する場合	
	
	
例2:KitKatのソースコードを一括取得するためのリポジトリの作成する場合	
	
	
	
	
$	
 repo	
 init	
 -u	
 https://android.googlesource.com/platform/manifest	
 
$	
 repo	
 init	
 -u	
 https://android.googlesource.com/platform/manifest	
 -b	
 android-4.4_r1.1
This	
  material	
  is	
  licensed	
  under	
  the	
  Crea1ve	
  Commons	
  License	
  BY-­‐NC-­‐SA	
  4.0.	
   57	
  57	
  
AOSPのソースコード取得
(インターネット経由)
例) android-4.4_r1のタグのついたAndroid4.4(KitKat)のコードを取得	
	
	
	
上記 repo init コマンドでレポジトリの初期化を行うと.repoディレクトリを生成	
	
	
manifest.xml@ (-> manifests/default.xml) にはrepo が管理する対象のプロジェクトが定義	
	
manifest.xml にないプロジェクトの追加またはmanifest.xml からプロジェクトを外す場合	
local_manifest.xml を作成することによってカスタム設定が可能	
$	
 mkdir	
 -p	
 ~/mydroid/android	
 
$	
 cd	
 ~/mydroid/android	
 
$	
 repo	
 init	
 -u	
 https://android.googlesource.com/platform/manifest	
 -b	
 android-4.4_r1.1	
 
$	
 repo	
 sync	
 
<?xml version=“1.0”encoding=“UTF-8”?>	
<manifest>	
	
<remove-project name=“platform/frameworks/base” />	
	
<project path=“frameworks/base” name=“platform/frameworks/base” revision=“android-2.2.3_r1”/>	
</manifest>	
パス名	
 プロジェクト名	
 指定のタグ名(任意)	
$	
 ls	
 .repo	
 
msnifst.xml@	
 	
 	
 manifests/	
 	
 	
 manifests.git/	
 	
 	
 	
 repo/	
 
削除	
追加	
カンペ	
  
P02_08.txt参照
This	
  material	
  is	
  licensed	
  under	
  the	
  Crea1ve	
  Commons	
  License	
  BY-­‐NC-­‐SA	
  4.0.	
   58	
  58	
  
AOSPのソースコード取得
(ミラー経由)
例) AOSPのソースコードをミラーリングする	
	
	
例) ミラーからandroid-4.4_r1のタグのついたAndroid4.4(KitKat)のコードを取得する	
	
	
	
	
ミラーは手動で更新しないと最新版にならないため、ミラー更新し、それからローカルを
更新。	
	
$	
 mkdir	
 -p	
 /usr/local/aosp/mirror	
 
$	
 cd	
 /usr/local/aosp/mirror	
 
$	
 repo	
 init	
 -u	
 https://android.googlesource.com/mirror/manifest	
 --mirror	
 
$	
 repo	
 sync	
 
$	
 cd	
 ~	
 
$	
 mkdir	
 -p	
 mydroid/android	
 
$	
 cd	
 mydroi/android	
 
$	
 repo	
 init	
 -u	
 /usr/local/aosp/mirror/platform/manifest	
 -b	
 android-4.4_r1.1	
 
$	
 repo	
 sync	
 
$	
 cd	
 /usr/local/aosp/mirror	
 
$	
 repo	
 sync	
 
	
 
$	
 cd	
 ~/mydroid/android	
 
$	
 repo	
 sync	
 
カンペ	
  
P02_09.txt参照
This	
  material	
  is	
  licensed	
  under	
  the	
  Crea1ve	
  Commons	
  License	
  BY-­‐NC-­‐SA	
  4.0.	
   59	
  59	
  
AOSPのソースコード取得
(Pandaboard  ES特有)
Pandaboard ES用のグラフィックライブラリは別途バイナリをダウンロードが必要	
参照:https://developers.google.com/android/nexus/drivers	
	
	
	
	
Android 4.3以降、Pandaboard ES用のDevice Treeがないためパッチを適用。	
※sola氏のhttp://blog.sola-dolphin-1.net/archives/4575367.htmlより引用	
	
	
$	
 cd	
 ~/mydroid/android	
 
$	
 git	
 clone	
 https://github.com/sola-dolphin1/sola_device_ti_panda.git	
 -b	
 kitkat	
 device/ti/panda	
 
$	
 cd	
 ~/mydroid/android	
 
$	
 wget	
 https://dl.google.com/dl/android/aosp/imgtec-panda-20130603-539d1ac3.tgz	
 
$	
 ./extract-imgtec-panda.sh	
 
	
 
READMEファイルが表示されるので最後まで読んだ後に、"I	
 ACCEPT"と入力してENTERキーを押す。	
 
カンペ	
  
P02_10.txt参照
This	
  material	
  is	
  licensed	
  under	
  the	
  Crea1ve	
  Commons	
  License	
  BY-­‐NC-­‐SA	
  4.0.	
  
Android  4.4のソースコードツリー	
ディレクトリ名	
 概要	
abi	
 cxxapiなど	
art	
 Android4.4(KitKat)で導入された仮想マシン	
  
bionic	
 Android用に開発されたCライブラリ	
bootable	
 ブートローダーリファレンスコード	
build	
 ビルドシステム	
cts	
 テストスイート	
dalvik	
 仮想マシンDalvik	
  
developers	
 開発者向けサンプルコード	
development	
 開発ツール、SDK、サンプルコード	
device	
 デバイス固有のMakefileなど	
docs	
 Androidを使用する端末に対するCDD(Compa1bility	
  Define	
  
Document)などのドキュメント	
external	
 AOSP以外の外部オープンソースプロジェクト	
60	
  
This	
  material	
  is	
  licensed	
  under	
  the	
  Crea1ve	
  Commons	
  License	
  BY-­‐NC-­‐SA	
  4.0.	
  
Android  4.4のソースコードツリー	
ディレクトリ名	
 概要	
frameworks	
 Androidアプリケーションフレームワーク	
hardware	
 ハードウェアライブラリとRadio	
  Interface	
  Layer	
  
libcore	
 アプリ実行に使用するJSON、XMLパーサなど	
libna1vehelper	
 Androidのクラスライブラリを支援するソースコード	
ndk	
 Android	
  NDK	
packages	
 標準的なAndroidアプリケーションとサービス	
pdk	
 メーカ向けのプレビュー版	
  
prebuilts	
 ビルドに必要な各種バイナリファイル	
sdk	
 Android	
  SDKやエミュレータなど	
system	
 fastboot、core、低レベルデバッガなど	
tools	
 gradleやfat32llibなど	
61	
  
This	
  material	
  is	
  licensed	
  under	
  the	
  Crea1ve	
  Commons	
  License	
  BY-­‐NC-­‐SA	
  4.0.	
   62	
  62	
  
ソースコード詳細(packages)
•  packages  -> アプリケーションレイヤ	
–  apps : Android標準搭載アプリケーションのソースコード	
–  experimental : 製品には入らないテストツール	
–  inputmethods : 入力用メソッドのソースコードが格納	
–  providers : Android標準搭載サービスのソースコード	
–  screensavers:スクリーンセーバー	
–  services:Telephoneサービス	
–  wallpapers : ライブ壁紙のソースコード
This	
  material	
  is	
  licensed	
  under	
  the	
  Crea1ve	
  Commons	
  License	
  BY-­‐NC-­‐SA	
  4.0.	
   63	
  63	
  
ソースコード詳細
(packages/frameworks)
•  frameworks -> フレームワークレイヤ	
–  base	
•  Androidフレームワークのソースコードと各種サービスのソースコ
ード	
•  base/core : Androidランタイムのコアライブラリ	
•  base/libs : 外部プロジェクトのライブラリ	
–  opt : Google提供ライブラリ、絵文字ライブラリのソースコ
ード	
	
•  dalvik -> Androidランタイム	
–  Dalvik仮想マシン本体の関連クラスライブラリ	
•  art -> 次世代Androidランタイム(KitKat以降)	
–  ART仮想マシン本体の関連クラスライブラリ
This	
  material	
  is	
  licensed	
  under	
  the	
  Crea1ve	
  Commons	
  License	
  BY-­‐NC-­‐SA	
  4.0.	
   64	
  64	
  
ソースコード詳細(bionic/external)
•  external -> ライブラリレイヤ	
–  外部プロジェクトのライブラリ	
•  bionic -> ライブラリレイヤ	
–  BSDライセンス	
–  POSIX標準Cライブラリのすべての機能は実装していない	
–  未サポート機能	
•  C++例外	
•  pthreadキャンセル	
•  pthread_coreのinitメソッドからスローされたC++例外	
•  pthread_coreのfork()するinitメソッド	
•  ロケールとワイルドキャラクタ(UnicodeライブラリICUで代替)	
•  ユーザアカウント関連のメソッド(getpwdなど)
This	
  material	
  is	
  licensed	
  under	
  the	
  Crea1ve	
  Commons	
  License	
  BY-­‐NC-­‐SA	
  4.0.	
   65	
  65	
  
ソースコード詳細(hardware)
•  hardware -> HAL	
–  broadcom : Broadcomの無線ドライバ	
–  libhardware :外部モジュールで構成されたデバイスドライバ
制御用ラッパーライブラリ	
	
	
(外部モジュールの配置場所は/system/libs/hw配下)	
–  libhardware_legacy : スタティックリンクされる定義で構成さ
れたデバイスドライバ制御用ラッパーライブラリ	
(WiFi、バイブレーション、電源、GPSなど)	
–  qcom : QualcommのGPSドライバ	
–  ril : Radio Interface Layer	
テレフォニーサービスのベースバンドIF	
–  ti : TIの無線ドライバ
This	
  material	
  is	
  licensed	
  under	
  the	
  Crea1ve	
  Commons	
  License	
  BY-­‐NC-­‐SA	
  4.0.	
   66	
  66	
  
ソースコード詳細(system)
• system	
– core : 必要最小限の実行環境、基本的なコマンド類	
– extras : デバッグ、テストツールが格納	
– media : オーディオおよびカメラ制御用	
– netd : ネットワーク設定制御用デーモン	
– seculity : Keystore関連のプログラム(アプリケーションの署
名)	
– vold : ボリュームデーモン、各種メディアのマウント
This	
  material	
  is	
  licensed	
  under	
  the	
  Crea1ve	
  Commons	
  License	
  BY-­‐NC-­‐SA	
  4.0.	
   67	
  67	
  
ソースコード詳細(開発環境関連)
•  build	
–  ビルドシステム(Makefile、スクリプトなど)を格納	
–  Androidソースコードのルートでmakeするとbuild/core/main.mkからmake開始	
•  prebuild	
–  各ターゲット用、ホストOS用のビルドツールのバイナリファイル(クロスコンパイラ)	
•  device	
–  機器に関するbuild関連の情報(Makefile)、CPUやボードに依存するソフト(スクリプト)や
ドライバなど	
•  ndk	
–  Native Development Kit関連のソフト、gdbなどのツール	
•  sdk	
–  Android SDKで使用されるエミュレータソフトやライブラリ	
•  bootable	
–  bootloader : ブートローダーのソースコードが格納	
•  bootloader/legacy/usbloader/main.cがブートローダーのスタート関数	
–  diskinstaller : x86系PCにAndroidをインストールする際に使用	
–  recovery : Android system recovery utilityのソースコードが格納
This	
  material	
  is	
  licensed	
  under	
  the	
  Crea1ve	
  Commons	
  License	
  BY-­‐NC-­‐SA	
  4.0.	
   68	
  68	
  
ソースコード詳細(開発環境関連)
•  cts	
–  互換性テストスイーツ、デバイスの互換性をテストするためのツール	
など	
–  Android認証テスト	
–  Android Marketなどを使用できるようにするにはGoogleの認証が必要	
–  CTSが通らなければAndroid端末として認証されない(かなり厳格)
This	
  material	
  is	
  licensed	
  under	
  the	
  Crea1ve	
  Commons	
  License	
  BY-­‐NC-­‐SA	
  4.0.	
   69	
  69	
  
Androidのエミュレータと実機
ARM仮想マシン	
(QEMU)	
Dalvik VM	
Javaプログラム	
PC	
Linux ARM版	
ARM実機マシン	
Dalvik VM	
Javaプログラム	
Linux ARM版	
	
	
Androidエミュレータ	
 Android実機マシン	
プラットフォームが入れ替わるだけで実はエミュレータと実機は同じ	
ARMのエミュレートをしているのはQEMUエンジン
This	
  material	
  is	
  licensed	
  under	
  the	
  Crea1ve	
  Commons	
  License	
  BY-­‐NC-­‐SA	
  4.0.	
   70	
  70	
  
Androidの起動シーケンス
メモリの初期化、U-Bootの読み込みと実行	
U-Boot 

起動パラメータの設定	
CPU初期化	
ハードウェアのチェック,	
ドライバの読みこみ	
起動用ファイルがある領域の	
マウント	
x-loader(MLO)	
U-Boot(u-Boot.img)	
カーネルの起動	
(uInitrd,uImage)	
/init	
Home画面	
Power ON or Reboot	
/init.rc	
基本設定	
 ・ネットワーク	
 ・キーボード	
 ・デバイス初期化	
サービスの起動	
kernelの起動パラメータ設定時	
必ずinit=/initを指定すること	
デフォルトの設定ではカーネルは	
/sbin/init、/etc/init、/bin/init、/bin/sh	
を探すため正常に起動できない
This	
  material	
  is	
  licensed	
  under	
  the	
  Crea1ve	
  Commons	
  License	
  BY-­‐NC-­‐SA	
  4.0.	
  
Pandaboard  ESのディスク
イメージ	
•  Pandaboard  ESで使用するシステム用SDカードは
、以下に示すパーティションを作成しなければなら
ない。
–  hbp://elinux.org/Panda_How_to_MLO_%26_u-­‐boot	
  
•  特にboot領域はfdiskコマンドに特殊なパラ
メータを渡す必要がある(上記URL参照)	
  
71	
  
パーティション名	
 種別	
boot	
 VFAT	
system	
 ext4	
cache	
 ext4	
userdata	
 ext4
This	
  material	
  is	
  licensed	
  under	
  the	
  Crea1ve	
  Commons	
  License	
  BY-­‐NC-­‐SA	
  4.0.	
  
Pandaboard  ESの起動シーケンス	
•  Pandaboard	
  ESのSoC内部のブートROM実行	
  
•  ブートROMがx-­‐loader(MLO)を検索	
  
•  ブートROMがx-­‐loaderをSoC内部のSRAMに読み込み、実行	
  
•  x-­‐loaderがメインRAM(DRAM)を初期化	
  
•  x-­‐loaderがU-­‐Boot(u-­‐boot.img)をメインRAMに読み込み、実行	
  
•  U-­‐Bootがブートスクリプト(boot.scr)を読み込む	
  
•  U-­‐BootがLinuxカーネル(uImage)を読み込み、実行	
  
•  LinuxカーネルがSystem、Cache、Userdataなどのファイルシ
ステムをマウント	
  
•  ブートパラメータ(boot.scrにより指定)に従って/initを実行	
  
•  /initが/init.rcスクリプトを実行	
  
72	
  
This	
  material	
  is	
  licensed	
  under	
  the	
  Crea1ve	
  Commons	
  License	
  BY-­‐NC-­‐SA	
  4.0.	
   73	
  73	
  
Androidのinit
int main(int argc, char **argv)	
{	
	
	
	
	
	
for(;;){	
	
	
	
	
	
	
}	
}	
/dev、/proc、/sysをマウント	
device_fd	
property_fd	
signal_fd	
keychord_fd	
ブート処理	
起動時に一度だけ実行される	
デーモン処理	
システムが動作している限り	
繰り返し実行される	
ファイルディスクリプタの	
監視	
/init.rc	
をパースして実行	
- action_list作成	
- service_list作成	
/init.<hardware名>.rc	
をパースして実行	
- action_list作成	
- service_list作成	
/system/core/init/init.c	
init
This	
  material	
  is	
  licensed	
  under	
  the	
  Crea1ve	
  Commons	
  License	
  BY-­‐NC-­‐SA	
  4.0.	
   74	
  74	
  
Androidのinit
•  initの起点	
–  /system/core/init/init.c の main関数	
•  init.rc	
–  Android Init Languageで書かれた起動用スクリプト	
–  Action、Command、Service、Optionで構成	
–  /system/core/init/readme.txt で説明	
ACTION部	
on <target>	
	
<command>	
	
<command>	
	
:	
SERVICE部	
service <name> <path> [argument]*	
	
<option>	
	
<option>	
	
:
This	
  material	
  is	
  licensed	
  under	
  the	
  Crea1ve	
  Commons	
  License	
  BY-­‐NC-­‐SA	
  4.0.	
   75	
  75	
  
Androidのinit(デーモン処理)
•  ファイルディスクリプタ	
–  device_fd	
•  カーネルからデバイスの状態変化通知を受けて/dev以下のデバ
イスの生成と削除を行う。	
•  生成するデバイスファイルのmode、uid、gidはdevices.cの構造体か
init.rcのdeviceコマンドで指定可能	
–  property_fd	
•  システムプロパティの書き込み処理	
–  signal_recv_fd	
•  子プロセスが終了したときにsignalを発生するのでそれを受けて後
処理を行う	
–  keychord_fd	
•  あらかじめ登録した複数のキーの入力組み合わせを監視しそれ
に対応するserviceを起動する
This	
  material	
  is	
  licensed	
  under	
  the	
  Crea1ve	
  Commons	
  License	
  BY-­‐NC-­‐SA	
  4.0.	
   76	
  76	
  
data	
dev	
proc	
sys	
sbin	
system	
init	
init.omap4pandaboard.rc	
init.chipsee.rc	
init.rc	
default.prop	
init.goldfish.rc	
initlogo.rle	
キャッシュ、追加パッケージなど格納ディレクトリ(R/
W)	
デバイスファイル格納ディレクトリ	
Linux設定ファイル格納ディレクトリ	
システムファイル格納ディレクトリ	
adbd実行ファイル格納ディレクトリ	
次頁参照	
起動処理実行ファイル	
initが実行するターゲットボード固有起動用シェルスク
リプト	
	
initが実行するAndroid固有起動用シェルスクリプト	
Androidデフォルトプロパティ	
エミュレータ起動用シェルスクリプト	
起動時のロゴの画像ファイル	
(RGB888のRAW形式をRLE形式に変換した画像 )	
root	
/	
Androidのルートファイルシステム
RLE:連長圧縮(ランレングス圧縮、Run Length Encoding)
This	
  material	
  is	
  licensed	
  under	
  the	
  Crea1ve	
  Commons	
  License	
  BY-­‐NC-­‐SA	
  4.0.	
   77	
  77	
  
app	
	
bin	
etc	
fonts	
framework	
lib	
usr	
xbin	
build.prop	
プリインストールのアプリケーション	
ファイル(.apk)	
各種一般的なLinuxコマンド	
設定用シェルスクリプトなど	
フォントファイル(.ttf)	
javaのandroidのライブラリ(.jar)	
ネイティブライブラリ(.so)	
キー設定ファイルなど	
root用のコマンドなど	
Androidデフォルトプロパティ	
/system/	
Androidのルートファイルシステム
This	
  material	
  is	
  licensed	
  under	
  the	
  Crea1ve	
  Commons	
  License	
  BY-­‐NC-­‐SA	
  4.0.	
   78	
  78	
  
1章と2章のまとめと次回予告
以上で一般的なLinuxの概要とAndroidの概要に	
ついて学びました	
次章からは本実習で使用するターゲットボードの	
理解とAndroidを動作させる方法について学びます
This	
  material	
  is	
  licensed	
  under	
  the	
  Crea1ve	
  Commons	
  License	
  BY-­‐NC-­‐SA	
  4.0.	
   79	
  79	
  
メモ
This	
  material	
  is	
  licensed	
  under	
  the	
  Crea1ve	
  Commons	
  License	
  BY-­‐NC-­‐SA	
  4.0.	
   80	
  80	
  
メモ
This	
  material	
  is	
  licensed	
  under	
  the	
  Crea1ve	
  Commons	
  License	
  BY-­‐NC-­‐SA	
  4.0.	
   81	
  81	
  
第3章    ターゲットのボード
This	
  material	
  is	
  licensed	
  under	
  the	
  Crea1ve	
  Commons	
  License	
  BY-­‐NC-­‐SA	
  4.0.	
   82	
  82	
  
3章の概要
•  代表的なターゲットボード	
•  Pandaboard ESについて
This	
  material	
  is	
  licensed	
  under	
  the	
  Crea1ve	
  Commons	
  License	
  BY-­‐NC-­‐SA	
  4.0.	
   83	
  83	
  
各種ターゲットボード
ボード名	
 CPU	
 メモリ	
 画面	
 通信	
 I/F	
 ストレージ	
 カメラ	
 オーディオ	
Armadillo-440	
液晶モデル開発	
セット	
Freescale i.MX257	
400MHz	
(ARM9)	
32MB	
(FLASH NOR)	
128MB	
(LPDDR SDRAM)	
4.3イ
ンチタ
ッチ
パネル	
Eth×1	
 シリアル、USB	
 microSD	
 -	
オーディオ入
出力	
Armadillo-500fx	
液晶モデル開発	
セット	
Freescale i.MX31	
532MHz	
(ARM11)	
32MB(FLASH NOR)	
128MB(DDR
SDRAM)	
1G(USBSSD)	
5.7イ
ンチタ
ッチ
パネル	
Eth×1	
シリアル、
USB、操作ボタ
ン	
SD/MMC
+microSD	
-	
オーディオ入
出力	
Armadillo-800EVA	
評価キット	
ルネサス	
[R-Mobile A1] 	
800MHz 2コア	
ARM Cortex-A9	
512MB	
(DDR SDRAM)	
8G(eMMC)	
5イン
チタッ
チパネ
ル	
(静
電式)	
Eth×1	
WLAN	
シリアル	
USB HOST/
OTG	
HDMI	
SD/MMC
+microSD	
CMOSカ
メラモジ
ュール	
オーディオ入
出力	
BeagleBoard	
TI OMAP3530	
600MHz	
(ARM11)	
256MB	
NAND	
DDR2 RAM	
-	
 -	
 シリアル、USB	
 SD/MMC	
 -	
オーディオ入
出力	
BeagleBoard-xM	
TI DM3730	
1.0GHz	
(ARM Cortex-A8)	
512MB	
NAND	
DDR2 RAM	
-	
 Eth×1	
 シリアル、USB	
 microSD	
 拡張端子	
オーディオ入
出力	
PandaBoard	
TI OMAP4430	
1GHz 2コア	
ARM Cortex-A9	
1GB	
DDR2 RAM	
-	
Eth×1	
BT2.1+EDR	
WLAN	
シリアル	
USB HOST/
OTG	
HDMI、DIV-D	
SD/MMC	
 拡張端子	
オーディオ入出
力	
PandaBoard-ES	
TI OMAP4460 
1.2GHz 2コア	
ARM Cortex-A9	
1GB	
DDR2 RAM	
-	
Eth×1	
BT2.1+EDR	
WLAN	
シリアル	
USB HOST/
OTG	
HDMI、DIV-D	
SD/MMC	
 拡張端子	
オーディオ入出
力
This	
  material	
  is	
  licensed	
  under	
  the	
  Crea1ve	
  Commons	
  License	
  BY-­‐NC-­‐SA	
  4.0.	
  
Pandaboard	
  ES	
84	
  
プロセッサ	
 TI OMAP4460	
CPUコア	
 ARM Cortex-A9	
CPUコアクロック	
 1.2GHz 2コア	
メモリ	
 8Gb/1GB(low-power DDR2)	
USB	
OTGx1、USB2.0×4(High Speed/FullSpeed。2つは
実装済み。残り2つは拡張バス)	
SD	
 SDスロット	
シリアルポート	
 RS232C	
オーディオ	
 TWL6040(PDM, I2C)	
画像出力	
 HDMIおよびDVI-D。LCD接続用の拡張バス有	
ネットワーク	
 LANおよびWi-Fi、Bluetooth
This	
  material	
  is	
  licensed	
  under	
  the	
  Crea1ve	
  Commons	
  License	
  BY-­‐NC-­‐SA	
  4.0.	
  
Pandaboard	
  ES	
85	
  
http://pandaboard.org/sites/default/files/board_reference/ES/Panda_Board_Spec_DOC-21054_REV0_1.pdf	
15ページより引用
This	
  material	
  is	
  licensed	
  under	
  the	
  Crea1ve	
  Commons	
  License	
  BY-­‐NC-­‐SA	
  4.0.	
  
Pandaboard	
  ES	
86	
  
http://pandaboard.org/sites/default/files/board_reference/ES/Panda_Board_Spec_DOC-21054_REV0_1.pdf	
16ページより引用
This	
  material	
  is	
  licensed	
  under	
  the	
  Crea1ve	
  Commons	
  License	
  BY-­‐NC-­‐SA	
  4.0.	
  
boot領域	
Pandaboard	
  ES	
87	
  
RomCode	
X-­‐Loader(MLO)	
U-­‐Boot(u-­‐Boot.img)	
Kernel(uImage,	
  uInitrd)	
System領域	
/init	
SRAMに取り込み	
メインメモリに取り込み
This	
  material	
  is	
  licensed	
  under	
  the	
  Crea1ve	
  Commons	
  License	
  BY-­‐NC-­‐SA	
  4.0.	
   88	
  88	
  
メモ
This	
  material	
  is	
  licensed	
  under	
  the	
  Crea1ve	
  Commons	
  License	
  BY-­‐NC-­‐SA	
  4.0.	
   89	
  89	
  
第4章  実機でAndroidを動かす
This	
  material	
  is	
  licensed	
  under	
  the	
  Crea1ve	
  Commons	
  License	
  BY-­‐NC-­‐SA	
  4.0.	
   90	
  90	
  
4章の概要
•  目指すシステム	
•  Androidソースコード取得	
•  Androidカーネルイメージ作成	
•  Androidユーザランドのファイルシステム作成	
•  Androidユーザランドのファイルシステム構成	
•  Android起動用microSDの準備とAndroidカーネルの準備	
•  Android起動	
•  デバッグ環境の構築	
–  Android SDK のインストール	
–  ネットワーク設定	
–  ddms	
–  adbコマンドとadb shellコマンド
This	
  material	
  is	
  licensed	
  under	
  the	
  Crea1ve	
  Commons	
  License	
  BY-­‐NC-­‐SA	
  4.0.	
   91	
  91	
  
本章で目指すシステム
バーコードリーダー	
microSD	
Android	
rootfs	
Linaro版AndroidをPandaboard ESで	
起動させる
This	
  material	
  is	
  licensed	
  under	
  the	
  Crea1ve	
  Commons	
  License	
  BY-­‐NC-­‐SA	
  4.0.	
   92	
  
Linuxコマンドの復習	
●UbuntuのターミナルのシェルではTabキーでディレクトリ名やファイル名の補完ができます	
	
●ホームディレクトリについて	
	
本実習の開発環境におけるユーザ(es)のホームディレクトリは以下のディレクトリです	
	
	
/home/es	
	
●Linuxではホームディレクトリのことを【 ~/ 】で簡略化して表現することができます。	
	
<使用例>	
ホームディレクトリにあるworkというディレクトリに移動したい場合	
	
	
cd /home/es/work	
	
  または	
	
cd ~/work	
	
●ワイルドカード「*」	
	
Aというディレクトリ内にあるすべてのjavaのソースファイルをまとめて指定したいときなど「*」を利用
して	
以下のように指定できます	
	
	
A/*.java
This	
  material	
  is	
  licensed	
  under	
  the	
  Crea1ve	
  Commons	
  License	
  BY-­‐NC-­‐SA	
  4.0.	
   93	
  
Linuxコマンドの復習	
pwd	
 現在のディレクトリパスを表示	
cd	
 ディレクトリ間移動	
 cd ../ 一つ前のディレクトリに移動	
ls –la	
 カレントディレクトリのファイルを一覧表
示	
-l : ファイルの詳細も示す	
-a : .ファイル(隠しファイル)も表示	
cp A B	
 ファイルのコピー	
 A:コピー元ファイル名 B:コピー先ファイル名	
mv A B	
 ファイルの移動、ファイル名の変更	
 A:元ファイルファイル名 B;移動先ファイル名	
rm A	
 ファイル、ディレクトリの削除	
 -r –R :ディレクトリ内の削除	
-f :警告メッセージを表示しない	
-d:ディレクトリごと削除(スーパーユーザのみ)	
mkdir A	
 ディレクトリの生成	
 -p:指定したディレクトリをサブディレクトリごと作成する。
ツリー状のディレクトリも作成可能	
chmod モード A	
 パーミッションの変更	
 Aというファイルをモードで指定したパーミッションに変更	
モード:777(全ユーザにrwxの権限)やa+x(全ユーザ
に実行権限)	
chown usr01 A	
chown usr01:g1 A	
	
ファイル所有者の変更	
 Aの所有者をuser01に変更	
Aの所有者をuser01、所属グループg1に変更	
-R :ディレクトリとその中野ファイルの所有者を変更	
fdisk	
 パーティションの作成、削除、変更	
mkfs	
 ファイルシステムの作成(フォーマット)	
 -t fstype 作成するファイル・システムを指定する
This	
  material	
  is	
  licensed	
  under	
  the	
  Crea1ve	
  Commons	
  License	
  BY-­‐NC-­‐SA	
  4.0.	
   94	
  
Linuxコマンドの復習	
mount A B	
 ファイルシステムのマウント	
 AをBにマウントする	
umount B	
 ファイルシステムのアンマウント	
 Bをアンマウントする	
ps	
 実行中プロセスの情報表示	
top	
 プロセスの稼動状況などのリアルタイム表
示	
env	
 環境変数の表示	
export	
 環境変数の設定	
 export <環境変数名>=<パス>	
exit	
 現在のユーザのログアウト	
reboot	
 システムの再起動	
sudo	
 別ユーザでコマンド実行	
cat	
 テキストファイルの内容を閲覧、ファイルの
連結	
less	
 ファイルの内容をページ単位で表示	
gzip A	
 gzファイルに圧縮	
 Aを圧縮する	
-d:圧縮ファイルを展開する	
tar オプショ
ン A.tar (/A)	
アーカイブの作成、展開やtarファイルの圧
縮、解凍	
tar cvf A.tar /A:/Aディレクトリ以下をA.tarという名前でアーカイ
ブする	
tar xvf A.tar:A.tarというアーカイブをすべて展開する(処理経過
表示)	
ftp	
 コンピュータ間のファイルの送受信	
 ftp 192.168.1.11	
ping	
 コンピュータ間の接続状態のテスト	
 ping 192.168.1.11
This	
  material	
  is	
  licensed	
  under	
  the	
  Crea1ve	
  Commons	
  License	
  BY-­‐NC-­‐SA	
  4.0.	
  
Prebuild版で動作確認	
95	
  
$ cd ~/Chipsee_Android	
$ sudo su <= ファイル展開前に必ずスーパーユーザになること	
# tar zxvf prebuilt-panda-hd-20130520.tar.gz	
# cd prebuilt-panda-hd-20130520	
	
<<< SDカードをVirtualBox側につなげる >>>	
	
# demsg <= SDカードのデバイスファイル名を確認( /dev/sdX )	
:	
[ 3082.999834] sdb: sdb1 sdb2 sdb3 sdb4 < sdb5 sdb6 > <<< 表示例 >>>	
	
<<< ここでは /dev/sdb の時の例を示す >>>	
# ./mksdcard-chipsee-ics.sh /dev/sdb	
<<< 数分間待ち合わせ >>>	
	
# exit	
$	
	
実
習
カンペ	
  
P04_01.txt参照
This	
  material	
  is	
  licensed	
  under	
  the	
  Crea1ve	
  Commons	
  License	
  BY-­‐NC-­‐SA	
  4.0.	
   96	
  96	
  
Linuxカーネルのコンパイルオプション設定
■Linuxカーネルのコンパイルオプション設定とは	
①ある機能をコンパイル「する/しない」の設定	
    →カーネルのオプション設定項目は膨大	
②機能をコンパイルする上でどんな形でコンパイルするかの設定	
    →機能を静的にカーネルのバイナリに組み込むか	
    →機能をモジュールとしてコンパイルするのか	
	
■コンパイル設定方法	
・GUI設定ツールを使用して設定を行う	
  →$make menuconfig	
・設定用ファイルを用意してmakeコマンドで設定を行う	
  →$make <ターゲットのハード名>_<*>_defconfig	
	
■設定内容はmenuconfig終了後「.config」ファイルに収められる
This	
  material	
  is	
  licensed	
  under	
  the	
  Crea1ve	
  Commons	
  License	
  BY-­‐NC-­‐SA	
  4.0.	
   97	
  97	
  
KconfigとMakefile
■Linuxカーネルのコンパイルオプション設定で設定できるオプ
ション名は「Kconfig」というファイルで設定されている	
	
■ハードウェアのドライバのソースコードが収まっているディレク
トリには「Kconfig」と「Makefile」が存在する	
	
■新しいハードウェアを追加するたびにこのKconfigファイルに
オプション名を追加し、Makefileにはそのオプションに関係のあ
るソースコード(オブジェクトファイル)の依存関係の設定を行う
This	
  material	
  is	
  licensed	
  under	
  the	
  Crea1ve	
  Commons	
  License	
  BY-­‐NC-­‐SA	
  4.0.	
   98	
  98	
  
KconfigとMakefile
•  具体例	
•  USBメモリの機能を追加するためのパラメータ(オプション名)とそれに関連するドライバ
のソースコードを探す方法。USBメモリはストレージ設備(USB Mass Storage)なので
drivers/usb/ storage/ディレクトリ内のKconfigを調べる。	
config	
 USB_STORAGE_DATAFAB	
 	
 
	
 	
 	
 	
 	
 	
 	
 	
 bool	
 "Datafab	
 Compact	
 Flash	
 Reader	
 support"	
 	
 
	
 	
 	
 	
 	
 	
 	
 	
 depends	
 on	
 USB_STORAGE	
 	
 
	
 	
 	
 	
 	
 	
 	
 	
 help	
 	
 
	
 	
 	
 	
 	
 	
 	
 	
 	
 	
 Support	
 for	
 certain	
 Datafab	
 CompactFlash	
 readers.	
 	
 
	
 	
 	
 	
 	
 	
 	
 	
 	
 	
 Datafab	
 has	
 a	
 web	
 page	
 at	
 <http://www.datafabusa.com/>.	
 
config	
 USB_STORAGE_SDDR55	
 	
 
	
 	
 	
 	
 	
 	
 	
 	
 	
 bool	
 "SanDisk	
 SDDR-55	
 SmartMedia	
 support"	
 	
 
	
 	
 	
 	
 	
 	
 	
 	
 	
 depends	
 on	
 USB_STORAGE	
 
	
 	
 	
 	
 	
 	
 	
 	
 	
 help	
 	
 
	
 	
 	
 	
 	
 	
 	
 	
 	
 	
 	
 	
 	
 Say	
 Y	
 here	
 to	
 include	
 additional	
 code	
 to	
 support	
 the	
 	
 
      Sandisk	
 SDDR-55	
 	
 
	
 	
 	
 	
 	
 	
 	
 	
 	
 	
 	
 	
 	
 SmartMedia	
 reader	
 in	
 the	
 USB	
 Mass	
 Storage	
 driver.	
 
config	
 USB_STORAGE	
 	
 
	
 	
 	
 	
 	
 	
 tristate	
 "USB	
 Mass	
 Storage	
 support"	
 	
 
	
 	
 	
 	
 	
 	
 	
 depends	
 on	
 USB	
 &&	
 SCSI	
 	
 
	
 	
 	
 	
 	
 	
 ---help---	
 	
 
	
 	
 	
 	
 	
 	
 	
 	
 Say	
 Y	
 here	
 if	
 you	
 want	
 to	
 connect	
 	
 
   	
 USB	
 mass	
 storage	
 devices	
 to	
 your	
 	
 
	
 	
 	
 	
 	
 	
 	
 	
 computer's	
 USB	
 port.	
 This	
 is	
 the	
 driver	
 you	
 need	
 for	
 USB	
 	
 
	
 	
 	
 	
 	
 	
 	
 	
 floppy	
 drives,	
 USB	
 hard	
 disks,	
 USB	
 tape	
 drives,	
 	
 
    USB	
 CD-ROMs,	
 	
 
	
 	
 	
 	
 	
 	
 	
 	
 USB	
 flash	
 devices,	
 and	
 memory	
 sticks,	
 along	
 with	
 	
 
	
 	
 	
 	
 	
 	
 	
 	
 similar	
 devices.	
 This	
 driver	
 may	
 also	
 be	
 used	
 for	
 	
 
	
 	
 	
 	
 	
 	
 	
 some	
 cameras	
 	
 
	
 	
 	
 	
 	
 	
 	
 	
 and	
 card	
 readers.	
 	
 
	
 	
 
	
 	
 	
 	
 	
 	
 	
 	
 This	
 option	
 depends	
 on	
 'SCSI'	
 support	
 being	
 enabled,	
 	
 
	
 	
 	
 	
 	
 	
 	
 	
 but	
 you	
 	
 probably	
 also	
 need	
 'SCSI	
 device	
 support:	
 	
 
	
 	
 	
 	
 	
 	
 	
 	
 SCSI	
 disk	
 support'	
 	
 
	
 	
 	
 	
 	
 	
 	
 	
 (BLK_DEV_SD)	
 for	
 most	
 USB	
 storage	
 devices.	
 	
 
	
 	
 
	
 	
 	
 	
 	
 	
 	
 	
 To	
 compile	
 this	
 driver	
 as	
 a	
 module,	
 choose	
 M	
 here:	
 the	
 	
 
	
 	
 	
 	
 	
 	
 	
 	
 module	
 will	
 be	
 called	
 usb-storage.	
 
⇒Datafab社製の製品でコンパクトフラッシュリーダーに関連する
機器	
⇒SanDisk社製の製品でスマートメディアカードに関連する機器	
←USBメモリの機能のオプション名
This	
  material	
  is	
  licensed	
  under	
  the	
  Crea1ve	
  Commons	
  License	
  BY-­‐NC-­‐SA	
  4.0.	
   99	
  99	
  
KconfigとMakefile
次にMakefileを見てみます	
#	
 Makefile	
 for	
 the	
 USB	
 Mass	
 Storage	
 device	
 drivers. 

#	
 15	
 Aug	
 2000,	
 Christoph	
 Hellwig 

#	
 Rewritten	
 to	
 use	
 lists	
 instead	
 of	
 if-statements. 

# 	
 
 

EXTRA_CFLAGS   	
 :=	
 -Idrivers/scsi 



obj-$(CONFIG_USB_STORAGE)   	
 +=	
 usb-storage.o 

 

usb-storage-y	
 :=	
 scsiglue.o	
 protocol.o	
 transport.o	
 usb.o	
 
usb-storage-y	
 +=	
 initializers.o	
 sierra_ms.o	
 option_ms.o	
 
	
 
usb-storage-$(CONFIG_USB_STORAGE_DEBUG)	
 +=	
 debug.o	
 
	
 
ifeq	
 ($(CONFIG_USB_LIBUSUAL),)	
 
	
 	
 	
 	
 	
 	
 	
 	
 usb-storage-y	
 	
 	
 	
 	
 	
 	
 	
 	
 	
 	
 +=	
 usual-tables.o	
 
else	
 
	
 	
 	
 	
 	
 	
 	
 	
 obj-$(CONFIG_USB)	
 	
 	
 	
 	
 	
 	
 +=	
 usb-libusual.o	
 
	
 	
 	
 	
 	
 	
 	
 	
 usb-libusual-y	
 	
 	
 	
 	
 	
 	
 	
 	
 	
 :=	
 libusual.o	
 usual-tables.o	
 
endif	
 
←このオプションに対するモジュール	
←scsiglue.c、protocol.c、
transport.c、usb.c、initializers.c
など及びこれらと同名のヘッダ
ファイルがモジュールの実体で
ある。
This	
  material	
  is	
  licensed	
  under	
  the	
  Crea1ve	
  Commons	
  License	
  BY-­‐NC-­‐SA	
  4.0.	
   100	
  100	
  
「.config」ファイルについて
#	
 
#	
 Automatically	
 generated	
 make	
 config:	
 don’t	
 edit	
 
# :	
 
# :	
 
CONFIG_64BIT=y	
 
#CONFIG_X86_32	
 is	
 not	
 set	
 
CONFIG_X86_64BIT=y	
 
CONFIG_X86=y	
 
・・・	
 
.config	
値	
 意味	
=y	
 この項目に対応する機能は静的にカーネルに組込まれる	
=m	
この項目に対応する機能は、モジュールとしてコンパイルされる。
機能の中にはモジュールとしてコンパイルできないものがある。そ
の場合対応する設定項目がこの値をとることはない。	
# CONFIG_* is not set	
 この項目に対応する機能はコンパイルされない。コメントアウト。	
n カーネルをビルドするとこのファイルの設定値でカーネルが作られる	
n .configを直接手で編集してはいけない	
n ある機能が他の機能に依存している可能性がある	
n 機能の依存関係はKconfigが把握している
This	
  material	
  is	
  licensed	
  under	
  the	
  Crea1ve	
  Commons	
  License	
  BY-­‐NC-­‐SA	
  4.0.	
   101	
  101	
  
「.config」の新規作成
・「.config」がまだ存在しない場合	
  →$make menuconfig → <Exit>	
  →「.config」が生成	
  →Kconfigにおいてdefault指定された機能のみ「.config」に適用
This	
  material	
  is	
  licensed	
  under	
  the	
  Crea1ve	
  Commons	
  License	
  BY-­‐NC-­‐SA	
  4.0.	
   102	
  102	
  
「.config」の更新
・「.config」がすでに存在する場合	
  →ソースツリーのルートに配置	
  →$make oldconfig	
	
新しく追加された設定項目について1つ1つ設定するか確認される	
      (とりあえずすべてリターンでデフォルトを適用)	
  →「.config」が再生成	
  →$make menuconfigでカスタム設定→<Exit>	
  →「.config」更新
This	
  material	
  is	
  licensed	
  under	
  the	
  Crea1ve	
  Commons	
  License	
  BY-­‐NC-­‐SA	
  4.0.	
   103	
  103	
  
アーキテクチャ毎の「.config」設定ファイル
・アーキテクチャ毎の「.config」の設定ファイルを作成する	
→$make defconfig	
→アーキテクチャ毎のデフォルト設定に基づいた「.config」の設定ファイルが生成	
→生成される場所	
  <linuxのソース>/arch/<arch>/configs/	
	
 	
 	
<ターゲットのハード名>_<*>_defconfig
This	
  material	
  is	
  licensed	
  under	
  the	
  Crea1ve	
  Commons	
  License	
  BY-­‐NC-­‐SA	
  4.0.	
   104	
  
$	
 cd	
 ~/Chipsee_Android/Source	
 
$	
 tar	
 zxvf	
 kernel-ics-chipsee-panda-20130520.tar.gz	
 
$	
 less	
 kernel-ics-chipsee-panda-20130520/arch/arm/configs/panda_chipsee_defconfig	
 
104	
  
panda_chipsee_defconfig
下記のファイルを開いて確認しなさい	
	
	
	
	
	
このファイルはカーネルのコンフィギュレーションの設定値(ターゲットボードのハードウェ
アおよびAndroidに特化した設定)が記載されたファイルである。	
makeコマンドでこのファイルを指定することによってカーネルオプションとして.configに反
映されます	
	
 	
 	
 	
 	
 	
 	
 :	
 
#	
 
#	
 Android	
 
#	
 
CONFIG_ANDROID=y	
 
CONFIG_ANDROID_BINDER_IPC=y	
 
CONFIG_ANDROID_LOGGER=y	
 
#	
 CONFIG_ANDROID_RAM_CONSOLE	
 is	
 not	
 set	
 
CONFIG_ANDROID_TIMED_OUTPUT=y	
 
CONFIG_ANDROID_TIMED_GPIO=y	
 
CONFIG_ANDROID_LOW_MEMORY_KILLER=y	
 
	
 	
 	
 	
 	
 	
 	
 	
 :	
 
実
習
panda_chipsee_defconfigの一部抜粋	
カンペ	
  
P04_02.txt参照
This	
  material	
  is	
  licensed	
  under	
  the	
  Crea1ve	
  Commons	
  License	
  BY-­‐NC-­‐SA	
  4.0.	
  
クロスコンパイラ	
•  x86上のLinuxからARM用の実行モジュール
を作成するためのコンパイラ	
  
•  予めチップメーカが配布していることが多い	
  
•  ここでは以下のクロスコンパイラを使用する	
  
105	
  
$	
 wget	
 https://sourcery.mentor.com/public/gnu_toolchain/arm-none-linux-gnueabi/	
 
	
 	
 	
 arm-2010q1-202-arm-none-linux-gnueabi-i686-pc-linux-gnu.tar.bz2	
 	
 	
 	
 	
 <=	
 実際には一行で記述	
 
$	
 sudo	
 tar	
 jxvf	
 arm-2010q1-202-arm-none-linux-gnueabi-i686-pc-linux-gnu.tar.bz2	
 -C	
 /usr/local/	
 
$	
 sudo	
 apt-get	
 install	
 uboot-mkimage	
 
参
考
This	
  material	
  is	
  licensed	
  under	
  the	
  Crea1ve	
  Commons	
  License	
  BY-­‐NC-­‐SA	
  4.0.	
   106	
  106	
  
makeコマンド(クロスコンパイル)	
  
変数	
 意味	
ARCH	
 ターゲットアーキテクチャ	
CROSS_COMPILE	
 クロスコンパイラのプレフィックスを指定	
クロスコンパイルに必要な変数	
$	
 export	
 PATH=/usr/local/arm-2010q1/bin:$PATH	
 	
 	
 	
 	
 	
 	
 	
 	
 	
 	
 	
 <=	
 パスを設定	
 
	
 
$	
 export	
 CROSS_COMPILE=arm-none-linux-gnueabi-	
 
$	
 export	
 ARCH=arm	
 
	
 
$	
 cd	
 ~/Chipsee_Android/Source/kernel-ics-chipsee-panda-20130520	
 
	
 
$	
 make	
 distclean	
 	
 	
 	
 	
 	
 	
 	
 	
 	
 	
 	
 	
 	
 	
 	
 	
 	
 <=	
 初期状態に戻す	
 
$	
 make	
 panda_chipsee_defconfig	
 	
 	
 	
 <=	
 Pandaboard用のコンフィグレーションを行う	
 
実
習
カンペ	
  
P04_03.txt参照
This	
  material	
  is	
  licensed	
  under	
  the	
  Crea1ve	
  Commons	
  License	
  BY-­‐NC-­‐SA	
  4.0.	
   107	
  107	
  
menuconfigの操作方法
$	
 make	
 menuconfig	
 
キー	
 動作	
↑	
 項目の選択カーソルを上に移動	
↓	
 項目の選択カーソルを下に移動	
<TAB> 、← 、→	
動作メニュー(Select/Exit/Help)
を切り替え	
<Enter>	
選択されている動作メニューに
応じて動作を行う	
y	
 項目を<*>(有効:静的組込み)	
n	
 項目を<>無効にする	
m	
項目を<M>(有効:モジュールと
してコンパイルする)	
<SPACE>	
項目を<M>/<*>/<>のトグルで切
り替える	
<ESC><ESC>	
 上の階層に戻る(<Exit>と同じ)	
?	
選択されている項目に関するヘ
ルプを表示(<Help>と同じ)	
/	
設定項目を検索する。設定項目
のシンボル名からメニュー上の
位置を探す場合に便利	
<Exit>→	
「新しい設定を保存するか?」→	
YES→.configに保存	
実
習
This	
  material	
  is	
  licensed	
  under	
  the	
  Crea1ve	
  Commons	
  License	
  BY-­‐NC-­‐SA	
  4.0.	
   108	
  108	
  
makeコマンド関連
$	
 make	
 
$	
 make	
 modules_install	
 
$	
 make	
 install	
 
ファイルまたはディレクトリ名	
 内容	
/lib/modules/<カーネルバージョン>/	
 モジュールが配置されるディレクトリ	
/boot/vmlinuz-<カーネルバージョン>	
 カーネルイメージファイル	
/boot/initramfs-<カーネルバージョン> または	
/boot/initrd.img-<カーネルバージョン>	
ブート時初期化用ファイルシステムイメージ	
/boot/Systemmap-<カーネルバージョン>	
 アドレス情報ファイル	
カーネルのコンパイルをする。ソースツリーのルートディレクトリで実行。	
コンパイルされたモジュールを/lib/modulesにインストール。	
カーネルバイナリイメージを/boot以下にインストールされる。	
Fedora系ではブート時初期化ファイルシステムイメージも作成される。	
$	
 update-initramfs	
 –c	
 –k	
 <カーネルバージョン>	
 
Debian系においてブート時初期化ファイルシステムイメージも作成する際に使用するコマンド。	
参
考
This	
  material	
  is	
  licensed	
  under	
  the	
  Crea1ve	
  Commons	
  License	
  BY-­‐NC-­‐SA	
  4.0.	
   109	
  109	
  
makeコマンド関連
$	
 make	
 clean	
 
$	
 make	
 help	
 
$	
 make	
 <dir>/<file>.o	
 
$	
 make	
 <dir>/<file>.ko	
 
ソースツリーをコンパイル前に戻す。オブジェクトファイルは削除されるが.configやコン
パイル時に生成された一部ファイルは削除されない。	
使用可能なmakeターゲットを表示する。	
指定したオブジェクトファイルを生成するのに必要なコンパイルだけを行う。<dir>だけ
を指定した場合は、 .config によって生成されることになっているそのディレクトリ内す
べてのオブジェクトファイルが生成される。	
指定したモジュールだけを生成する	
参
考
This	
  material	
  is	
  licensed	
  under	
  the	
  Crea1ve	
  Commons	
  License	
  BY-­‐NC-­‐SA	
  4.0.	
   110	
  110	
  
makeコマンド(クロスコンパイル)	
  
$	
 make	
 ARCH=arm	
 CROSS_COMPLIE=arm-none-linux-gnueabi-	
 uImage	
 
$	
 make	
 ARCH=arm	
 CROSS_COMPLE=arm-none-linux-gnueabi-	
 modules	
 
変数	
 意味	
ARCH	
 ターゲットアーキテクチャ	
CROSS_COMPILE	
 クロスコンパイラのプレフィックスを指定	
クロスコンパイラarm-none-linux-gnueabi-によってARM向けのカーネルをクロスコンパイルする。
生成するカーネルのバイナリイメージはuImage形式がよく使われる。	
arch/arm/boot/uImageとして生成される。	
クロスコンパイルに必要な変数	
クロスコンパイラarm-none-linux-gnueabi-によってARM向けのカーネルモジュールをクロスコンパ
イルで生成する。	
参
考
This	
  material	
  is	
  licensed	
  under	
  the	
  Crea1ve	
  Commons	
  License	
  BY-­‐NC-­‐SA	
  4.0.	
   111	
  111	
  
makeコマンド(クロスコンパイル)	
  
変数	
 意味	
ARCH	
 ターゲットアーキテクチャ	
CROSS_COMPILE	
 クロスコンパイラのプレフィックスを指定	
クロスコンパイルに必要な変数	
$	
 export	
 PATH=/usr/local/arm-2010q1/bin:$PATH	
 	
 	
 	
 	
 	
 	
 	
 	
 	
 	
 	
 <=	
 パスを設定	
 
	
 
$	
 export	
 CROSS_COMPILE=arm-none-linux-gnueabi-	
 
$	
 export	
 ARCH=arm	
 
	
 
$	
 cd	
 ~/Chipsee_Android/Source/kernel-ics-chipsee-panda-20130520	
 
	
 
$	
 make	
 distclean	
 	
 	
 	
 	
 	
 	
 	
 	
 	
 	
 	
 	
 	
 	
 	
 	
 	
 <=	
 初期状態に戻す	
 
$	
 make	
 panda_chipsee_defconfig	
 	
 	
 	
 <=	
 Pandaboard用のコンフィグレーションを行う	
 
	
 
$	
 make	
 uImage	
 	
 	
 	
 	
 	
 	
 	
 	
 	
 	
 	
 	
 	
 	
 	
 	
 	
 	
 	
 	
 <=	
 カーネルのコンパイルを行う	
 
	
 
<<<	
 ファイルは	
 arch/arm/boot/uImage	
 として生成される	
 >>>	
 
実
習
既に設定済み	
カンペ	
  
P04_04.txt参照
This	
  material	
  is	
  licensed	
  under	
  the	
  Crea1ve	
  Commons	
  License	
  BY-­‐NC-­‐SA	
  4.0.	
   112	
  112	
  
カーネルの入れ替え	
  
<<<	
 SDカードを挿入	
 >>>	
 
	
 
$	
 sudo	
 mount	
 /dev/sdb1	
 /mnt	
 
[sudo]	
 password	
 for	
 es:	
 	
 
$	
 ls	
 /mnt	
 
boot.scr	
 	
 MLO	
 	
 u-boot.img	
 	
 uImage	
 	
 uInitrd	
 
$	
 ls	
 
arch	
 	
 	
 	
 	
 	
 	
 	
 	
 	
 	
 fs	
 	
 	
 	
 	
 	
 	
 linaro-test-status	
 	
 	
 	
 	
 	
 	
 REPORTING-BUGS	
 	
 usr	
 
block	
 	
 	
 	
 	
 	
 	
 	
 	
 	
 include	
 	
 MAINTAINERS	
 	
 	
 	
 	
 	
 	
 	
 	
 	
 	
 	
 	
 	
 samples	
 	
 	
 	
 	
 	
 	
 	
 	
 virt	
 
COPYING	
 	
 	
 	
 	
 	
 	
 	
 init	
 	
 	
 	
 	
 Makefile	
 	
 	
 	
 	
 	
 	
 	
 	
 	
 	
 	
 	
 	
 	
 	
 	
 scripts	
 	
 	
 	
 	
 	
 	
 	
 	
 vmlinux	
 
CREDITS	
 	
 	
 	
 	
 	
 	
 	
 ipc	
 	
 	
 	
 	
 	
 mm	
 	
 	
 	
 	
 	
 	
 	
 	
 	
 	
 	
 	
 	
 	
 	
 	
 	
 	
 	
 	
 	
 	
 security	
 	
 	
 	
 	
 	
 	
 	
 vmlinux.o	
 
crypto	
 	
 	
 	
 	
 	
 	
 	
 	
 Kbuild	
 	
 	
 Module.symvers	
 	
 	
 	
 	
 	
 	
 	
 	
 	
 	
 set_env.sh	
 
Documentation	
 	
 Kconfig	
 	
 net	
 	
 	
 	
 	
 	
 	
 	
 	
 	
 	
 	
 	
 	
 	
 	
 	
 	
 	
 	
 	
 	
 sound	
 
drivers	
 	
 	
 	
 	
 	
 	
 	
 kernel	
 	
 	
 panda_chipsee_defconfig	
 	
 System.map	
 
firmware	
 	
 	
 	
 	
 	
 	
 lib	
 	
 	
 	
 	
 	
 README	
 	
 	
 	
 	
 	
 	
 	
 	
 	
 	
 	
 	
 	
 	
 	
 	
 	
 	
 tools	
 
	
 
<<<	
 続く	
 >>>	
 
実
習
•  コンパイルしたカーネルを入れ替えるにはホストPCにPandaboard ES用のSD
カードを挿入し、bootパーティション(SDカードが/dev/sdbの場合、/dev/sdb1)を
マウントし、uImageファイルを入れ替える	
カンペ	
  
P04_05.txt参照
This	
  material	
  is	
  licensed	
  under	
  the	
  Crea1ve	
  Commons	
  License	
  BY-­‐NC-­‐SA	
  4.0.	
   113	
  113	
  
カーネルの入れ替え	
  
<<<	
 続き	
 >>>	
 
	
 
$	
 sudo	
 cp	
 arch/arm/boot/uImage	
 /mnt	
 
$	
 ls	
 /mnt	
 
boot.scr	
 	
 MLO	
 	
 u-boot.img	
 	
 uImage	
 	
 uInitrd	
 
$	
 ls	
 -l	
 /mnt	
 
total	
 5473	
 
-rwxr-xr-x	
 1	
 root	
 root	
 	
 	
 	
 	
 449	
 	
 9月	
 	
 6	
 20:26	
 boot.scr	
 
-rwxr-xr-x	
 1	
 root	
 root	
 	
 	
 31644	
 	
 9月	
 	
 6	
 20:26	
 MLO	
 
-rwxr-xr-x	
 1	
 root	
 root	
 	
 208784	
 	
 9月	
 	
 6	
 20:26	
 u-boot.img	
 
-rwxr-xr-x	
 1	
 root	
 root	
 5159056	
 	
 9月	
 	
 6	
 22:33	
 uImage	
 
-rwxr-xr-x	
 1	
 root	
 root	
 	
 202957	
 	
 9月	
 	
 6	
 20:26	
 uInitrd	
 
	
 
$	
 sudo	
 umount	
 /mnt	
 
	
 
<<<	
 SDカードを抜いてPandaboard	
 ESで起動確認	
 >>>	
 
実
習
•  コンパイルしたカーネルを入れ替えるにはホストPCにPandaboard ES用のSD
カードを挿入し、bootパーティション(SDカードが/dev/sdbの場合、/dev/sdb1)を
マウントし、uImageファイルを入れ替える
This	
  material	
  is	
  licensed	
  under	
  the	
  Crea1ve	
  Commons	
  License	
  BY-­‐NC-­‐SA	
  4.0.	
   114	
  114	
  
実習の開発環境まとめ
開発用PC	
【初期イメージファイル格納先】	
/home/es/Chipsee_Android/prebuilt-panda-hd-20130520-b3	
	
【Android用Linuxカーネルのソースコードのrootパス】	
/home/es/Chipsee_Android/Source/kernel-ics-chipsee-panda-20130520	
	
【環境変数】	
$ export PATH=/usr/local/arm-2010q1/bin:$PATH	
$ export CROSS_COMPILE=arm-none-linux-gnueabi-	
$ export ARCH=arm	
	
【カーネルのビルド】	
$	
 cd	
 ~/Chipsee_Android/Source/kernel-ics-chipsee-panda-20130520	
 
	
 
$	
 make	
 distclean	
 
$	
 make	
 panda_chipsee_defconfig	
 
$	
 make	
 uImage
This	
  material	
  is	
  licensed	
  under	
  the	
  Crea1ve	
  Commons	
  License	
  BY-­‐NC-­‐SA	
  4.0.	
   115	
  115	
  
Android起動ログ
	
 
U-Boot	
 SPL	
 2013.01.-rc1	
 (Jun	
 09	
 2013	
 -	
 10:45:59)	
 
OMAP4460	
 ES1.1	
 
OMAP	
 SD/MMC:	
 0	
 
reading	
 u-boot.img	
 
reading	
 u-boot.img	
 
	
 
	
 
U-Boot	
 2013.01.-rc1	
 (Jun	
 09	
 2013	
 -	
 10:45:59)	
 
	
 
CPU	
 	
 :	
 OMAP4460	
 ES1.1	
 
Board:	
 OMAP4	
 Panda	
 
I2C:	
 	
 	
 ready	
 
DRAM:	
 	
 1	
 GiB	
 
MMC:	
 	
 	
 OMAP	
 SD/MMC:	
 0	
 
Using	
 default	
 environment	
 
MLO起動	
U-Boot起動
This	
  material	
  is	
  licensed	
  under	
  the	
  Crea1ve	
  Commons	
  License	
  BY-­‐NC-­‐SA	
  4.0.	
   116	
  116	
  
Android起動ログ
In:	
 	
 	
 	
 serial	
 
Out:	
 	
 	
 serial	
 
Err:	
 	
 	
 serial	
 
Net:	
 	
 	
 No	
 ethernet	
 found.	
 
checking	
 for	
 preEnv.txt	
 
reading	
 preEnv.txt	
 
**	
 Unable	
 to	
 read	
 file	
 preEnv.txt	
 **	
 
Hit	
 any	
 key	
 to	
 stop	
 autoboot:	
 	
 3	
 	
 2	
 	
 1	
 	
 0	
 	
 
mmc0	
 is	
 current	
 device	
 
reading	
 uEnv.txt	
 
**	
 Unable	
 to	
 read	
 file	
 uEnv.txt	
 **	
 
reading	
 boot.scr	
 
449	
 bytes	
 read	
 
Loaded	
 script	
 from	
 boot.scr	
 
Running	
 bootscript	
 from	
 mmc0	
 ...	
 
##	
 Executing	
 script	
 at	
 82000000	
 
U-Boot起動時の待ち合わせ。	
カウントダウンが終わると起動
スクリプトに従って処理を続ける	
boot.scrの読み込みと実行
This	
  material	
  is	
  licensed	
  under	
  the	
  Crea1ve	
  Commons	
  License	
  BY-­‐NC-­‐SA	
  4.0.	
   117	
  117	
  
Android起動ログ
reading	
 uImage	
 
5159288	
 bytes	
 read	
 
reading	
 uInitrd	
 
202957	
 bytes	
 read	
 
##	
 Booting	
 kernel	
 from	
 Legacy	
 Image	
 at	
 80200000	
 ...	
 
	
 	
 	
 Image	
 Name:	
 	
 	
 Linux-3.2.0	
 
	
 	
 	
 Image	
 Type:	
 	
 	
 ARM	
 Linux	
 Kernel	
 Image	
 (uncompressed)	
 
	
 	
 	
 Data	
 Size:	
 	
 	
 	
 5159224	
 Bytes	
 =	
 4.9	
 MiB	
 
	
 	
 	
 Load	
 Address:	
 80008000	
 
	
 	
 	
 Entry	
 Point:	
 	
 80008000	
 
	
 	
 	
 Verifying	
 Checksum	
 ...	
 OK	
 
##	
 Loading	
 init	
 Ramdisk	
 from	
 Legacy	
 Image	
 at	
 81600000	
 ...	
 
	
 	
 	
 Image	
 Name:	
 	
 	
 Chipsee	
 ICS	
 Ramdisk	
 
	
 	
 	
 Image	
 Type:	
 	
 	
 ARM	
 Linux	
 RAMDisk	
 Image	
 (gzip	
 compressed)	
 
	
 	
 	
 Data	
 Size:	
 	
 	
 	
 202893	
 Bytes	
 =	
 198.1	
 KiB	
 
	
 	
 	
 Load	
 Address:	
 00000000	
 
	
 	
 	
 Entry	
 Point:	
 	
 00000000	
 
	
 	
 	
 Verifying	
 Checksum	
 ...	
 OK	
 
	
 	
 	
 Loading	
 Kernel	
 Image	
 ...	
 OK	
 
OK	
 
uImage(Linuxカーネルのイメージファイル)
の読み込み、uInitrd(起動用RAMディスク
イメージファイル)の読み込み
Android組み込み開発テキスト pandaboard es編
Android組み込み開発テキスト pandaboard es編
Android組み込み開発テキスト pandaboard es編
Android組み込み開発テキスト pandaboard es編
Android組み込み開発テキスト pandaboard es編
Android組み込み開発テキスト pandaboard es編
Android組み込み開発テキスト pandaboard es編
Android組み込み開発テキスト pandaboard es編
Android組み込み開発テキスト pandaboard es編
Android組み込み開発テキスト pandaboard es編
Android組み込み開発テキスト pandaboard es編
Android組み込み開発テキスト pandaboard es編
Android組み込み開発テキスト pandaboard es編
Android組み込み開発テキスト pandaboard es編
Android組み込み開発テキスト pandaboard es編
Android組み込み開発テキスト pandaboard es編
Android組み込み開発テキスト pandaboard es編
Android組み込み開発テキスト pandaboard es編
Android組み込み開発テキスト pandaboard es編
Android組み込み開発テキスト pandaboard es編
Android組み込み開発テキスト pandaboard es編
Android組み込み開発テキスト pandaboard es編
Android組み込み開発テキスト pandaboard es編
Android組み込み開発テキスト pandaboard es編
Android組み込み開発テキスト pandaboard es編
Android組み込み開発テキスト pandaboard es編
Android組み込み開発テキスト pandaboard es編
Android組み込み開発テキスト pandaboard es編
Android組み込み開発テキスト pandaboard es編
Android組み込み開発テキスト pandaboard es編
Android組み込み開発テキスト pandaboard es編
Android組み込み開発テキスト pandaboard es編
Android組み込み開発テキスト pandaboard es編
Android組み込み開発テキスト pandaboard es編
Android組み込み開発テキスト pandaboard es編
Android組み込み開発テキスト pandaboard es編
Android組み込み開発テキスト pandaboard es編
Android組み込み開発テキスト pandaboard es編
Android組み込み開発テキスト pandaboard es編
Android組み込み開発テキスト pandaboard es編
Android組み込み開発テキスト pandaboard es編
Android組み込み開発テキスト pandaboard es編
Android組み込み開発テキスト pandaboard es編
Android組み込み開発テキスト pandaboard es編
Android組み込み開発テキスト pandaboard es編
Android組み込み開発テキスト pandaboard es編
Android組み込み開発テキスト pandaboard es編
Android組み込み開発テキスト pandaboard es編
Android組み込み開発テキスト pandaboard es編
Android組み込み開発テキスト pandaboard es編
Android組み込み開発テキスト pandaboard es編
Android組み込み開発テキスト pandaboard es編
Android組み込み開発テキスト pandaboard es編
Android組み込み開発テキスト pandaboard es編
Android組み込み開発テキスト pandaboard es編
Android組み込み開発テキスト pandaboard es編
Android組み込み開発テキスト pandaboard es編
Android組み込み開発テキスト pandaboard es編
Android組み込み開発テキスト pandaboard es編
Android組み込み開発テキスト pandaboard es編
Android組み込み開発テキスト pandaboard es編
Android組み込み開発テキスト pandaboard es編
Android組み込み開発テキスト pandaboard es編
Android組み込み開発テキスト pandaboard es編
Android組み込み開発テキスト pandaboard es編
Android組み込み開発テキスト pandaboard es編
Android組み込み開発テキスト pandaboard es編
Android組み込み開発テキスト pandaboard es編
Android組み込み開発テキスト pandaboard es編
Android組み込み開発テキスト pandaboard es編
Android組み込み開発テキスト pandaboard es編
Android組み込み開発テキスト pandaboard es編
Android組み込み開発テキスト pandaboard es編
Android組み込み開発テキスト pandaboard es編
Android組み込み開発テキスト pandaboard es編
Android組み込み開発テキスト pandaboard es編
Android組み込み開発テキスト pandaboard es編
Android組み込み開発テキスト pandaboard es編
Android組み込み開発テキスト pandaboard es編
Android組み込み開発テキスト pandaboard es編
Android組み込み開発テキスト pandaboard es編
Android組み込み開発テキスト pandaboard es編
Android組み込み開発テキスト pandaboard es編
Android組み込み開発テキスト pandaboard es編
Android組み込み開発テキスト pandaboard es編
Android組み込み開発テキスト pandaboard es編
Android組み込み開発テキスト pandaboard es編
Android組み込み開発テキスト pandaboard es編
Android組み込み開発テキスト pandaboard es編
Android組み込み開発テキスト pandaboard es編
Android組み込み開発テキスト pandaboard es編
Android組み込み開発テキスト pandaboard es編
Android組み込み開発テキスト pandaboard es編
Android組み込み開発テキスト pandaboard es編
Android組み込み開発テキスト pandaboard es編
Android組み込み開発テキスト pandaboard es編
Android組み込み開発テキスト pandaboard es編
Android組み込み開発テキスト pandaboard es編
Android組み込み開発テキスト pandaboard es編
Android組み込み開発テキスト pandaboard es編
Android組み込み開発テキスト pandaboard es編
Android組み込み開発テキスト pandaboard es編
Android組み込み開発テキスト pandaboard es編
Android組み込み開発テキスト pandaboard es編
Android組み込み開発テキスト pandaboard es編
Android組み込み開発テキスト pandaboard es編
Android組み込み開発テキスト pandaboard es編
Android組み込み開発テキスト pandaboard es編
Android組み込み開発テキスト pandaboard es編
Android組み込み開発テキスト pandaboard es編
Android組み込み開発テキスト pandaboard es編
Android組み込み開発テキスト pandaboard es編
Android組み込み開発テキスト pandaboard es編
Android組み込み開発テキスト pandaboard es編
Android組み込み開発テキスト pandaboard es編
Android組み込み開発テキスト pandaboard es編
Android組み込み開発テキスト pandaboard es編
Android組み込み開発テキスト pandaboard es編
Android組み込み開発テキスト pandaboard es編
Android組み込み開発テキスト pandaboard es編
Android組み込み開発テキスト pandaboard es編
Android組み込み開発テキスト pandaboard es編
Android組み込み開発テキスト pandaboard es編
Android組み込み開発テキスト pandaboard es編
Android組み込み開発テキスト pandaboard es編
Android組み込み開発テキスト pandaboard es編
Android組み込み開発テキスト pandaboard es編
Android組み込み開発テキスト pandaboard es編
Android組み込み開発テキスト pandaboard es編
Android組み込み開発テキスト pandaboard es編
Android組み込み開発テキスト pandaboard es編
Android組み込み開発テキスト pandaboard es編
Android組み込み開発テキスト pandaboard es編
Android組み込み開発テキスト pandaboard es編
Android組み込み開発テキスト pandaboard es編
Android組み込み開発テキスト pandaboard es編
Android組み込み開発テキスト pandaboard es編
Android組み込み開発テキスト pandaboard es編
Android組み込み開発テキスト pandaboard es編
Android組み込み開発テキスト pandaboard es編
Android組み込み開発テキスト pandaboard es編
Android組み込み開発テキスト pandaboard es編
Android組み込み開発テキスト pandaboard es編
Android組み込み開発テキスト pandaboard es編
Android組み込み開発テキスト pandaboard es編
Android組み込み開発テキスト pandaboard es編
Android組み込み開発テキスト pandaboard es編
Android組み込み開発テキスト pandaboard es編
Android組み込み開発テキスト pandaboard es編
Android組み込み開発テキスト pandaboard es編
Android組み込み開発テキスト pandaboard es編
Android組み込み開発テキスト pandaboard es編
Android組み込み開発テキスト pandaboard es編
Android組み込み開発テキスト pandaboard es編
Android組み込み開発テキスト pandaboard es編
Android組み込み開発テキスト pandaboard es編
Android組み込み開発テキスト pandaboard es編
Android組み込み開発テキスト pandaboard es編
Android組み込み開発テキスト pandaboard es編
Android組み込み開発テキスト pandaboard es編
Android組み込み開発テキスト pandaboard es編
Android組み込み開発テキスト pandaboard es編
Android組み込み開発テキスト pandaboard es編
Android組み込み開発テキスト pandaboard es編
Android組み込み開発テキスト pandaboard es編
Android組み込み開発テキスト pandaboard es編
Android組み込み開発テキスト pandaboard es編
Android組み込み開発テキスト pandaboard es編
Android組み込み開発テキスト pandaboard es編
Android組み込み開発テキスト pandaboard es編
Android組み込み開発テキスト pandaboard es編
Android組み込み開発テキスト pandaboard es編
Android組み込み開発テキスト pandaboard es編
Android組み込み開発テキスト pandaboard es編
Android組み込み開発テキスト pandaboard es編
Android組み込み開発テキスト pandaboard es編
Android組み込み開発テキスト pandaboard es編
Android組み込み開発テキスト pandaboard es編
Android組み込み開発テキスト pandaboard es編
Android組み込み開発テキスト pandaboard es編
Android組み込み開発テキスト pandaboard es編
Android組み込み開発テキスト pandaboard es編
Android組み込み開発テキスト pandaboard es編
Android組み込み開発テキスト pandaboard es編
Android組み込み開発テキスト pandaboard es編
Android組み込み開発テキスト pandaboard es編
Android組み込み開発テキスト pandaboard es編
Android組み込み開発テキスト pandaboard es編
Android組み込み開発テキスト pandaboard es編
Android組み込み開発テキスト pandaboard es編
Android組み込み開発テキスト pandaboard es編
Android組み込み開発テキスト pandaboard es編
Android組み込み開発テキスト pandaboard es編
Android組み込み開発テキスト pandaboard es編
Android組み込み開発テキスト pandaboard es編
Android組み込み開発テキスト pandaboard es編
Android組み込み開発テキスト pandaboard es編

More Related Content

What's hot

USB3.0ドライバ開発の道
USB3.0ドライバ開発の道USB3.0ドライバ開発の道
USB3.0ドライバ開発の道uchan_nos
 
基礎から学ぶ組み込みAndroid
基礎から学ぶ組み込みAndroid基礎から学ぶ組み込みAndroid
基礎から学ぶ組み込みAndroiddemuyan
 
FPGAによる大規模データ処理の高速化
FPGAによる大規模データ処理の高速化FPGAによる大規模データ処理の高速化
FPGAによる大規模データ処理の高速化Kazunori Sato
 
Linux field-update-2015
Linux field-update-2015Linux field-update-2015
Linux field-update-2015Chris Simmonds
 
Scheduling in Android
Scheduling in AndroidScheduling in Android
Scheduling in AndroidOpersys inc.
 
UnboundとNSDの紹介 BIND9との比較編
UnboundとNSDの紹介 BIND9との比較編UnboundとNSDの紹介 BIND9との比較編
UnboundとNSDの紹介 BIND9との比較編hdais
 
KubernetesでGPUクラスタを管理したい
KubernetesでGPUクラスタを管理したいKubernetesでGPUクラスタを管理したい
KubernetesでGPUクラスタを管理したいYuji Oshima
 
Introduction to yocto
Introduction to yoctoIntroduction to yocto
Introduction to yoctoAlex Gonzalez
 
Process Scheduler and Balancer in Linux Kernel
Process Scheduler and Balancer in Linux KernelProcess Scheduler and Balancer in Linux Kernel
Process Scheduler and Balancer in Linux KernelHaifeng Li
 
The Forefront of the Development for NVDIMM on Linux Kernel (Linux Plumbers c...
The Forefront of the Development for NVDIMM on Linux Kernel (Linux Plumbers c...The Forefront of the Development for NVDIMM on Linux Kernel (Linux Plumbers c...
The Forefront of the Development for NVDIMM on Linux Kernel (Linux Plumbers c...Yasunori Goto
 
Yocto - Embedded Linux Distribution Maker
Yocto - Embedded Linux Distribution MakerYocto - Embedded Linux Distribution Maker
Yocto - Embedded Linux Distribution MakerSherif Mousa
 
Tracing MariaDB server with bpftrace - MariaDB Server Fest 2021
Tracing MariaDB server with bpftrace - MariaDB Server Fest 2021Tracing MariaDB server with bpftrace - MariaDB Server Fest 2021
Tracing MariaDB server with bpftrace - MariaDB Server Fest 2021Valeriy Kravchuk
 
Qemu device prototyping
Qemu device prototypingQemu device prototyping
Qemu device prototypingYan Vugenfirer
 
Kubernetes Meetup Tokyo #35_GitOps Toolkit による Kubernetes マニフェスト CD
Kubernetes Meetup Tokyo #35_GitOps Toolkit による Kubernetes マニフェスト CDKubernetes Meetup Tokyo #35_GitOps Toolkit による Kubernetes マニフェスト CD
Kubernetes Meetup Tokyo #35_GitOps Toolkit による Kubernetes マニフェスト CDPreferred Networks
 
Embedded Linux from Scratch to Yocto
Embedded Linux from Scratch to YoctoEmbedded Linux from Scratch to Yocto
Embedded Linux from Scratch to YoctoSherif Mousa
 
Build your own embedded linux distributions by yocto project
Build your own embedded linux distributions by yocto projectBuild your own embedded linux distributions by yocto project
Build your own embedded linux distributions by yocto projectYen-Chin Lee
 
Interrupt Affinityについて
Interrupt AffinityについてInterrupt Affinityについて
Interrupt AffinityについてTakuya ASADA
 

What's hot (20)

USB3.0ドライバ開発の道
USB3.0ドライバ開発の道USB3.0ドライバ開発の道
USB3.0ドライバ開発の道
 
基礎から学ぶ組み込みAndroid
基礎から学ぶ組み込みAndroid基礎から学ぶ組み込みAndroid
基礎から学ぶ組み込みAndroid
 
FPGAによる大規模データ処理の高速化
FPGAによる大規模データ処理の高速化FPGAによる大規模データ処理の高速化
FPGAによる大規模データ処理の高速化
 
Linux field-update-2015
Linux field-update-2015Linux field-update-2015
Linux field-update-2015
 
Scheduling in Android
Scheduling in AndroidScheduling in Android
Scheduling in Android
 
Dpdk pmd
Dpdk pmdDpdk pmd
Dpdk pmd
 
UnboundとNSDの紹介 BIND9との比較編
UnboundとNSDの紹介 BIND9との比較編UnboundとNSDの紹介 BIND9との比較編
UnboundとNSDの紹介 BIND9との比較編
 
KubernetesでGPUクラスタを管理したい
KubernetesでGPUクラスタを管理したいKubernetesでGPUクラスタを管理したい
KubernetesでGPUクラスタを管理したい
 
Introduction to yocto
Introduction to yoctoIntroduction to yocto
Introduction to yocto
 
Process Scheduler and Balancer in Linux Kernel
Process Scheduler and Balancer in Linux KernelProcess Scheduler and Balancer in Linux Kernel
Process Scheduler and Balancer in Linux Kernel
 
The Forefront of the Development for NVDIMM on Linux Kernel (Linux Plumbers c...
The Forefront of the Development for NVDIMM on Linux Kernel (Linux Plumbers c...The Forefront of the Development for NVDIMM on Linux Kernel (Linux Plumbers c...
The Forefront of the Development for NVDIMM on Linux Kernel (Linux Plumbers c...
 
Yocto - Embedded Linux Distribution Maker
Yocto - Embedded Linux Distribution MakerYocto - Embedded Linux Distribution Maker
Yocto - Embedded Linux Distribution Maker
 
Tracing MariaDB server with bpftrace - MariaDB Server Fest 2021
Tracing MariaDB server with bpftrace - MariaDB Server Fest 2021Tracing MariaDB server with bpftrace - MariaDB Server Fest 2021
Tracing MariaDB server with bpftrace - MariaDB Server Fest 2021
 
Qemu device prototyping
Qemu device prototypingQemu device prototyping
Qemu device prototyping
 
Kubernetes Meetup Tokyo #35_GitOps Toolkit による Kubernetes マニフェスト CD
Kubernetes Meetup Tokyo #35_GitOps Toolkit による Kubernetes マニフェスト CDKubernetes Meetup Tokyo #35_GitOps Toolkit による Kubernetes マニフェスト CD
Kubernetes Meetup Tokyo #35_GitOps Toolkit による Kubernetes マニフェスト CD
 
Embedded Linux from Scratch to Yocto
Embedded Linux from Scratch to YoctoEmbedded Linux from Scratch to Yocto
Embedded Linux from Scratch to Yocto
 
レシピの作り方入門
レシピの作り方入門レシピの作り方入門
レシピの作り方入門
 
LXC入門 - Osc2011 nagoya
LXC入門 - Osc2011 nagoyaLXC入門 - Osc2011 nagoya
LXC入門 - Osc2011 nagoya
 
Build your own embedded linux distributions by yocto project
Build your own embedded linux distributions by yocto projectBuild your own embedded linux distributions by yocto project
Build your own embedded linux distributions by yocto project
 
Interrupt Affinityについて
Interrupt AffinityについてInterrupt Affinityについて
Interrupt Affinityについて
 

Viewers also liked

Androidプログラミング入門
Androidプログラミング入門Androidプログラミング入門
Androidプログラミング入門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
 
Introduction of oesf education consortium
Introduction of oesf education consortiumIntroduction of oesf education consortium
Introduction of oesf education consortiumOESF Education
 
PF開発に使えるAOSPのツール達
PF開発に使えるAOSPのツール達PF開発に使えるAOSPのツール達
PF開発に使えるAOSPのツール達l_b__
 
Androidタブレットアプリケーション開発入門
Androidタブレットアプリケーション開発入門Androidタブレットアプリケーション開発入門
Androidタブレットアプリケーション開発入門OESF Education
 
Androidアプリケーション応用 WebAPI開発
Androidアプリケーション応用 WebAPI開発Androidアプリケーション応用 WebAPI開発
Androidアプリケーション応用 WebAPI開発OESF Education
 
Android UIデザイン入門
Android UIデザイン入門Android UIデザイン入門
Android UIデザイン入門OESF Education
 
An Overview of Android Things at jag201702
An Overview of Android Things at jag201702An Overview of Android Things at jag201702
An Overview of Android Things at jag201702Hiroki Ishizuka
 
Distributed Compiler Icecc
Distributed Compiler IceccDistributed Compiler Icecc
Distributed Compiler IceccSZ Lin
 
Lightweight-Stream-APIのあるAndroidアプリ開発
Lightweight-Stream-APIのあるAndroidアプリ開発Lightweight-Stream-APIのあるAndroidアプリ開発
Lightweight-Stream-APIのあるAndroidアプリ開発Shinobu Okano
 
[Android] モジュール管理で ビルド高速化!
[Android] モジュール管理で ビルド高速化!	[Android] モジュール管理で ビルド高速化!
[Android] モジュール管理で ビルド高速化! ichigotake .
 
Androidアプリケーション開発入門
Androidアプリケーション開発入門Androidアプリケーション開発入門
Androidアプリケーション開発入門OESF Education
 
[AWSマイスターシリーズ] AWS CLI / AWS Tools for Windows PowerShell
[AWSマイスターシリーズ] AWS CLI / AWS Tools for Windows PowerShell[AWSマイスターシリーズ] AWS CLI / AWS Tools for Windows PowerShell
[AWSマイスターシリーズ] AWS CLI / AWS Tools for Windows PowerShellAmazon Web Services Japan
 
Using the Android Native Development Kit (NDK)
Using the Android Native Development Kit (NDK)Using the Android Native Development Kit (NDK)
Using the Android Native Development Kit (NDK)Xavier Hallade
 

Viewers also liked (18)

Androidプログラミング入門
Androidプログラミング入門Androidプログラミング入門
Androidプログラミング入門
 
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 アプリケーション開発応用
 
Introduction of oesf education consortium
Introduction of oesf education consortiumIntroduction of oesf education consortium
Introduction of oesf education consortium
 
PF開発に使えるAOSPのツール達
PF開発に使えるAOSPのツール達PF開発に使えるAOSPのツール達
PF開発に使えるAOSPのツール達
 
Androidタブレットアプリケーション開発入門
Androidタブレットアプリケーション開発入門Androidタブレットアプリケーション開発入門
Androidタブレットアプリケーション開発入門
 
Androidアプリケーション応用 WebAPI開発
Androidアプリケーション応用 WebAPI開発Androidアプリケーション応用 WebAPI開発
Androidアプリケーション応用 WebAPI開発
 
Android UIデザイン入門
Android UIデザイン入門Android UIデザイン入門
Android UIデザイン入門
 
An Overview of Android Things at jag201702
An Overview of Android Things at jag201702An Overview of Android Things at jag201702
An Overview of Android Things at jag201702
 
Distributed Compiler Icecc
Distributed Compiler IceccDistributed Compiler Icecc
Distributed Compiler Icecc
 
Lightweight-Stream-APIのあるAndroidアプリ開発
Lightweight-Stream-APIのあるAndroidアプリ開発Lightweight-Stream-APIのあるAndroidアプリ開発
Lightweight-Stream-APIのあるAndroidアプリ開発
 
[Android] モジュール管理で ビルド高速化!
[Android] モジュール管理で ビルド高速化!	[Android] モジュール管理で ビルド高速化!
[Android] モジュール管理で ビルド高速化!
 
Android概要資料
Android概要資料Android概要資料
Android概要資料
 
Androidアプリケーション開発入門
Androidアプリケーション開発入門Androidアプリケーション開発入門
Androidアプリケーション開発入門
 
Androidテスティング実践 基礎編
Androidテスティング実践 基礎編Androidテスティング実践 基礎編
Androidテスティング実践 基礎編
 
[AWSマイスターシリーズ] AWS CLI / AWS Tools for Windows PowerShell
[AWSマイスターシリーズ] AWS CLI / AWS Tools for Windows PowerShell[AWSマイスターシリーズ] AWS CLI / AWS Tools for Windows PowerShell
[AWSマイスターシリーズ] AWS CLI / AWS Tools for Windows PowerShell
 
Using the Android Native Development Kit (NDK)
Using the Android Native Development Kit (NDK)Using the Android Native Development Kit (NDK)
Using the Android Native Development Kit (NDK)
 

Similar to Android組み込み開発テキスト pandaboard es編

環境構築自動化ツールのご紹介
環境構築自動化ツールのご紹介環境構築自動化ツールのご紹介
環境構築自動化ツールのご紹介Etsuji Nakai
 
ロボットシステムのつくりかた 〜Robot Operating Systemというアプローチ〜
ロボットシステムのつくりかた 〜Robot Operating Systemというアプローチ〜ロボットシステムのつくりかた 〜Robot Operating Systemというアプローチ〜
ロボットシステムのつくりかた 〜Robot Operating Systemというアプローチ〜Hideki Takase
 
OpenCV2.2 Install Guide ver.0.5
OpenCV2.2 Install Guide ver.0.5OpenCV2.2 Install Guide ver.0.5
OpenCV2.2 Install Guide ver.0.5Tsukasa Sugiura
 
CloudFoundry 2 on Apache CloudStack 4.2.1
CloudFoundry 2 on Apache CloudStack 4.2.1CloudFoundry 2 on Apache CloudStack 4.2.1
CloudFoundry 2 on Apache CloudStack 4.2.1Kotaro Noyama
 
OpenStackクラウド基盤構築ハンズオンセミナー 第1日:ハンズオンNo1
OpenStackクラウド基盤構築ハンズオンセミナー 第1日:ハンズオンNo1OpenStackクラウド基盤構築ハンズオンセミナー 第1日:ハンズオンNo1
OpenStackクラウド基盤構築ハンズオンセミナー 第1日:ハンズオンNo1Etsuji Nakai
 
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
 
ZynqMPのブートとパワーマネージメント : (ZynqMP Boot and Power Management)
ZynqMPのブートとパワーマネージメント : (ZynqMP Boot and Power Management)ZynqMPのブートとパワーマネージメント : (ZynqMP Boot and Power Management)
ZynqMPのブートとパワーマネージメント : (ZynqMP Boot and Power Management)Mr. Vengineer
 
LPICレベル1技術解説セミナー(2012/11/11)
LPICレベル1技術解説セミナー(2012/11/11)LPICレベル1技術解説セミナー(2012/11/11)
LPICレベル1技術解説セミナー(2012/11/11)Kazuko Itoda
 
Personal Cloud Automation
Personal Cloud AutomationPersonal Cloud Automation
Personal Cloud AutomationEtsuji Nakai
 
Infinite Debian - Platform for mass-producing system every second
Infinite Debian - Platform for mass-producing system every secondInfinite Debian - Platform for mass-producing system every second
Infinite Debian - Platform for mass-producing system every secondTaisuke Yamada
 
App016 .net core_~_cross-platform、_high_performance、_open_sour
App016 .net core_~_cross-platform、_high_performance、_open_sourApp016 .net core_~_cross-platform、_high_performance、_open_sour
App016 .net core_~_cross-platform、_high_performance、_open_sourTech Summit 2016
 
App016 .net core_~_cross-platform、_high_performance、_open_sou
App016 .net core_~_cross-platform、_high_performance、_open_souApp016 .net core_~_cross-platform、_high_performance、_open_sou
App016 .net core_~_cross-platform、_high_performance、_open_souTech Summit 2016
 
Using Kubernetes on Google Container Engine
Using Kubernetes on Google Container EngineUsing Kubernetes on Google Container Engine
Using Kubernetes on Google Container EngineEtsuji Nakai
 
CloudFoundry 2 on Apache CloudStack 4.2.1
CloudFoundry 2 on Apache CloudStack 4.2.1CloudFoundry 2 on Apache CloudStack 4.2.1
CloudFoundry 2 on Apache CloudStack 4.2.1Kotaro Noyama
 
App controllerとwindows azure packで作る大規模プライベートクラウド
App controllerとwindows azure packで作る大規模プライベートクラウドApp controllerとwindows azure packで作る大規模プライベートクラウド
App controllerとwindows azure packで作る大規模プライベートクラウドTakashi Kanai
 
ネットワークエンジニアのための Puppet / Chef
ネットワークエンジニアのための Puppet / Chefネットワークエンジニアのための Puppet / Chef
ネットワークエンジニアのための Puppet / Chefnpsg
 
2015 0227 OSC-Spring Tokyo NETMF
2015 0227 OSC-Spring Tokyo NETMF2015 0227 OSC-Spring Tokyo NETMF
2015 0227 OSC-Spring Tokyo NETMFAtomu Hidaka
 
JellyBeanのソースをとりあえず眺めてみた(手抜き)
JellyBeanのソースをとりあえず眺めてみた(手抜き)JellyBeanのソースをとりあえず眺めてみた(手抜き)
JellyBeanのソースをとりあえず眺めてみた(手抜き)l_b__
 

Similar to Android組み込み開発テキスト pandaboard es編 (20)

環境構築自動化ツールのご紹介
環境構築自動化ツールのご紹介環境構築自動化ツールのご紹介
環境構築自動化ツールのご紹介
 
ロボットシステムのつくりかた 〜Robot Operating Systemというアプローチ〜
ロボットシステムのつくりかた 〜Robot Operating Systemというアプローチ〜ロボットシステムのつくりかた 〜Robot Operating Systemというアプローチ〜
ロボットシステムのつくりかた 〜Robot Operating Systemというアプローチ〜
 
OpenCV2.2 Install Guide ver.0.5
OpenCV2.2 Install Guide ver.0.5OpenCV2.2 Install Guide ver.0.5
OpenCV2.2 Install Guide ver.0.5
 
CloudFoundry 2 on Apache CloudStack 4.2.1
CloudFoundry 2 on Apache CloudStack 4.2.1CloudFoundry 2 on Apache CloudStack 4.2.1
CloudFoundry 2 on Apache CloudStack 4.2.1
 
OpenStackクラウド基盤構築ハンズオンセミナー 第1日:ハンズオンNo1
OpenStackクラウド基盤構築ハンズオンセミナー 第1日:ハンズオンNo1OpenStackクラウド基盤構築ハンズオンセミナー 第1日:ハンズオンNo1
OpenStackクラウド基盤構築ハンズオンセミナー 第1日:ハンズオンNo1
 
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
 
ZynqMPのブートとパワーマネージメント : (ZynqMP Boot and Power Management)
ZynqMPのブートとパワーマネージメント : (ZynqMP Boot and Power Management)ZynqMPのブートとパワーマネージメント : (ZynqMP Boot and Power Management)
ZynqMPのブートとパワーマネージメント : (ZynqMP Boot and Power Management)
 
LPICレベル1技術解説セミナー(2012/11/11)
LPICレベル1技術解説セミナー(2012/11/11)LPICレベル1技術解説セミナー(2012/11/11)
LPICレベル1技術解説セミナー(2012/11/11)
 
Personal Cloud Automation
Personal Cloud AutomationPersonal Cloud Automation
Personal Cloud Automation
 
Infinite Debian - Platform for mass-producing system every second
Infinite Debian - Platform for mass-producing system every secondInfinite Debian - Platform for mass-producing system every second
Infinite Debian - Platform for mass-producing system every second
 
App016 .net core_~_cross-platform、_high_performance、_open_sour
App016 .net core_~_cross-platform、_high_performance、_open_sourApp016 .net core_~_cross-platform、_high_performance、_open_sour
App016 .net core_~_cross-platform、_high_performance、_open_sour
 
App016 .net core_~_cross-platform、_high_performance、_open_sou
App016 .net core_~_cross-platform、_high_performance、_open_souApp016 .net core_~_cross-platform、_high_performance、_open_sou
App016 .net core_~_cross-platform、_high_performance、_open_sou
 
Using Kubernetes on Google Container Engine
Using Kubernetes on Google Container EngineUsing Kubernetes on Google Container Engine
Using Kubernetes on Google Container Engine
 
CloudFoundry 2 on Apache CloudStack 4.2.1
CloudFoundry 2 on Apache CloudStack 4.2.1CloudFoundry 2 on Apache CloudStack 4.2.1
CloudFoundry 2 on Apache CloudStack 4.2.1
 
20230128.pptx
20230128.pptx20230128.pptx
20230128.pptx
 
App controllerとwindows azure packで作る大規模プライベートクラウド
App controllerとwindows azure packで作る大規模プライベートクラウドApp controllerとwindows azure packで作る大規模プライベートクラウド
App controllerとwindows azure packで作る大規模プライベートクラウド
 
ネットワークエンジニアのための Puppet / Chef
ネットワークエンジニアのための Puppet / Chefネットワークエンジニアのための Puppet / Chef
ネットワークエンジニアのための Puppet / Chef
 
2015 0227 OSC-Spring Tokyo NETMF
2015 0227 OSC-Spring Tokyo NETMF2015 0227 OSC-Spring Tokyo NETMF
2015 0227 OSC-Spring Tokyo NETMF
 
Jap1
Jap1Jap1
Jap1
 
JellyBeanのソースをとりあえず眺めてみた(手抜き)
JellyBeanのソースをとりあえず眺めてみた(手抜き)JellyBeanのソースをとりあえず眺めてみた(手抜き)
JellyBeanのソースをとりあえず眺めてみた(手抜き)
 

Recently uploaded

SOPを理解する 2024/04/19 の勉強会で発表されたものです
SOPを理解する       2024/04/19 の勉強会で発表されたものですSOPを理解する       2024/04/19 の勉強会で発表されたものです
SOPを理解する 2024/04/19 の勉強会で発表されたものですiPride Co., Ltd.
 
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)Hiroki Ichikura
 
論文紹介:Automated Classification of Model Errors on ImageNet
論文紹介:Automated Classification of Model Errors on ImageNet論文紹介:Automated Classification of Model Errors on ImageNet
論文紹介:Automated Classification of Model Errors on ImageNetToru Tamaki
 
TSAL operation mechanism and circuit diagram.pdf
TSAL operation mechanism and circuit diagram.pdfTSAL operation mechanism and circuit diagram.pdf
TSAL operation mechanism and circuit diagram.pdftaisei2219
 
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介Yuma Ohgami
 
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...Toru Tamaki
 
論文紹介:Semantic segmentation using Vision Transformers: A survey
論文紹介:Semantic segmentation using Vision Transformers: A survey論文紹介:Semantic segmentation using Vision Transformers: A survey
論文紹介:Semantic segmentation using Vision Transformers: A surveyToru Tamaki
 
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案sugiuralab
 

Recently uploaded (8)

SOPを理解する 2024/04/19 の勉強会で発表されたものです
SOPを理解する       2024/04/19 の勉強会で発表されたものですSOPを理解する       2024/04/19 の勉強会で発表されたものです
SOPを理解する 2024/04/19 の勉強会で発表されたものです
 
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
 
論文紹介:Automated Classification of Model Errors on ImageNet
論文紹介:Automated Classification of Model Errors on ImageNet論文紹介:Automated Classification of Model Errors on ImageNet
論文紹介:Automated Classification of Model Errors on ImageNet
 
TSAL operation mechanism and circuit diagram.pdf
TSAL operation mechanism and circuit diagram.pdfTSAL operation mechanism and circuit diagram.pdf
TSAL operation mechanism and circuit diagram.pdf
 
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
 
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
 
論文紹介:Semantic segmentation using Vision Transformers: A survey
論文紹介:Semantic segmentation using Vision Transformers: A survey論文紹介:Semantic segmentation using Vision Transformers: A survey
論文紹介:Semantic segmentation using Vision Transformers: A survey
 
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
 

Android組み込み開発テキスト pandaboard es編

  • 1. This  material  is  licensed  under  the  Crea1ve  Commons  License  BY-­‐NC-­‐SA  4.0.   1  1   Android組込み開発 基礎コース Pandaboard  ES  編 20120823オリジナル 20140901改定
  • 2. This  material  is  licensed  under  the  Crea1ve  Commons  License  BY-­‐NC-­‐SA  4.0.   2  2   テキストのご利用に関して ・本コースとコースのモジュールの内容、および受講者に渡される印刷物 などを含めたコースに関連する教材全ての著作権はOESFに帰属します。 ・本コースのテキストは、Creative Commons License BY-NC-SA 4.0 に基 づいて提供されています。OESF会員またはOESFエデュケーションコン ソーシアムメンバーでない場合、内容の改変の有無にかかわらず、商用 目的での利用は禁止されています。 ・本教育プログラムは、その中で提供される教材全てを含め、OESFからの いかなる保証もなしに提供されます。OESFは、本コースの内容または コースの詳細な情報を使用することに起因して、または誤って使用する ことに起因して何らかの障害や法的な行為が生じても、いかなる責任も 負いません。
  • 3. This  material  is  licensed  under  the  Crea1ve  Commons  License  BY-­‐NC-­‐SA  4.0.   3  3   トレーニングの目的 •  LinuxとAndroidの違いを理解する •  組込みLinuxとAndroidの開発環境を構築できる •  LinuxとAndroidの起動手順の違いを理解する •  実機へのAndroidの移植方法を理解する •  実機のデバッグ方法を理解する •  演習を通してプラットフォーム開発を体験する
  • 4. This  material  is  licensed  under  the  Crea1ve  Commons  License  BY-­‐NC-­‐SA  4.0.   4  4   受講するに当たって必要なスキル •  OSの概念を理解している事 •  Java言語またはC/C++言語の開発経験がある事 –  基本的なJavaやC/C++の言語仕様について理解がある事 •  Linuxのコマンド操作経験がある事 –  演習では実際にLinuxコマンドを操作して移植作業を実 施する •  Eclipseを使用した経験がある事 –  Androidのアプリケーション開発はEclipseを使用する
  • 5. This  material  is  licensed  under  the  Crea1ve  Commons  License  BY-­‐NC-­‐SA  4.0.   5  5   目次 1章. Linux概要 2章. Android概要 3章. ターゲットのボード 4章. 実機でAndroidを動かす(実習) 5章. デバイスの組み込み 6章. NDK/JNI概要 7章. 外部装置との連携アプリケーション作成(実習)
  • 6. This  material  is  licensed  under  the  Crea1ve  Commons  License  BY-­‐NC-­‐SA  4.0.   6  6   第1章    Linux概要
  • 7. This  material  is  licensed  under  the  Crea1ve  Commons  License  BY-­‐NC-­‐SA  4.0.   7  7   1章の概要 •  Linuxとは •  ルートファイルシステム •  起動シーケンス •  Initの概要 •  組み込み向けOS •  組み込みLinux
  • 8. This  material  is  licensed  under  the  Crea1ve  Commons  License  BY-­‐NC-­‐SA  4.0.   8  8   Linuxとは? u  1998年~ u  オープンソースで完全フリーで世界中で最もよく使われている u  GPLライセンス(ソースコードの公開義務) u  UNIX*1のクローンなのでUNIXの一部資産が流用可能 u  リーナス・トーバルズ氏が開発/公開したOS :カーネルのみの提供 (kernel.org) u  Linus中心の強固な管理体制と安定性の確保 u  主なLinuxシステム(ブートローダーやfsも含む)のディストリビューション l  Debian系:パッケージ管理はdeb形式 l Debian GNU Linux、Ubuntu: コミュニティベース、100%フリーであることが理念 l  RedHat系:パッケージ管理はRPM形式 l Fedora、VineLinux : RedHatLinux後継のコミュニティによる実験要素が強い l RedHat Enterprise Linux(商用) *1 : UNIXは現在BSD系UNIXとして存続(FreeBSD,NetBSD)
  • 9. This  material  is  licensed  under  the  Crea1ve  Commons  License  BY-­‐NC-­‐SA  4.0.   9  9   Debian系Linuxの起動シーケンス BIOS ブートデバイスの専用ブロック読み出し ブートローダ LILO/GRUBなど 起動パラメータの設定 Boot カーネル CPU初期化 ハードウェアのチェック ドライバ読みこみ 起動用ファイル(init)が ある領域のマウント initrd 起動に必要なドライバが格納され ている一時的なルートファイルシス テム(初期RAMディスク) init /etc/inittab 基本設定  ・ネットワーク  ・キーボード  ・デバイス初期化 デーモンの起動 (rcスクリプト経由) login メモリに展開 シェル initは以下のいずれかの場所にある /sbin/init, /etc/init, /bin/init, /bin/sh Power ON or Reboot login:hogetaro password: $
  • 10. This  material  is  licensed  under  the  Crea1ve  Commons  License  BY-­‐NC-­‐SA  4.0.   10  10   Debian系Linuxのinitが行う設定 /etc/inittab # デフォルトランレベル3 id:3:initdefault: # ブート時の処理(システム初期化スクリプト) si::systeminit:/etc/init.d/rcS #各ランレベル用のrcスクリプトを実行し、その終了を待つ 10:0:wait:/etc/init.d/rc 0 11:1:wait:/etc/init.d/rc 1 12:2:wait:/etc/init.d/rc 2 13:3:wait:/etc/init.d/rc 3 14:4:wait:/etc/init.d/rc 4 15:5:wait:/etc/init.d/rc 5 16:6:wait:/etc/init.d/rc 6 # 1度だけ実行される処理(/sbin/update実行) ud::once:/sbin/update # 端末制御(ランレベル2~5で/sbin/mingetty実行) # 終了されると再実行 1:2345:respawn:/sbin/mingetty tty1 : # ランレベル5の時のログイン処理(/ etc/X11/prefdmを実行) # 終了されると再実行 X:5:respawn:/etc/X11/prefdm -nodaemon init デーモン3 •  initが行う各種設定はinittabに記載されている情報を元 に行う デーモン2 デーモン1
  • 11. This  material  is  licensed  under  the  Crea1ve  Commons  License  BY-­‐NC-­‐SA  4.0.   11  11   Debian系Linux  の  inittabの書式 /etc/init.d/rcSがやること ∟/etc/default/rcSを実行 ∟/etc/rcS.d内のスクリプト全てを実行 •  ホスト名の設定 •  クロックの設定 •  キーマップの設定 •  言語とフォントの設定 •  ハードディスクの検査と修復 •  ハードディスクのマウント initdefault システム起動完了時に入るべきランレ ベル respawn プロセスが終了したらすぐに再起動する ondemand respawnと同じだがオンデマンドランレ ベルが指定された場合のみ実行する wait プロセスが終了するまで待機してラン レベルになったときだけ実行する once 指定ランレベルになったときだけ一度 だけ実行する off 何もしない boot システム起動中に実行する bootwait システム起動中に実行し、プロセスが 終了するまで待機 sysinit システム起動中に実行する (boot,bootwaitより先に実行される) ctrlaltdel SIGINTを受け取ったときに実行する アクションの種類 ランレベルと動作モード 0 Halt 1 シングルユーザモ ード 2 3 4 マルチユーザモード (text) 5 マルチユーザ(X) 6 reboot
  • 12. This  material  is  licensed  under  the  Crea1ve  Commons  License  BY-­‐NC-­‐SA  4.0.   12  12   Debian系Linux  の ルートファイルシステム bin boot dev etc lib mnt(media) opt proc home/root sbin sys tmp usr var コマンド類 起動ファイル デバイスファイル 設定ファイル ライブラリ、カーネルモジュール マウントポイント 追加アプリケーション カーネル情報(cpu、process、メモリ情報の参照) ユーザのホームディレクトリ システム管理コマンド(shtdown、mountなど) システムレポジトリ 一時ファイル 各種ユーザプログラム 可変データ(ログ、キャッシュ、スプーラなど) root /
  • 13. This  material  is  licensed  under  the  Crea1ve  Commons  License  BY-­‐NC-­‐SA  4.0.   13  13   組込み機器向けOSの条件 •  少ない資源(メモリ)で動作可能 •  リアルタイムオペレーティングシステム •  低価格 •  製品企画から市場投入までの短期化
  • 14. This  material  is  licensed  under  the  Crea1ve  Commons  License  BY-­‐NC-­‐SA  4.0.   14  14   従来の組込み向けOS OS名 提供 開発環境 主な用途 価格 対応PF VxWorks ウィンドリバー Eclipse 組込み機器全般 有償 ソースコード は別途購入 ARM他 多数 WindowsCE マイクロソフト Windows CE Toolkit for Visual C++/Visual BASIC (Visual Studio) 組込み機器全般 有償 Closed Source ARM他 多数 T-kernel T-kernel Extension T-Engineフォー ラム Eclipse for PMC T- Kernel 組込み機器全般 無償/有償 Open Source (ただし独自 のライセンス) ARM SH M32 Windows Phone8 マイクロソフト Visual Studio WindowsPhone専用 プロプライエタリ EULA形式の 契約書が必要 ARM iOS Apple XCode iPhone/ iPad専用 プロプライエタリ EULA形式の 契約書が必要 Aoole独自 Symbian OS Nokia Carbide C++ (Eclipse) MOAP,S60,UIQ3 携帯電話/スマート フォン SDKは有償版 と無償版がある OpenSource ARM
  • 15. This  material  is  licensed  under  the  Crea1ve  Commons  License  BY-­‐NC-­‐SA  4.0.   15  15   組込み向けLinux OS名 提供 主な用途 価格 対応PF MontaVista Linux 米モンタビスタソフトウェア 携帯電話向け 有償 x86、 PowerPCMIP Sなど Wind River Linux Wind River 組込み機器全般 有償 x86、 PowerPC、 MIPS、 Tizen Linux Foundation/LiMo Tizen Association 組込み機器全般 無償 オープンソース ARM Intel(X86) AxLinux アックス 組込み機器全般 有償 ARM、OMAP SHなど Lineo uLinux リネオ ソリューションズ 株式会社 組込み機器全般 オープンソース ソフトウェアコンポ ーネント:提供各社 ライセンスによる ARM他 多数 Android Google & OHA スマートフォン タブレット 無償 オープンソース ARM、x86、 MIPS、OMA Pなど Embedded Master OESF 組込み機器全般 無償 オープンソース ARM OMAPなど Tizen Association・・・docomo, intel, orange, Panasonic, SAMSUNG, NEC, Sprint, HUAWEI, vodafoneなどが参加
  • 16. This  material  is  licensed  under  the  Crea1ve  Commons  License  BY-­‐NC-­‐SA  4.0.   16  16   組込みLinuxの特徴 •  Linuxカーネルに少数のフリーソフトウェアを組み合わせたもの •  組込みCPUアーキテクチャのサポート •  ARM、MIPS、X86など •  RAMや二次記憶装置などの容量が小さい •  2MB以下のメモリで起動可能 •  組込み機器のアプリケーションや対象ハードウェアに必要な機 能に特化 •  MMUユニット※のないCPUでも動作可能(CONFIG_MMU=n)  •  シングルプロセッサに最適化可能(CONFIG_SMP=n)  •  NANDの直接使用(JFFS2、UBIFS) •  ファイルシステム •  マウント速度が速い(YAFFS2など) •  読み出し専用(romfs) ※MMU:メモリ管理ユニット
  • 17. This  material  is  licensed  under  the  Crea1ve  Commons  License  BY-­‐NC-­‐SA  4.0.   17  17   組込みLinuxのリアルタイム性能 • ソフトリアルタイム (CONFIG_PREEMPT) • ハードリアルタイム (CONFIG_PREEMPT_RT patch set) • 他のカーネルとの組み合わせでリアルタイム性を向上 • RTAI (Adeos+Linux) • RTLinux (Realtime executive+Linux) • Linux on ITRON (ITRON+Linux) • T-Linux (T-Engine+Linux) • L4-Linux (L4+Linux) • Litron (TOPPERS/JSPカーネル+Linux) • Wind River Real-Time Core for Linux (Real-Time Core+Linux) 参考:http://monoist.atmarkit.co.jp/mn/articles/0501/12/news113.html
  • 18. This  material  is  licensed  under  the  Crea1ve  Commons  License  BY-­‐NC-­‐SA  4.0.   18  18   組込みLinuxの開発環境 • 一般的なツール • Eclipse C/C++ Development Tooling (CDT) :EclipseでのCやC++の開発に必須 • Target Management (RSE) • Linux Tools Project :プロファイラや動的解析などの機能を統合 • Tools for mobile Linux (TmL) • EGit :バージョン管理システムの一つ、Gitの統合 • Mylyn :バグトラッカの統合 • 特定のOSに特化したEclipseプラグイン • Moblin Eclipse Plug-in • Android Development Tools (ADT) • その他の開発環境 • QEMU:エミュレータ • distcc、icecc:分散コンパイル用コンパイラ • 専用の商用製品など
  • 19. This  material  is  licensed  under  the  Crea1ve  Commons  License  BY-­‐NC-­‐SA  4.0.   19  19   組込みLinuxに関わる団体 •  Linux Foundation (CE Linux Forumを吸収) •  Linuxオペレーティングシステムの普及をサポートする非営利のコンソーシアム •  旧CE Linux Forumが開催する定期的な無料イベント開催 •  日本テクニカルジャンボリー http://elinux.org/Japan_Technical_Jamboree_Guidance •  LiMo Foundation •  Linuxを使った携帯電話のアプリケーション環境の標準化団体 •  モトローラ、NEC、パナソニック、サムスン電子、NTTドコモ、ボーダフォンなど •  Open Handset Alliance (OHA) •  Googleとともに携帯向けAndroidの開発推進を行うアライアンス •  Open Embedded Software Foundation (OESF) •  組み込み機器向けAndroidに関わる企業間の協力を目的とした一般社団法人 •  Linaro •  ARMのチップベンダである参加企業の各SoCに最適化されたツール、カーネル、 ミドルウェアを提供することなどを目的とした非営利団体
  • 20. This  material  is  licensed  under  the  Crea1ve  Commons  License  BY-­‐NC-­‐SA  4.0.   20  20   第2章    Android概要
  • 21. This  material  is  licensed  under  the  Crea1ve  Commons  License  BY-­‐NC-­‐SA  4.0.   21  21   2章の概要 •  Androidとは –  主な機能、歴史 •  Androidアプリケーションの動作環境 •  Androidのアーキテクチャ •  アプリケーション開発環境 •  プラットフォーム開発環境 –  ソースコード –  ルートファイルシステム –  Androidの起動処理 •  エミュレータ
  • 22. This  material  is  licensed  under  the  Crea1ve  Commons  License  BY-­‐NC-­‐SA  4.0.   22  22   Androidとは? •  GoogleとOHAが提供するモバイル端末向けのオープンソー スのプラットフォーム •  Linuxカーネルをベースにした独自OS •  主にApache2.0ライセンスなので複写・修正・再配布が自由 ü  カーネルなどの一部はGPLライセンス •  アプリケーション開発用に無償でSDK、NDKが提供 ü  リッチな開発環境と端末エミュレータ ü  既存ソフトウェア資産の再利用 •  ソースコードが公開されているのでプラットフォームのカスタ マイズが可能
  • 23. This  material  is  licensed  under  the  Crea1ve  Commons  License  BY-­‐NC-­‐SA  4.0.   23  23   Androidの主な機能 【プラットフォーム全般】 l リッチなユーザインタフェース l ブラウザによるWebサイトの閲覧 →ベースはオープンソースWebKitエンジン l 2D、3Dグラフィック →カスタム2Dグラフィックライブラリ、 OpenGL/ES l 軽量データベース →構造化されたデータ領域のためのSQLite3搭載 l 一般的なオーディオ、ビデオと静止画フォーマットをサポート →MPEG4、H.264、MP3、AAC、AMR、JPG、PNG、GIF、WebM l Dalvik VM(ダルビック バーチャルマシン) →JavaVMよりもモバイル端末などの低メモリ環境に最適化 l Bluetooth、EDGE、3G、WiFi、カメラ、GPS、コンパス、加速度計・・・ハード制御用API 【開発】 l リッチな開発環境(Eclipse、DDMSなど)と端末エミュレータ l 豊富で整ったアプリケーションフレームワークと拡張の自由 →コンポーネントの再利用と置き換えが可能
  • 24. This  material  is  licensed  under  the  Crea1ve  Commons  License  BY-­‐NC-­‐SA  4.0.   24  24   Androidの歴史 年月 できごと 2003年10月 Android社発足 2005年 8月 GoogleがAndroid社を買収 2007年11月 Open  Handset  Alliance  (OHA)が発足 Android  SDK  1.0  リリース 2008年10月 世界初のAndroid搭載スマートフォン 「T-­‐Mobile  G1」 発売 2009年 4月 Android  SDK  1.5r1  リリース 2009年 5月 Android  SDK  1.5r2  リリース 2009年 7月 NTTドコモより、日本国内初のAndroid携帯 「HT-­‐03A」発売 Android  SDK  1.5r3  発表
  • 25. This  material  is  licensed  under  the  Crea1ve  Commons  License  BY-­‐NC-­‐SA  4.0.   25  25   Androidの歴史 年月 できごと 2009年 9月 Android  SDK  1.6  発表 2009年10月 Android  SDK  2.0  発表 2010年 1月 Android  SDK  2.1  発表 2010年 5月 Android  SDK  2.2  発表 2010年 12月 Android  SDK  2.3  発表 2011年 2月 Android  SDK  3.0  発表 2011年 7  月 Android  SDK  3.2  発表 2011年 10月 Android  SDK  4.0 2011年 12月 Android  SDK  4.0.3   スマートフォン向け タブレット向け スマートフォン向けとタブ レット向けの融合
  • 26. This  material  is  licensed  under  the  Crea1ve  Commons  License  BY-­‐NC-­‐SA  4.0.   年月 できごと 2012年6月 Android  SDK  4.1  発表(Jelly  Bean) 2012年11月 Android  SDK  4.2  発表(Jelly  Bean) 2013年7月 Android  SDK  4.3  発表(Jelly  Bean) 2013年11月 Android  SDK  4.4  発表(KitKat) 2014年6月 Android  L(4.5?)  発表 26  26   Androidの歴史 スマートフォン向けとタブ レット向けの融合
  • 27. This  material  is  licensed  under  the  Crea1ve  Commons  License  BY-­‐NC-­‐SA  4.0.   27  27   Androidアプリケーションの動作環境 AndroidアプリケーションはDalvik VMという仮想マシンの上で動作する Androidランタイムの実行基盤としてAndroid用にカスタマイズ (電源管理、Binderなど)されたLinuxカーネルを採用している ソフトウェア(Androidプラットフォーム) アプリケーション Androidランタイム(コアライブラリ+Dalvik  VM)   Linuxカーネル ハードウェア アプリケーション
  • 28. This  material  is  licensed  under  the  Crea1ve  Commons  License  BY-­‐NC-­‐SA  4.0.   28  28   Androidのアーキテクチャ Linuxカーネル 2.6 / 3.x ディスプレイ ドライバ Bluetooth ドライバ カメラドライバ フラッシュメモリ ドライバ バインダ(IPC) ドライバ キーパッド ドライバ USBドライバ WiFiドライバ オーディオ ドライバ 電源管理 アプリケーション Home Contacts Phone Browser 自作アプリ ・・・ アプリケーションフレームワーク アクティビティ マネージャ ウィンドウ マネージャ コンテンツ プロバイダ ビューシステム 通知マネージャ パッケージ マネージャ 電話 マネージャ リソース マネージャ 位置 マネージャ ライブラリ サーフェス マネージャ メディア フレームワーク SQLite OpenGL | ES FreeType WebKit SGL SSL Libc Dalvik 仮想マシン コアライブラリ Androidランタイム XMPP サービス 自作 フレームワーク 自作ライブラリ 自作ドライバ HARDWARE ABSTRACTION LAYER Radio(RIL) WiFiGraphics Audio Camera ・・・
  • 29. This  material  is  licensed  under  the  Crea1ve  Commons  License  BY-­‐NC-­‐SA  4.0.   29  29   アプリケーション開発の手法 Linuxカーネル 2.6 / 3.x アプリケーション ライブラリ デバイスドライバ HAL Radio(RIL) WiFiGraphics Audio Camera ・・・ アプリケーション アプリケーション アプリケーション アプリケーションフレームワーク BIONIC Libc othread Libm Linker ・・・ 自前のライブラリ JNI JNI JNI OpenGLESWebkit OpenGLES OpenGLES dalvikVM ・・・
  • 30. This  material  is  licensed  under  the  Crea1ve  Commons  License  BY-­‐NC-­‐SA  4.0.   30  30   カーネルとネイティブライブラリ •  Linuxカーネル2.6がベース  (ただし4.0以降のカーネルはほぼ3.xベースに) –  Android用変更パッチ(電源管理、Binder、WakeLockなど) –  ハードウェアのドライバ類 –  システムデーモン –  GPLライセンス •  HAL (Hardware Abstraction Layer) –  Linuxのハードウェアドライバを抽象化しデバイスIO的な役割を果たす –  Androidのユーザランドとカーネルをライセンス的に分離 •  ライブラリ –  Bionic libc •  Unix系libcよりも高速でコンパクト(pthreadの実装) •  BSDライセンス –  C/C++で記述されたライブラリ •  OpenGL/ES、SQLite、Webkitなど
  • 31. This  material  is  licensed  under  the  Crea1ve  Commons  License  BY-­‐NC-­‐SA  4.0.   31  31   Androidランタイム • コアライブラリ • Android用のJavaのコアライブラリで基本的なJava APIを提供 • J2SEをベースにしているので開発用ホストPCにJDKが入っていればアプリケーションの 開発が可能 • 未サポートであるJ2SEのAPIもあるので注意 • Dalvik仮想マシン(Dalvik VM) • メモリの少ない環境でも複数のアプリケーションを同時実行できるように設計 • すべてのアプリケーションはDalvik VMのインスタンスとなって独自のプロセスとして動作 • JavaVM(スタックベース) ≠ DalvikVM(レジスタベース) • Apache2.0 • アプリケーションのビルド時にdxツールがclassから.dexファイルに変換(.dex≒.class/2) • Dalvik VMにおける実行ファイルはdexファイル Java  VM   Dalvik  VM .dex .jar .class 異なる
  • 32. This  material  is  licensed  under  the  Crea1ve  Commons  License  BY-­‐NC-­‐SA  4.0.   32  32   アプリケーション層 •  アプリケーションフレームワーク –  Androidアプリケーション作成のための拡張可能なJavaのコンポーネント類 項目 説明 アクティビティマネージャ アプリケーションのライフサイクルや画面の共通バックスタックを管理 ウィンドウマネージャ ウィンドウの配置や外観を管理するシステムソフトウェア コンテンツプロバイダ パッケージ間(異なるアプリケーション間)でデータ共有を行う手段を提供する ビューシステム UIの制御 通知マネージャ メッセージの到着、時間、アラームなどのイベント通知(ステータスバーやトースト など) パッケージマネージャ アプリのインストール、更新、削除などを管理 電話マネージャ 電話の状態や通話機能を管理 リソースマネージャ アプリで使用するリソースの管理 位置マネージャ GPSデバイスによる位置情報取得や更新などを実現、管理 XMPPサービス XMPP(IMのメッセージ交換やログイン状況の通知用通信プロトコル)のサービス を管理
  • 33. This  material  is  licensed  under  the  Crea1ve  Commons  License  BY-­‐NC-­‐SA  4.0.   33  33   アプリケーション層 •  アプリケーション –  Google製標準アプリケーション •  アラーム時計、Bluetooth、ブラウザ、電卓、カメラ、コンタクトリスト、 検索ボックス、電子メールクライアント、ギャラリー、3Dギャラリー、 インスタントメッセージ、ランチャー、音楽再生、 パッケージインストーラ、電話、システム設定、音声レコーダ、 スピーチレコーダー・・・など –  独自アプリケーションはこのレイヤに該当する
  • 34. This  material  is  licensed  under  the  Crea1ve  Commons  License  BY-­‐NC-­‐SA  4.0.   34  34   アプリケーション開発環境 項目 必要な環境 OS Windows XP (32-bit), Vista (32- or 64-bit), or Windows 7 (32- or 64-bit) Mac OS X 10.5.8以降(x86のみ) Linux(Ubuntu Linux, Lucid Lynxにてテスト済) Java JDK JDK 6(GingerbreadからKitKat) / JDK 7(Android L以降) Android開発ツール Android SDK テキストベース 開発環境 Apache Ant(1.8以降) l 開発用エミュレータが用意されている l エミュレータではセンサー等、一部利用できないものがある *必要なマシンスペックは http://developer.android.com/sdk/index.html
  • 35. This  material  is  licensed  under  the  Crea1ve  Commons  License  BY-­‐NC-­‐SA  4.0.   35  35   プラットフォーム開発環境 項目 Froyo(2.2)より古いAndroidのソースコード取得やビルドに必要な環境 ホストOS Mac OS X 10.5.8以降(x86のみ) 32bit_Linux(Ubuntu 8.04 以上)(64bitLinuxの場合は下表参照) 必要なツール Python2.4、 git1.5.4以上、 JDK5 git-core, gnupg, flex, bison, gperf, libsdl-dev, libesd0-dev, libwxgtk2.6-dev, build- essential, zip, curl, libncurses5-dev, zlib1g-dev, valgrind, libreadline5-dev, repo 項目 Gingerbread(2.3)以上のAndroidのソースコード取得やビルドに必要な環境 ホストOS 64bit_Linux(Ubuntu 10.04 以上) 必要なツール Python2.4、 git1.5.4以上、 JDK6 git-core gnupg flex bison gperf build-essential zip curl zlib1g-dev gcc-multilib g ++-multilib libc6-dev-i386 lib32ncurses5-dev ia32-libs x11proto-core-dev libx11-dev lib32readline5-dev lib32z-dev 項目 必要な環境(共通) スペック CPU:2G以上、 メモリ:2G以上 ハードディスク空き容量:80G以上(プラットフォームひとつあたり20G) ネットワーク常時接続 ソースコード入手先 Android Open Source Project (AOSP)
  • 36. This  material  is  licensed  under  the  Crea1ve  Commons  License  BY-­‐NC-­‐SA  4.0.   36  36   組込み開発とは 組込み機器のプラットフォーム開発はネイティブ言語で開発(gcc)を行う 【必要な作業】 1.  ホストPCにてクロス開発環境構築 –  ターゲットボードのチップのアーキテクトに適用したクロスコンパイル環境であること (ARM, x86, ・・・) 2.  ホストPCにてカーネル作成 3.  ターゲットボードに移植 –  (必要であれば)デバイスドライバ作成、組み込み 4.  ホストPCにてユーザランド作成 5.  ターゲットボードに移植、評価 【ターゲットボードに最低限必要なインタフェース】 –  ネットワークポート(LANなど) –  シリアルポート(RS232Cなど) –  JTAG (ICE接続などに使用)
  • 37. This  material  is  licensed  under  the  Crea1ve  Commons  License  BY-­‐NC-­‐SA  4.0.   37  37   Androidのクロス開発環境 ホストPC (X86) Ubuntu on VMWarePlayer Ubuntu on VirtualBox ターゲットボード(ARM) Pandaboard ES ソースコード取得 編集 コンパイル カーネルイメージ作成 ユーザランドのルートファイルシステム作成 実機へ転送 AOSP Androidソースコードツリー*2 repo & git Ubuntu 追加パッケージ *1 : コンパイラ(gcc)、プリプロセッサ & リンカ & アセンブラ(bin-utility)、 Cライブラリ、ダイナミックローダ などビルドに必要なツール一式 *2 : Linuxカーネル、ユーザランドのソースコード *3 : ボードに搭載しているハードウェアに依存するドライバやAndroidとの差異を吸収するパッチ、    ブートローダーなど デバッグ ボードベンダなど LAN or シリアル
  • 38. This  material  is  licensed  under  the  Crea1ve  Commons  License  BY-­‐NC-­‐SA  4.0.   38  38   本実習で使用するホストPC構成 ホストPC Windows 7/8/8.1 (64_bit ) VMWarePlayer ゲストOS Ubuntu ver. 14.04.1LTS 64_bit 版 http://www.vmware.com/jp/products/player/ http://www.ubuntulinux.jp/download/ja-remix VMWare Player入手先サイト Ubuntu 14.04.1 LTS イメージ(iso) 入手先サイト VirtualBox https://www.virtualbox.org/ VirtualBox入手先サイト
  • 39. This  material  is  licensed  under  the  Crea1ve  Commons  License  BY-­‐NC-­‐SA  4.0.   Ubuntu  on  VirtualBox 39   インストールウィザード に 必要な項目を入力して インストール開始 ディスクトップに VirtulBoxのショー トカットができるの でダブルクリック 「新規」ボタンを押 して仮想マシンの 設定を行う
  • 40. This  material  is  licensed  under  the  Crea1ve  Commons  License  BY-­‐NC-­‐SA  4.0.   Ubuntu  on  VirtualBox 40   名前にUbuntuと入れると タイプとバージョンが自動 設定される。異なる場合 は手動で変更 最低2GB。可能ならば 16GB。不足分はswapで 設定(Androidシステムの ビルド時間が長くなりま す)
  • 41. This  material  is  licensed  under  the  Crea1ve  Commons  License  BY-­‐NC-­‐SA  4.0.   Ubuntu  on  VirtualBox 41   デフォルトのVDIが最も早 い 速度を重視するため固定 サイズ。ディスクの空き容 量に注意。
  • 42. This  material  is  licensed  under  the  Crea1ve  Commons  License  BY-­‐NC-­‐SA  4.0.   Ubuntu  on  VirtualBox 42   swap、ソースプログラム などを展開し十分な容量 を確保するために256GB 確保 UbuntuのDVDイメージを 設定するために「設定」ボ タンをクリック ストレージ->コントローラ IDE->空を選択し、右の Diskのアイコンをクリック してDVDイメージファイル を選択
  • 43. This  material  is  licensed  under  the  Crea1ve  Commons  License  BY-­‐NC-­‐SA  4.0.   Ubuntu  on  VirtualBox 43   設定が完了したので「起 動」ボタンをクリック 「Ubuntuをインストール」 ボタンを押してインストー ル 「インストール中にアップ デート」および「サード パーティのソフトウェアを インストールする」の チェックをONにして「続け る」ボタンを押す。
  • 44. This  material  is  licensed  under  the  Crea1ve  Commons  License  BY-­‐NC-­‐SA  4.0.   Ubuntu  on  VirtualBox 44   「ディスクを削除して Ubuntuをインストール」を 選択し、「インストール」ボ タンをクリック 「続ける」ボタンをクリック 「続ける」ボタンをクリック
  • 45. This  material  is  licensed  under  the  Crea1ve  Commons  License  BY-­‐NC-­‐SA  4.0.   Ubuntu  on  VirtualBox 45   お好みで設定。テキストで は、ユーザ名:es、パス ワード:androidとしている。 また「自動ログインする」を 選択している。 しばらくするとインストール 完了 再起動後[デバイス]- [Guest AddtionsのCDイ メージを挿入」を実行する とWindowsと連携しやすい 機能が追加される。イン ストールしたらUbuntuを 再起動し、[デバイス]-[ク リップボードの共有]およ び[ドラッグ&ドロップ]を [双方向]に設定する
  • 46. This  material  is  licensed  under  the  Crea1ve  Commons  License  BY-­‐NC-­‐SA  4.0.   46  46   本実習のクロス開発環境の構築 $ sudo apt-get install git-core gnupg flex bison gperf build-essential zip curl zlib1g-dev libc6-dev lib32ncurses5-dev lib32z1 x11proto-core-dev libx11-dev lib32readline-gplv2-dev lib32z-dev libgl1-mesa-dev g++-multilib mingw32 tofrodos python-markdown libxml2-utils python-software-properties xsltproc libx11-dev:i386 $ cd ~/ $ wget http://www.reucon.com/cdn/java/jdk-6u45-linux-x64.bin $ chmod a+x jdk-6u45-linux-x64.bin $ ./jdk-6u45-linux-x64.bin ~/.bashrc に以下の3行を追加する。 export JAVA_HOME=~/jdk1.6.0_45 export PATH=$JAVA_HOME/bin:$PATH export ANDROID_JAVA_HOME=$JAVA_HOME 追加後、読み直す。 $ source ~/.bashrc 必要なツールのインストール JDK6のインストール ホストPCがUbuntu ver.14.0.4LTS (64_bit 版)の場合 カンペ   P02_01.txt、P02_02.txt参照
  • 47. This  material  is  licensed  under  the  Crea1ve  Commons  License  BY-­‐NC-­‐SA  4.0.   本実習のクロス開発環境の構築 •  JDKについて   – 作成するAndroidのプラットフォームに合わせて JDKを選択する   •  Android  L以降(?):  JDK  7(調査中)   •  GingerbreadからKitKatまで:JDK  6   •  CupcakeからFroyoまで:JDK  5 47   ※参考:https://source.android.com/source/initializing.html#installing-the-jdk
  • 48. This  material  is  licensed  under  the  Crea1ve  Commons  License  BY-­‐NC-­‐SA  4.0.   48  48   本実習のクロス開発環境の構築 /etc/udev/rules.d/51-android.rules を作成して、以下の内容を記述する。 ### OWNER="es"の部分は実在するユーザ名を記述すること ---------cut here------------------cut here------------------cut here--------- # adb protocol on panda (PandaBoard) SUBSYSTEM=="usb", ATTR{idVendor}=="0451", ATTR{idProduct}=="d101", MODE="0600", OWNER="es" # adb protocol on panda (PandaBoard ES) SUBSYSTEM=="usb", ATTR{idVendor}=="18d1", ATTR{idProduct}=="d002", MODE="0600", OWNER="es" # fastboot protocol on panda (PandaBoard) SUBSYSTEM=="usb", ATTR{idVendor}=="0451", ATTR{idProduct}=="d022", MODE="0600", OWNER="es" # usbboot protocol on panda (PandaBoard) SUBSYSTEM=="usb", ATTR{idVendor}=="0451", ATTR{idProduct}=="d00f", MODE="0600", OWNER="es" # usbboot protocol on panda (PandaBoard ES) SUBSYSTEM=="usb", ATTR{idVendor}=="0451", ATTR{idProduct}=="d010", MODE="0600", OWNER="es" ---------cut here------------------cut here------------------cut here--------- 追記後、次のコマンドを実行する。 $ sudo /etc/init.d/udev restart USB の設定 ※参照: https://source.android.com/source/initializing.html#configuring-usb-access カンペ   P02_03.txt参照
  • 49. This  material  is  licensed  under  the  Crea1ve  Commons  License  BY-­‐NC-­‐SA  4.0.   49  49   本実習のクロス開発環境の構築 ダウンロードサイト(Android Developers > SDK) http://developer.android.com/sdk/index.htmlにてLinux 64-bit版をダウンロード *proxy環境ではAndroid SDK and AVD Managerからダウンロードサイトに接続できま せん
  • 50. This  material  is  licensed  under  the  Crea1ve  Commons  License  BY-­‐NC-­‐SA  4.0.   50  50   本実習のクロス開発環境の構築 zip形式のアーカイブをダウンロードして、ホームディレクトリで以下の コマンドを実行して展開。ツールのアップデートを行う。androidコマン ドを引数なしで起動するとGUI画面が表示される。 *proxy環境ではAndroid SDK and AVD Managerからダウンロードサイトに接続できま せん カンペ   P02_04.txt参照 $ cd $ unzip ~/Downloads/adt-bundle-linux-x86_64-20140702.zip $ cd adt-bundle-linux-x86_64-20140702/sdk $ ls add-ons extras platform-tools sources temp build-tools platforms samples system-images tools $ cd tools $ ./android update sdk -u -a -f -t add-on,extra,platform,system- image,tool,platform-tool : Do you accept the license 'mips-android-sysimage-license-65b5afcc' [y/n]: y $
  • 51. This  material  is  licensed  under  the  Crea1ve  Commons  License  BY-­‐NC-­‐SA  4.0.   51  51   本実習のクロス開発環境の構築 ~/.bashrc に以下の2行を追加する。 export PATH=~/adt-bundle-linux-x86_64-20140702/sdk/platform-tools:$PATH export PATH=~/adt-bundle-linux-x86_64-20140702/sdk/tools:PATH 追加後、読み直す。 $ source ~/.bashrc Android SDK の設定 カンペ   P02_05.txt参照
  • 52. This  material  is  licensed  under  the  Crea1ve  Commons  License  BY-­‐NC-­‐SA  4.0.   52  52   本実習のクロス開発環境の構築 $ git config --global user.email "android" $ git config --global user.name "android" $ mkdir ~/bin $ curl http://commondatastorage.googleapis.com/git-repo-downloads/repo > ~/bin/repo $ chmod a+x ~/bin/repo ~/.bashrc に以下の1行を追加する。 export PATH=~/bin:$PATH 追加後、読み直す。 $ source ~/.bashrc git の設定 repoの取得と設定 カンペ   P02_06.txt、P02_07.txt参照
  • 53. This  material  is  licensed  under  the  Crea1ve  Commons  License  BY-­‐NC-­‐SA  4.0.   53  53   android  open  source  project   (AOSP) http://source.android.com/ Androidのソースコードはgitプロジェクト単位(リポジトリ)にTree構造となっている コミッターは個々のリポジトリをフォークして変更を加え、本Treeにコミットしている AOSPのkernel以外の全リポジトリは https://android.googlesource.com/platform/manifest で管理されている
  • 54. This  material  is  licensed  under  the  Crea1ve  Commons  License  BY-­‐NC-­‐SA  4.0.   54  54   Android  のバージョン対応表 Androidの指定バージョンのソースコードを取得する場合はAOSPのBuildNumbers で記載されているBranchを指定する https://source.android.com/source/build-numbers.html Build Tag Notes DMD64 android-1.6_r1.5 latest Donut version EPF21B android-2.1_r2.1p2 latest Eclair version FRK76C android-2.2.3_r2 latest Froyo version GWK74 android-2.3.7_r1 latest Gingerbread version, Nexus S 4G ITL41D android-4.0.1_r1 earliest IceCreamSandwich version, Galaxy Nexus ITL41D android-4.0.1_r1.1 Galaxy Nexus ITL41F android-4.0.1_r1.2 Galaxy Nexus ICL53F android-4.0.2_r1 Galaxy Nexus IML74K android-4.0.3_r1 Nexus S KRT16M android-4.4_r1 Nexus 5 (hammerhead) ※一部のみ掲載
  • 55. This  material  is  licensed  under  the  Crea1ve  Commons  License  BY-­‐NC-­‐SA  4.0.   55  55   Androidのソースコード管理 (Git) •  Gitとは –  分散型バージョン管理システム –  複数リポジトリ間での変更履歴のやり取りが可能 –  Linux kernelのソースコード管理に利用されている 【gitサーバにあるリポジトリのコピー】 $ git clone https://android.googlesource.com/platform/manifest + project path 例1:フレームワーク関連の最新のソースコードを取得する場合 例2:フレームワーク関連のKitKatのソースコードを取得する場合(Tag名を指定) $ git clone https://android.googlesource.com/platform/frameworks/base.git $ git clone https://android.googlesource.com/platform/frameworks/base.git –b android-4.4_r1.1
  • 56. This  material  is  licensed  under  the  Crea1ve  Commons  License  BY-­‐NC-­‐SA  4.0.   56  56   Androidのソースコード管理 (repo) •  repoとは –  Gitの複数リポジトリを一括で管理するためのツール 【gitサーバにあるkernel以外のすべての標準プロジェクトを一括 で取得】 $ repo init -u https://android.googlesource.com/platform/manifest + project path $ repo sync 例1:最新のソースコードを一括取得するためのリポジトリの作成する場合 例2:KitKatのソースコードを一括取得するためのリポジトリの作成する場合 $ repo init -u https://android.googlesource.com/platform/manifest $ repo init -u https://android.googlesource.com/platform/manifest -b android-4.4_r1.1
  • 57. This  material  is  licensed  under  the  Crea1ve  Commons  License  BY-­‐NC-­‐SA  4.0.   57  57   AOSPのソースコード取得 (インターネット経由) 例) android-4.4_r1のタグのついたAndroid4.4(KitKat)のコードを取得 上記 repo init コマンドでレポジトリの初期化を行うと.repoディレクトリを生成 manifest.xml@ (-> manifests/default.xml) にはrepo が管理する対象のプロジェクトが定義 manifest.xml にないプロジェクトの追加またはmanifest.xml からプロジェクトを外す場合 local_manifest.xml を作成することによってカスタム設定が可能 $ mkdir -p ~/mydroid/android $ cd ~/mydroid/android $ repo init -u https://android.googlesource.com/platform/manifest -b android-4.4_r1.1 $ repo sync <?xml version=“1.0”encoding=“UTF-8”?> <manifest> <remove-project name=“platform/frameworks/base” /> <project path=“frameworks/base” name=“platform/frameworks/base” revision=“android-2.2.3_r1”/> </manifest> パス名 プロジェクト名 指定のタグ名(任意) $ ls .repo msnifst.xml@ manifests/ manifests.git/ repo/ 削除 追加 カンペ   P02_08.txt参照
  • 58. This  material  is  licensed  under  the  Crea1ve  Commons  License  BY-­‐NC-­‐SA  4.0.   58  58   AOSPのソースコード取得 (ミラー経由) 例) AOSPのソースコードをミラーリングする 例) ミラーからandroid-4.4_r1のタグのついたAndroid4.4(KitKat)のコードを取得する ミラーは手動で更新しないと最新版にならないため、ミラー更新し、それからローカルを 更新。 $ mkdir -p /usr/local/aosp/mirror $ cd /usr/local/aosp/mirror $ repo init -u https://android.googlesource.com/mirror/manifest --mirror $ repo sync $ cd ~ $ mkdir -p mydroid/android $ cd mydroi/android $ repo init -u /usr/local/aosp/mirror/platform/manifest -b android-4.4_r1.1 $ repo sync $ cd /usr/local/aosp/mirror $ repo sync $ cd ~/mydroid/android $ repo sync カンペ   P02_09.txt参照
  • 59. This  material  is  licensed  under  the  Crea1ve  Commons  License  BY-­‐NC-­‐SA  4.0.   59  59   AOSPのソースコード取得 (Pandaboard  ES特有) Pandaboard ES用のグラフィックライブラリは別途バイナリをダウンロードが必要 参照:https://developers.google.com/android/nexus/drivers Android 4.3以降、Pandaboard ES用のDevice Treeがないためパッチを適用。 ※sola氏のhttp://blog.sola-dolphin-1.net/archives/4575367.htmlより引用 $ cd ~/mydroid/android $ git clone https://github.com/sola-dolphin1/sola_device_ti_panda.git -b kitkat device/ti/panda $ cd ~/mydroid/android $ wget https://dl.google.com/dl/android/aosp/imgtec-panda-20130603-539d1ac3.tgz $ ./extract-imgtec-panda.sh READMEファイルが表示されるので最後まで読んだ後に、"I ACCEPT"と入力してENTERキーを押す。 カンペ   P02_10.txt参照
  • 60. This  material  is  licensed  under  the  Crea1ve  Commons  License  BY-­‐NC-­‐SA  4.0.   Android  4.4のソースコードツリー ディレクトリ名 概要 abi cxxapiなど art Android4.4(KitKat)で導入された仮想マシン   bionic Android用に開発されたCライブラリ bootable ブートローダーリファレンスコード build ビルドシステム cts テストスイート dalvik 仮想マシンDalvik   developers 開発者向けサンプルコード development 開発ツール、SDK、サンプルコード device デバイス固有のMakefileなど docs Androidを使用する端末に対するCDD(Compa1bility  Define   Document)などのドキュメント external AOSP以外の外部オープンソースプロジェクト 60  
  • 61. This  material  is  licensed  under  the  Crea1ve  Commons  License  BY-­‐NC-­‐SA  4.0.   Android  4.4のソースコードツリー ディレクトリ名 概要 frameworks Androidアプリケーションフレームワーク hardware ハードウェアライブラリとRadio  Interface  Layer   libcore アプリ実行に使用するJSON、XMLパーサなど libna1vehelper Androidのクラスライブラリを支援するソースコード ndk Android  NDK packages 標準的なAndroidアプリケーションとサービス pdk メーカ向けのプレビュー版   prebuilts ビルドに必要な各種バイナリファイル sdk Android  SDKやエミュレータなど system fastboot、core、低レベルデバッガなど tools gradleやfat32llibなど 61  
  • 62. This  material  is  licensed  under  the  Crea1ve  Commons  License  BY-­‐NC-­‐SA  4.0.   62  62   ソースコード詳細(packages) •  packages  -> アプリケーションレイヤ –  apps : Android標準搭載アプリケーションのソースコード –  experimental : 製品には入らないテストツール –  inputmethods : 入力用メソッドのソースコードが格納 –  providers : Android標準搭載サービスのソースコード –  screensavers:スクリーンセーバー –  services:Telephoneサービス –  wallpapers : ライブ壁紙のソースコード
  • 63. This  material  is  licensed  under  the  Crea1ve  Commons  License  BY-­‐NC-­‐SA  4.0.   63  63   ソースコード詳細 (packages/frameworks) •  frameworks -> フレームワークレイヤ –  base •  Androidフレームワークのソースコードと各種サービスのソースコ ード •  base/core : Androidランタイムのコアライブラリ •  base/libs : 外部プロジェクトのライブラリ –  opt : Google提供ライブラリ、絵文字ライブラリのソースコ ード •  dalvik -> Androidランタイム –  Dalvik仮想マシン本体の関連クラスライブラリ •  art -> 次世代Androidランタイム(KitKat以降) –  ART仮想マシン本体の関連クラスライブラリ
  • 64. This  material  is  licensed  under  the  Crea1ve  Commons  License  BY-­‐NC-­‐SA  4.0.   64  64   ソースコード詳細(bionic/external) •  external -> ライブラリレイヤ –  外部プロジェクトのライブラリ •  bionic -> ライブラリレイヤ –  BSDライセンス –  POSIX標準Cライブラリのすべての機能は実装していない –  未サポート機能 •  C++例外 •  pthreadキャンセル •  pthread_coreのinitメソッドからスローされたC++例外 •  pthread_coreのfork()するinitメソッド •  ロケールとワイルドキャラクタ(UnicodeライブラリICUで代替) •  ユーザアカウント関連のメソッド(getpwdなど)
  • 65. This  material  is  licensed  under  the  Crea1ve  Commons  License  BY-­‐NC-­‐SA  4.0.   65  65   ソースコード詳細(hardware) •  hardware -> HAL –  broadcom : Broadcomの無線ドライバ –  libhardware :外部モジュールで構成されたデバイスドライバ 制御用ラッパーライブラリ (外部モジュールの配置場所は/system/libs/hw配下) –  libhardware_legacy : スタティックリンクされる定義で構成さ れたデバイスドライバ制御用ラッパーライブラリ (WiFi、バイブレーション、電源、GPSなど) –  qcom : QualcommのGPSドライバ –  ril : Radio Interface Layer テレフォニーサービスのベースバンドIF –  ti : TIの無線ドライバ
  • 66. This  material  is  licensed  under  the  Crea1ve  Commons  License  BY-­‐NC-­‐SA  4.0.   66  66   ソースコード詳細(system) • system – core : 必要最小限の実行環境、基本的なコマンド類 – extras : デバッグ、テストツールが格納 – media : オーディオおよびカメラ制御用 – netd : ネットワーク設定制御用デーモン – seculity : Keystore関連のプログラム(アプリケーションの署 名) – vold : ボリュームデーモン、各種メディアのマウント
  • 67. This  material  is  licensed  under  the  Crea1ve  Commons  License  BY-­‐NC-­‐SA  4.0.   67  67   ソースコード詳細(開発環境関連) •  build –  ビルドシステム(Makefile、スクリプトなど)を格納 –  Androidソースコードのルートでmakeするとbuild/core/main.mkからmake開始 •  prebuild –  各ターゲット用、ホストOS用のビルドツールのバイナリファイル(クロスコンパイラ) •  device –  機器に関するbuild関連の情報(Makefile)、CPUやボードに依存するソフト(スクリプト)や ドライバなど •  ndk –  Native Development Kit関連のソフト、gdbなどのツール •  sdk –  Android SDKで使用されるエミュレータソフトやライブラリ •  bootable –  bootloader : ブートローダーのソースコードが格納 •  bootloader/legacy/usbloader/main.cがブートローダーのスタート関数 –  diskinstaller : x86系PCにAndroidをインストールする際に使用 –  recovery : Android system recovery utilityのソースコードが格納
  • 68. This  material  is  licensed  under  the  Crea1ve  Commons  License  BY-­‐NC-­‐SA  4.0.   68  68   ソースコード詳細(開発環境関連) •  cts –  互換性テストスイーツ、デバイスの互換性をテストするためのツール など –  Android認証テスト –  Android Marketなどを使用できるようにするにはGoogleの認証が必要 –  CTSが通らなければAndroid端末として認証されない(かなり厳格)
  • 69. This  material  is  licensed  under  the  Crea1ve  Commons  License  BY-­‐NC-­‐SA  4.0.   69  69   Androidのエミュレータと実機 ARM仮想マシン (QEMU) Dalvik VM Javaプログラム PC Linux ARM版 ARM実機マシン Dalvik VM Javaプログラム Linux ARM版 Androidエミュレータ Android実機マシン プラットフォームが入れ替わるだけで実はエミュレータと実機は同じ ARMのエミュレートをしているのはQEMUエンジン
  • 70. This  material  is  licensed  under  the  Crea1ve  Commons  License  BY-­‐NC-­‐SA  4.0.   70  70   Androidの起動シーケンス メモリの初期化、U-Bootの読み込みと実行 U-Boot 
 起動パラメータの設定 CPU初期化 ハードウェアのチェック, ドライバの読みこみ 起動用ファイルがある領域の マウント x-loader(MLO) U-Boot(u-Boot.img) カーネルの起動 (uInitrd,uImage) /init Home画面 Power ON or Reboot /init.rc 基本設定  ・ネットワーク  ・キーボード  ・デバイス初期化 サービスの起動 kernelの起動パラメータ設定時 必ずinit=/initを指定すること デフォルトの設定ではカーネルは /sbin/init、/etc/init、/bin/init、/bin/sh を探すため正常に起動できない
  • 71. This  material  is  licensed  under  the  Crea1ve  Commons  License  BY-­‐NC-­‐SA  4.0.   Pandaboard  ESのディスク イメージ •  Pandaboard  ESで使用するシステム用SDカードは 、以下に示すパーティションを作成しなければなら ない。 –  hbp://elinux.org/Panda_How_to_MLO_%26_u-­‐boot   •  特にboot領域はfdiskコマンドに特殊なパラ メータを渡す必要がある(上記URL参照)   71   パーティション名 種別 boot VFAT system ext4 cache ext4 userdata ext4
  • 72. This  material  is  licensed  under  the  Crea1ve  Commons  License  BY-­‐NC-­‐SA  4.0.   Pandaboard  ESの起動シーケンス •  Pandaboard  ESのSoC内部のブートROM実行   •  ブートROMがx-­‐loader(MLO)を検索   •  ブートROMがx-­‐loaderをSoC内部のSRAMに読み込み、実行   •  x-­‐loaderがメインRAM(DRAM)を初期化   •  x-­‐loaderがU-­‐Boot(u-­‐boot.img)をメインRAMに読み込み、実行   •  U-­‐Bootがブートスクリプト(boot.scr)を読み込む   •  U-­‐BootがLinuxカーネル(uImage)を読み込み、実行   •  LinuxカーネルがSystem、Cache、Userdataなどのファイルシ ステムをマウント   •  ブートパラメータ(boot.scrにより指定)に従って/initを実行   •  /initが/init.rcスクリプトを実行   72  
  • 73. This  material  is  licensed  under  the  Crea1ve  Commons  License  BY-­‐NC-­‐SA  4.0.   73  73   Androidのinit int main(int argc, char **argv) { for(;;){ } } /dev、/proc、/sysをマウント device_fd property_fd signal_fd keychord_fd ブート処理 起動時に一度だけ実行される デーモン処理 システムが動作している限り 繰り返し実行される ファイルディスクリプタの 監視 /init.rc をパースして実行 - action_list作成 - service_list作成 /init.<hardware名>.rc をパースして実行 - action_list作成 - service_list作成 /system/core/init/init.c init
  • 74. This  material  is  licensed  under  the  Crea1ve  Commons  License  BY-­‐NC-­‐SA  4.0.   74  74   Androidのinit •  initの起点 –  /system/core/init/init.c の main関数 •  init.rc –  Android Init Languageで書かれた起動用スクリプト –  Action、Command、Service、Optionで構成 –  /system/core/init/readme.txt で説明 ACTION部 on <target> <command> <command> : SERVICE部 service <name> <path> [argument]* <option> <option> :
  • 75. This  material  is  licensed  under  the  Crea1ve  Commons  License  BY-­‐NC-­‐SA  4.0.   75  75   Androidのinit(デーモン処理) •  ファイルディスクリプタ –  device_fd •  カーネルからデバイスの状態変化通知を受けて/dev以下のデバ イスの生成と削除を行う。 •  生成するデバイスファイルのmode、uid、gidはdevices.cの構造体か init.rcのdeviceコマンドで指定可能 –  property_fd •  システムプロパティの書き込み処理 –  signal_recv_fd •  子プロセスが終了したときにsignalを発生するのでそれを受けて後 処理を行う –  keychord_fd •  あらかじめ登録した複数のキーの入力組み合わせを監視しそれ に対応するserviceを起動する
  • 76. This  material  is  licensed  under  the  Crea1ve  Commons  License  BY-­‐NC-­‐SA  4.0.   76  76   data dev proc sys sbin system init init.omap4pandaboard.rc init.chipsee.rc init.rc default.prop init.goldfish.rc initlogo.rle キャッシュ、追加パッケージなど格納ディレクトリ(R/ W) デバイスファイル格納ディレクトリ Linux設定ファイル格納ディレクトリ システムファイル格納ディレクトリ adbd実行ファイル格納ディレクトリ 次頁参照 起動処理実行ファイル initが実行するターゲットボード固有起動用シェルスク リプト initが実行するAndroid固有起動用シェルスクリプト Androidデフォルトプロパティ エミュレータ起動用シェルスクリプト 起動時のロゴの画像ファイル (RGB888のRAW形式をRLE形式に変換した画像 ) root / Androidのルートファイルシステム RLE:連長圧縮(ランレングス圧縮、Run Length Encoding)
  • 77. This  material  is  licensed  under  the  Crea1ve  Commons  License  BY-­‐NC-­‐SA  4.0.   77  77   app bin etc fonts framework lib usr xbin build.prop プリインストールのアプリケーション ファイル(.apk) 各種一般的なLinuxコマンド 設定用シェルスクリプトなど フォントファイル(.ttf) javaのandroidのライブラリ(.jar) ネイティブライブラリ(.so) キー設定ファイルなど root用のコマンドなど Androidデフォルトプロパティ /system/ Androidのルートファイルシステム
  • 78. This  material  is  licensed  under  the  Crea1ve  Commons  License  BY-­‐NC-­‐SA  4.0.   78  78   1章と2章のまとめと次回予告 以上で一般的なLinuxの概要とAndroidの概要に ついて学びました 次章からは本実習で使用するターゲットボードの 理解とAndroidを動作させる方法について学びます
  • 79. This  material  is  licensed  under  the  Crea1ve  Commons  License  BY-­‐NC-­‐SA  4.0.   79  79   メモ
  • 80. This  material  is  licensed  under  the  Crea1ve  Commons  License  BY-­‐NC-­‐SA  4.0.   80  80   メモ
  • 81. This  material  is  licensed  under  the  Crea1ve  Commons  License  BY-­‐NC-­‐SA  4.0.   81  81   第3章    ターゲットのボード
  • 82. This  material  is  licensed  under  the  Crea1ve  Commons  License  BY-­‐NC-­‐SA  4.0.   82  82   3章の概要 •  代表的なターゲットボード •  Pandaboard ESについて
  • 83. This  material  is  licensed  under  the  Crea1ve  Commons  License  BY-­‐NC-­‐SA  4.0.   83  83   各種ターゲットボード ボード名 CPU メモリ 画面 通信 I/F ストレージ カメラ オーディオ Armadillo-440 液晶モデル開発 セット Freescale i.MX257 400MHz (ARM9) 32MB (FLASH NOR) 128MB (LPDDR SDRAM) 4.3イ ンチタ ッチ パネル Eth×1 シリアル、USB microSD - オーディオ入 出力 Armadillo-500fx 液晶モデル開発 セット Freescale i.MX31 532MHz (ARM11) 32MB(FLASH NOR) 128MB(DDR SDRAM) 1G(USBSSD) 5.7イ ンチタ ッチ パネル Eth×1 シリアル、 USB、操作ボタ ン SD/MMC +microSD - オーディオ入 出力 Armadillo-800EVA 評価キット ルネサス [R-Mobile A1]  800MHz 2コア ARM Cortex-A9 512MB (DDR SDRAM) 8G(eMMC) 5イン チタッ チパネ ル (静 電式) Eth×1 WLAN シリアル USB HOST/ OTG HDMI SD/MMC +microSD CMOSカ メラモジ ュール オーディオ入 出力 BeagleBoard TI OMAP3530 600MHz (ARM11) 256MB NAND DDR2 RAM - - シリアル、USB SD/MMC - オーディオ入 出力 BeagleBoard-xM TI DM3730 1.0GHz (ARM Cortex-A8) 512MB NAND DDR2 RAM - Eth×1 シリアル、USB microSD 拡張端子 オーディオ入 出力 PandaBoard TI OMAP4430 1GHz 2コア ARM Cortex-A9 1GB DDR2 RAM - Eth×1 BT2.1+EDR WLAN シリアル USB HOST/ OTG HDMI、DIV-D SD/MMC 拡張端子 オーディオ入出 力 PandaBoard-ES TI OMAP4460  1.2GHz 2コア ARM Cortex-A9 1GB DDR2 RAM - Eth×1 BT2.1+EDR WLAN シリアル USB HOST/ OTG HDMI、DIV-D SD/MMC 拡張端子 オーディオ入出 力
  • 84. This  material  is  licensed  under  the  Crea1ve  Commons  License  BY-­‐NC-­‐SA  4.0.   Pandaboard  ES 84   プロセッサ TI OMAP4460 CPUコア ARM Cortex-A9 CPUコアクロック 1.2GHz 2コア メモリ 8Gb/1GB(low-power DDR2) USB OTGx1、USB2.0×4(High Speed/FullSpeed。2つは 実装済み。残り2つは拡張バス) SD SDスロット シリアルポート RS232C オーディオ TWL6040(PDM, I2C) 画像出力 HDMIおよびDVI-D。LCD接続用の拡張バス有 ネットワーク LANおよびWi-Fi、Bluetooth
  • 85. This  material  is  licensed  under  the  Crea1ve  Commons  License  BY-­‐NC-­‐SA  4.0.   Pandaboard  ES 85   http://pandaboard.org/sites/default/files/board_reference/ES/Panda_Board_Spec_DOC-21054_REV0_1.pdf 15ページより引用
  • 86. This  material  is  licensed  under  the  Crea1ve  Commons  License  BY-­‐NC-­‐SA  4.0.   Pandaboard  ES 86   http://pandaboard.org/sites/default/files/board_reference/ES/Panda_Board_Spec_DOC-21054_REV0_1.pdf 16ページより引用
  • 87. This  material  is  licensed  under  the  Crea1ve  Commons  License  BY-­‐NC-­‐SA  4.0.   boot領域 Pandaboard  ES 87   RomCode X-­‐Loader(MLO) U-­‐Boot(u-­‐Boot.img) Kernel(uImage,  uInitrd) System領域 /init SRAMに取り込み メインメモリに取り込み
  • 88. This  material  is  licensed  under  the  Crea1ve  Commons  License  BY-­‐NC-­‐SA  4.0.   88  88   メモ
  • 89. This  material  is  licensed  under  the  Crea1ve  Commons  License  BY-­‐NC-­‐SA  4.0.   89  89   第4章  実機でAndroidを動かす
  • 90. This  material  is  licensed  under  the  Crea1ve  Commons  License  BY-­‐NC-­‐SA  4.0.   90  90   4章の概要 •  目指すシステム •  Androidソースコード取得 •  Androidカーネルイメージ作成 •  Androidユーザランドのファイルシステム作成 •  Androidユーザランドのファイルシステム構成 •  Android起動用microSDの準備とAndroidカーネルの準備 •  Android起動 •  デバッグ環境の構築 –  Android SDK のインストール –  ネットワーク設定 –  ddms –  adbコマンドとadb shellコマンド
  • 91. This  material  is  licensed  under  the  Crea1ve  Commons  License  BY-­‐NC-­‐SA  4.0.   91  91   本章で目指すシステム バーコードリーダー microSD Android rootfs Linaro版AndroidをPandaboard ESで 起動させる
  • 92. This  material  is  licensed  under  the  Crea1ve  Commons  License  BY-­‐NC-­‐SA  4.0.   92   Linuxコマンドの復習 ●UbuntuのターミナルのシェルではTabキーでディレクトリ名やファイル名の補完ができます ●ホームディレクトリについて 本実習の開発環境におけるユーザ(es)のホームディレクトリは以下のディレクトリです /home/es ●Linuxではホームディレクトリのことを【 ~/ 】で簡略化して表現することができます。 <使用例> ホームディレクトリにあるworkというディレクトリに移動したい場合 cd /home/es/work   または cd ~/work ●ワイルドカード「*」 Aというディレクトリ内にあるすべてのjavaのソースファイルをまとめて指定したいときなど「*」を利用 して 以下のように指定できます A/*.java
  • 93. This  material  is  licensed  under  the  Crea1ve  Commons  License  BY-­‐NC-­‐SA  4.0.   93   Linuxコマンドの復習 pwd 現在のディレクトリパスを表示 cd ディレクトリ間移動 cd ../ 一つ前のディレクトリに移動 ls –la カレントディレクトリのファイルを一覧表 示 -l : ファイルの詳細も示す -a : .ファイル(隠しファイル)も表示 cp A B ファイルのコピー A:コピー元ファイル名 B:コピー先ファイル名 mv A B ファイルの移動、ファイル名の変更 A:元ファイルファイル名 B;移動先ファイル名 rm A ファイル、ディレクトリの削除 -r –R :ディレクトリ内の削除 -f :警告メッセージを表示しない -d:ディレクトリごと削除(スーパーユーザのみ) mkdir A ディレクトリの生成 -p:指定したディレクトリをサブディレクトリごと作成する。 ツリー状のディレクトリも作成可能 chmod モード A パーミッションの変更 Aというファイルをモードで指定したパーミッションに変更 モード:777(全ユーザにrwxの権限)やa+x(全ユーザ に実行権限) chown usr01 A chown usr01:g1 A ファイル所有者の変更 Aの所有者をuser01に変更 Aの所有者をuser01、所属グループg1に変更 -R :ディレクトリとその中野ファイルの所有者を変更 fdisk パーティションの作成、削除、変更 mkfs ファイルシステムの作成(フォーマット) -t fstype 作成するファイル・システムを指定する
  • 94. This  material  is  licensed  under  the  Crea1ve  Commons  License  BY-­‐NC-­‐SA  4.0.   94   Linuxコマンドの復習 mount A B ファイルシステムのマウント AをBにマウントする umount B ファイルシステムのアンマウント Bをアンマウントする ps 実行中プロセスの情報表示 top プロセスの稼動状況などのリアルタイム表 示 env 環境変数の表示 export 環境変数の設定 export <環境変数名>=<パス> exit 現在のユーザのログアウト reboot システムの再起動 sudo 別ユーザでコマンド実行 cat テキストファイルの内容を閲覧、ファイルの 連結 less ファイルの内容をページ単位で表示 gzip A gzファイルに圧縮 Aを圧縮する -d:圧縮ファイルを展開する tar オプショ ン A.tar (/A) アーカイブの作成、展開やtarファイルの圧 縮、解凍 tar cvf A.tar /A:/Aディレクトリ以下をA.tarという名前でアーカイ ブする tar xvf A.tar:A.tarというアーカイブをすべて展開する(処理経過 表示) ftp コンピュータ間のファイルの送受信 ftp 192.168.1.11 ping コンピュータ間の接続状態のテスト ping 192.168.1.11
  • 95. This  material  is  licensed  under  the  Crea1ve  Commons  License  BY-­‐NC-­‐SA  4.0.   Prebuild版で動作確認 95   $ cd ~/Chipsee_Android $ sudo su <= ファイル展開前に必ずスーパーユーザになること # tar zxvf prebuilt-panda-hd-20130520.tar.gz # cd prebuilt-panda-hd-20130520 <<< SDカードをVirtualBox側につなげる >>> # demsg <= SDカードのデバイスファイル名を確認( /dev/sdX ) : [ 3082.999834] sdb: sdb1 sdb2 sdb3 sdb4 < sdb5 sdb6 > <<< 表示例 >>> <<< ここでは /dev/sdb の時の例を示す >>> # ./mksdcard-chipsee-ics.sh /dev/sdb <<< 数分間待ち合わせ >>> # exit $ 実 習 カンペ   P04_01.txt参照
  • 96. This  material  is  licensed  under  the  Crea1ve  Commons  License  BY-­‐NC-­‐SA  4.0.   96  96   Linuxカーネルのコンパイルオプション設定 ■Linuxカーネルのコンパイルオプション設定とは ①ある機能をコンパイル「する/しない」の設定     →カーネルのオプション設定項目は膨大 ②機能をコンパイルする上でどんな形でコンパイルするかの設定     →機能を静的にカーネルのバイナリに組み込むか     →機能をモジュールとしてコンパイルするのか ■コンパイル設定方法 ・GUI設定ツールを使用して設定を行う   →$make menuconfig ・設定用ファイルを用意してmakeコマンドで設定を行う   →$make <ターゲットのハード名>_<*>_defconfig ■設定内容はmenuconfig終了後「.config」ファイルに収められる
  • 97. This  material  is  licensed  under  the  Crea1ve  Commons  License  BY-­‐NC-­‐SA  4.0.   97  97   KconfigとMakefile ■Linuxカーネルのコンパイルオプション設定で設定できるオプ ション名は「Kconfig」というファイルで設定されている ■ハードウェアのドライバのソースコードが収まっているディレク トリには「Kconfig」と「Makefile」が存在する ■新しいハードウェアを追加するたびにこのKconfigファイルに オプション名を追加し、Makefileにはそのオプションに関係のあ るソースコード(オブジェクトファイル)の依存関係の設定を行う
  • 98. This  material  is  licensed  under  the  Crea1ve  Commons  License  BY-­‐NC-­‐SA  4.0.   98  98   KconfigとMakefile •  具体例 •  USBメモリの機能を追加するためのパラメータ(オプション名)とそれに関連するドライバ のソースコードを探す方法。USBメモリはストレージ設備(USB Mass Storage)なので drivers/usb/ storage/ディレクトリ内のKconfigを調べる。 config USB_STORAGE_DATAFAB bool "Datafab Compact Flash Reader support" depends on USB_STORAGE help Support for certain Datafab CompactFlash readers. Datafab has a web page at <http://www.datafabusa.com/>. config USB_STORAGE_SDDR55 bool "SanDisk SDDR-55 SmartMedia support" depends on USB_STORAGE help Say Y here to include additional code to support the       Sandisk SDDR-55 SmartMedia reader in the USB Mass Storage driver. config USB_STORAGE tristate "USB Mass Storage support" depends on USB && SCSI ---help--- Say Y here if you want to connect     USB mass storage devices to your computer's USB port. This is the driver you need for USB floppy drives, USB hard disks, USB tape drives,     USB CD-ROMs, USB flash devices, and memory sticks, along with similar devices. This driver may also be used for some cameras and card readers. This option depends on 'SCSI' support being enabled, but you probably also need 'SCSI device support: SCSI disk support' (BLK_DEV_SD) for most USB storage devices. To compile this driver as a module, choose M here: the module will be called usb-storage. ⇒Datafab社製の製品でコンパクトフラッシュリーダーに関連する 機器 ⇒SanDisk社製の製品でスマートメディアカードに関連する機器 ←USBメモリの機能のオプション名
  • 99. This  material  is  licensed  under  the  Crea1ve  Commons  License  BY-­‐NC-­‐SA  4.0.   99  99   KconfigとMakefile 次にMakefileを見てみます # Makefile for the USB Mass Storage device drivers. 
 # 15 Aug 2000, Christoph Hellwig 
 # Rewritten to use lists instead of if-statements. 
 #   
 EXTRA_CFLAGS    := -Idrivers/scsi 
 
 obj-$(CONFIG_USB_STORAGE)    += usb-storage.o 
  
 usb-storage-y := scsiglue.o protocol.o transport.o usb.o usb-storage-y += initializers.o sierra_ms.o option_ms.o usb-storage-$(CONFIG_USB_STORAGE_DEBUG) += debug.o ifeq ($(CONFIG_USB_LIBUSUAL),) usb-storage-y += usual-tables.o else obj-$(CONFIG_USB) += usb-libusual.o usb-libusual-y := libusual.o usual-tables.o endif ←このオプションに対するモジュール ←scsiglue.c、protocol.c、 transport.c、usb.c、initializers.c など及びこれらと同名のヘッダ ファイルがモジュールの実体で ある。
  • 100. This  material  is  licensed  under  the  Crea1ve  Commons  License  BY-­‐NC-­‐SA  4.0.   100  100   「.config」ファイルについて # # Automatically generated make config: don’t edit # : # : CONFIG_64BIT=y #CONFIG_X86_32 is not set CONFIG_X86_64BIT=y CONFIG_X86=y ・・・ .config 値 意味 =y この項目に対応する機能は静的にカーネルに組込まれる =m この項目に対応する機能は、モジュールとしてコンパイルされる。 機能の中にはモジュールとしてコンパイルできないものがある。そ の場合対応する設定項目がこの値をとることはない。 # CONFIG_* is not set この項目に対応する機能はコンパイルされない。コメントアウト。 n カーネルをビルドするとこのファイルの設定値でカーネルが作られる n .configを直接手で編集してはいけない n ある機能が他の機能に依存している可能性がある n 機能の依存関係はKconfigが把握している
  • 101. This  material  is  licensed  under  the  Crea1ve  Commons  License  BY-­‐NC-­‐SA  4.0.   101  101   「.config」の新規作成 ・「.config」がまだ存在しない場合   →$make menuconfig → <Exit>   →「.config」が生成   →Kconfigにおいてdefault指定された機能のみ「.config」に適用
  • 102. This  material  is  licensed  under  the  Crea1ve  Commons  License  BY-­‐NC-­‐SA  4.0.   102  102   「.config」の更新 ・「.config」がすでに存在する場合   →ソースツリーのルートに配置   →$make oldconfig 新しく追加された設定項目について1つ1つ設定するか確認される       (とりあえずすべてリターンでデフォルトを適用)   →「.config」が再生成   →$make menuconfigでカスタム設定→<Exit>   →「.config」更新
  • 103. This  material  is  licensed  under  the  Crea1ve  Commons  License  BY-­‐NC-­‐SA  4.0.   103  103   アーキテクチャ毎の「.config」設定ファイル ・アーキテクチャ毎の「.config」の設定ファイルを作成する →$make defconfig →アーキテクチャ毎のデフォルト設定に基づいた「.config」の設定ファイルが生成 →生成される場所   <linuxのソース>/arch/<arch>/configs/ <ターゲットのハード名>_<*>_defconfig
  • 104. This  material  is  licensed  under  the  Crea1ve  Commons  License  BY-­‐NC-­‐SA  4.0.   104   $ cd ~/Chipsee_Android/Source $ tar zxvf kernel-ics-chipsee-panda-20130520.tar.gz $ less kernel-ics-chipsee-panda-20130520/arch/arm/configs/panda_chipsee_defconfig 104   panda_chipsee_defconfig 下記のファイルを開いて確認しなさい このファイルはカーネルのコンフィギュレーションの設定値(ターゲットボードのハードウェ アおよびAndroidに特化した設定)が記載されたファイルである。 makeコマンドでこのファイルを指定することによってカーネルオプションとして.configに反 映されます : # # Android # CONFIG_ANDROID=y CONFIG_ANDROID_BINDER_IPC=y CONFIG_ANDROID_LOGGER=y # CONFIG_ANDROID_RAM_CONSOLE is not set CONFIG_ANDROID_TIMED_OUTPUT=y CONFIG_ANDROID_TIMED_GPIO=y CONFIG_ANDROID_LOW_MEMORY_KILLER=y : 実 習 panda_chipsee_defconfigの一部抜粋 カンペ   P04_02.txt参照
  • 105. This  material  is  licensed  under  the  Crea1ve  Commons  License  BY-­‐NC-­‐SA  4.0.   クロスコンパイラ •  x86上のLinuxからARM用の実行モジュール を作成するためのコンパイラ   •  予めチップメーカが配布していることが多い   •  ここでは以下のクロスコンパイラを使用する   105   $ wget https://sourcery.mentor.com/public/gnu_toolchain/arm-none-linux-gnueabi/ arm-2010q1-202-arm-none-linux-gnueabi-i686-pc-linux-gnu.tar.bz2 <= 実際には一行で記述 $ sudo tar jxvf arm-2010q1-202-arm-none-linux-gnueabi-i686-pc-linux-gnu.tar.bz2 -C /usr/local/ $ sudo apt-get install uboot-mkimage 参 考
  • 106. This  material  is  licensed  under  the  Crea1ve  Commons  License  BY-­‐NC-­‐SA  4.0.   106  106   makeコマンド(クロスコンパイル)   変数 意味 ARCH ターゲットアーキテクチャ CROSS_COMPILE クロスコンパイラのプレフィックスを指定 クロスコンパイルに必要な変数 $ export PATH=/usr/local/arm-2010q1/bin:$PATH <= パスを設定 $ export CROSS_COMPILE=arm-none-linux-gnueabi- $ export ARCH=arm $ cd ~/Chipsee_Android/Source/kernel-ics-chipsee-panda-20130520 $ make distclean <= 初期状態に戻す $ make panda_chipsee_defconfig <= Pandaboard用のコンフィグレーションを行う 実 習 カンペ   P04_03.txt参照
  • 107. This  material  is  licensed  under  the  Crea1ve  Commons  License  BY-­‐NC-­‐SA  4.0.   107  107   menuconfigの操作方法 $ make menuconfig キー 動作 ↑ 項目の選択カーソルを上に移動 ↓ 項目の選択カーソルを下に移動 <TAB> 、← 、→ 動作メニュー(Select/Exit/Help) を切り替え <Enter> 選択されている動作メニューに 応じて動作を行う y 項目を<*>(有効:静的組込み) n 項目を<>無効にする m 項目を<M>(有効:モジュールと してコンパイルする) <SPACE> 項目を<M>/<*>/<>のトグルで切 り替える <ESC><ESC> 上の階層に戻る(<Exit>と同じ) ? 選択されている項目に関するヘ ルプを表示(<Help>と同じ) / 設定項目を検索する。設定項目 のシンボル名からメニュー上の 位置を探す場合に便利 <Exit>→ 「新しい設定を保存するか?」→ YES→.configに保存 実 習
  • 108. This  material  is  licensed  under  the  Crea1ve  Commons  License  BY-­‐NC-­‐SA  4.0.   108  108   makeコマンド関連 $ make $ make modules_install $ make install ファイルまたはディレクトリ名 内容 /lib/modules/<カーネルバージョン>/ モジュールが配置されるディレクトリ /boot/vmlinuz-<カーネルバージョン> カーネルイメージファイル /boot/initramfs-<カーネルバージョン> または /boot/initrd.img-<カーネルバージョン> ブート時初期化用ファイルシステムイメージ /boot/Systemmap-<カーネルバージョン> アドレス情報ファイル カーネルのコンパイルをする。ソースツリーのルートディレクトリで実行。 コンパイルされたモジュールを/lib/modulesにインストール。 カーネルバイナリイメージを/boot以下にインストールされる。 Fedora系ではブート時初期化ファイルシステムイメージも作成される。 $ update-initramfs –c –k <カーネルバージョン> Debian系においてブート時初期化ファイルシステムイメージも作成する際に使用するコマンド。 参 考
  • 109. This  material  is  licensed  under  the  Crea1ve  Commons  License  BY-­‐NC-­‐SA  4.0.   109  109   makeコマンド関連 $ make clean $ make help $ make <dir>/<file>.o $ make <dir>/<file>.ko ソースツリーをコンパイル前に戻す。オブジェクトファイルは削除されるが.configやコン パイル時に生成された一部ファイルは削除されない。 使用可能なmakeターゲットを表示する。 指定したオブジェクトファイルを生成するのに必要なコンパイルだけを行う。<dir>だけ を指定した場合は、 .config によって生成されることになっているそのディレクトリ内す べてのオブジェクトファイルが生成される。 指定したモジュールだけを生成する 参 考
  • 110. This  material  is  licensed  under  the  Crea1ve  Commons  License  BY-­‐NC-­‐SA  4.0.   110  110   makeコマンド(クロスコンパイル)   $ make ARCH=arm CROSS_COMPLIE=arm-none-linux-gnueabi- uImage $ make ARCH=arm CROSS_COMPLE=arm-none-linux-gnueabi- modules 変数 意味 ARCH ターゲットアーキテクチャ CROSS_COMPILE クロスコンパイラのプレフィックスを指定 クロスコンパイラarm-none-linux-gnueabi-によってARM向けのカーネルをクロスコンパイルする。 生成するカーネルのバイナリイメージはuImage形式がよく使われる。 arch/arm/boot/uImageとして生成される。 クロスコンパイルに必要な変数 クロスコンパイラarm-none-linux-gnueabi-によってARM向けのカーネルモジュールをクロスコンパ イルで生成する。 参 考
  • 111. This  material  is  licensed  under  the  Crea1ve  Commons  License  BY-­‐NC-­‐SA  4.0.   111  111   makeコマンド(クロスコンパイル)   変数 意味 ARCH ターゲットアーキテクチャ CROSS_COMPILE クロスコンパイラのプレフィックスを指定 クロスコンパイルに必要な変数 $ export PATH=/usr/local/arm-2010q1/bin:$PATH <= パスを設定 $ export CROSS_COMPILE=arm-none-linux-gnueabi- $ export ARCH=arm $ cd ~/Chipsee_Android/Source/kernel-ics-chipsee-panda-20130520 $ make distclean <= 初期状態に戻す $ make panda_chipsee_defconfig <= Pandaboard用のコンフィグレーションを行う $ make uImage <= カーネルのコンパイルを行う <<< ファイルは arch/arm/boot/uImage として生成される >>> 実 習 既に設定済み カンペ   P04_04.txt参照
  • 112. This  material  is  licensed  under  the  Crea1ve  Commons  License  BY-­‐NC-­‐SA  4.0.   112  112   カーネルの入れ替え   <<< SDカードを挿入 >>> $ sudo mount /dev/sdb1 /mnt [sudo] password for es: $ ls /mnt boot.scr MLO u-boot.img uImage uInitrd $ ls arch fs linaro-test-status REPORTING-BUGS usr block include MAINTAINERS samples virt COPYING init Makefile scripts vmlinux CREDITS ipc mm security vmlinux.o crypto Kbuild Module.symvers set_env.sh Documentation Kconfig net sound drivers kernel panda_chipsee_defconfig System.map firmware lib README tools <<< 続く >>> 実 習 •  コンパイルしたカーネルを入れ替えるにはホストPCにPandaboard ES用のSD カードを挿入し、bootパーティション(SDカードが/dev/sdbの場合、/dev/sdb1)を マウントし、uImageファイルを入れ替える カンペ   P04_05.txt参照
  • 113. This  material  is  licensed  under  the  Crea1ve  Commons  License  BY-­‐NC-­‐SA  4.0.   113  113   カーネルの入れ替え   <<< 続き >>> $ sudo cp arch/arm/boot/uImage /mnt $ ls /mnt boot.scr MLO u-boot.img uImage uInitrd $ ls -l /mnt total 5473 -rwxr-xr-x 1 root root 449 9月 6 20:26 boot.scr -rwxr-xr-x 1 root root 31644 9月 6 20:26 MLO -rwxr-xr-x 1 root root 208784 9月 6 20:26 u-boot.img -rwxr-xr-x 1 root root 5159056 9月 6 22:33 uImage -rwxr-xr-x 1 root root 202957 9月 6 20:26 uInitrd $ sudo umount /mnt <<< SDカードを抜いてPandaboard ESで起動確認 >>> 実 習 •  コンパイルしたカーネルを入れ替えるにはホストPCにPandaboard ES用のSD カードを挿入し、bootパーティション(SDカードが/dev/sdbの場合、/dev/sdb1)を マウントし、uImageファイルを入れ替える
  • 114. This  material  is  licensed  under  the  Crea1ve  Commons  License  BY-­‐NC-­‐SA  4.0.   114  114   実習の開発環境まとめ 開発用PC 【初期イメージファイル格納先】 /home/es/Chipsee_Android/prebuilt-panda-hd-20130520-b3 【Android用Linuxカーネルのソースコードのrootパス】 /home/es/Chipsee_Android/Source/kernel-ics-chipsee-panda-20130520 【環境変数】 $ export PATH=/usr/local/arm-2010q1/bin:$PATH $ export CROSS_COMPILE=arm-none-linux-gnueabi- $ export ARCH=arm 【カーネルのビルド】 $ cd ~/Chipsee_Android/Source/kernel-ics-chipsee-panda-20130520 $ make distclean $ make panda_chipsee_defconfig $ make uImage
  • 115. This  material  is  licensed  under  the  Crea1ve  Commons  License  BY-­‐NC-­‐SA  4.0.   115  115   Android起動ログ U-Boot SPL 2013.01.-rc1 (Jun 09 2013 - 10:45:59) OMAP4460 ES1.1 OMAP SD/MMC: 0 reading u-boot.img reading u-boot.img U-Boot 2013.01.-rc1 (Jun 09 2013 - 10:45:59) CPU : OMAP4460 ES1.1 Board: OMAP4 Panda I2C: ready DRAM: 1 GiB MMC: OMAP SD/MMC: 0 Using default environment MLO起動 U-Boot起動
  • 116. This  material  is  licensed  under  the  Crea1ve  Commons  License  BY-­‐NC-­‐SA  4.0.   116  116   Android起動ログ In: serial Out: serial Err: serial Net: No ethernet found. checking for preEnv.txt reading preEnv.txt ** Unable to read file preEnv.txt ** Hit any key to stop autoboot: 3 2 1 0 mmc0 is current device reading uEnv.txt ** Unable to read file uEnv.txt ** reading boot.scr 449 bytes read Loaded script from boot.scr Running bootscript from mmc0 ... ## Executing script at 82000000 U-Boot起動時の待ち合わせ。 カウントダウンが終わると起動 スクリプトに従って処理を続ける boot.scrの読み込みと実行
  • 117. This  material  is  licensed  under  the  Crea1ve  Commons  License  BY-­‐NC-­‐SA  4.0.   117  117   Android起動ログ reading uImage 5159288 bytes read reading uInitrd 202957 bytes read ## Booting kernel from Legacy Image at 80200000 ... Image Name: Linux-3.2.0 Image Type: ARM Linux Kernel Image (uncompressed) Data Size: 5159224 Bytes = 4.9 MiB Load Address: 80008000 Entry Point: 80008000 Verifying Checksum ... OK ## Loading init Ramdisk from Legacy Image at 81600000 ... Image Name: Chipsee ICS Ramdisk Image Type: ARM Linux RAMDisk Image (gzip compressed) Data Size: 202893 Bytes = 198.1 KiB Load Address: 00000000 Entry Point: 00000000 Verifying Checksum ... OK Loading Kernel Image ... OK OK uImage(Linuxカーネルのイメージファイル) の読み込み、uInitrd(起動用RAMディスク イメージファイル)の読み込み