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
発表
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を
再起動し、[デバイス]-[ク
リップボードの共有]およ
び[ドラッグ&ドロップ]を
[双方向]に設定する
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参照
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
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について
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参照
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ディスク
イメージファイル)の読み込み