20130317改変

Android組込み開発
基礎コース
Armadillo-440 編

This material is licensed under the Creative Commons License BY-NC-SA 4.0....
テキストのご利用に関して
・ 本コースのテキストは、 Creative Commons License BY-NC-SA
4.0に基づいて提供されています。改変の有無にかかわらず、商用
目的での利用は禁止されています。
・ 本教育プログラムは、...
トレーニングの目的
• LinuxとAndroidの違いを理解します
• LinuxとAndroidの起動手順の違いを理解します
• 組込みLinuxとAndroidの開発環境を構築できるよ
うになります
• Androidのビルドおよび実機で...
受講するに当たって必要なスキル
• OSの概念を理解している事
• Java言語またはC/C++言語の開発経験がある事
– 基本的なJavaやC/C++の言語仕様について理解があれば
問題ありません

• Linuxのコマンド操作経験がある事
...
目次
1章. Linux概要
2章. Android概要
3章.ターゲットのボード
4章.実機でAndroidを動かす(実習)
5章.デバイスの組み込み
6章. NDK/JNI概要
7章. シリアルデバイスアプリケーション作成(実
習)

Th...
第1章

Linux概要

This material is licensed under the Creative Commons License BY-NC-SA 4.0.

0-5
1章の概要
•
•
•
•
•
•

Linuxとは
ルートファイルシステム
起動シーケンス
Initの概要
組み込み向けOS
組み込みLinux

This material is licensed under the Creative Co...
Linuxとは?






1998年~
オープンソースで完全フリーで世界中で最もよく使われている
GPLライセンス(ソースコードの公開義務)
UNIX*1のクローンなのでUNIXの一部資産が流用可能
リーナス・トーバルズ氏が開発/...
Debian系Linuxの起動シーケンス
Power ON or Reboot
initrd
起動に必要なドライバが格納さ
れている一時的なルートファイ
ルシステム(初期RAMディス
ク)

/etc/initt
ab

BIOS

ブートデバ...
Debian系Linuxのinitが行う設定
• initが行う各種設定はinittabに記載されている情報
を元に行う
# デフォルトランレベル3
init

デーモン
1
デーモン
2

id:3:initdefault:
# ブート時の処...
Debian系Linux の inittabの書式
initdefa
ult

アクションの種
類
システム起動完了時に入るべきランレ
ベル

/etc/init.d/rcSがやること
∟/etc/default/rcSを実行
∟/etc/rc...
Debian系Linux の
ルートファイルシステム

root
/

bin
boot
dev
etc
lib
mnt(media)
opt
proc
home/root
sbin
sys
tmp
usr
var

コマンド類
起動ファイル
...
組込み機器向けOSの条件

• 少ない資源(メモリ)で動作可
能
• リアルタイムオペレーティング
システム
This material is licensed under the Creative Commons License BY-NC-...
従来の組込み向けOS
OS名

VxWorks

WindowsCE
T-kernel
T-kernel
Extension
Windows
Phone7

iOS

Symbian OS

提供

開発環境

主な用途

価格

対応PF

...
組込み向けLinux
OS名

MontaVista
Linux

提供
米モンタビスタソフトウ
ェア

主な用途
携帯電話向け

価格

対応PF

有償

x86、
PowerPCMIPS
など

Wind River
Linux

Win...
組込みLinuxの特徴
• Linuxカーネルに少数のフリーソフトウェアを組み合わせ
たもの
• 組込みCPUアーキテクチャのサポート
• ARM、MIPS、X86など

• RAMや二次記憶装置などの容量が小さい
• 2MB以下のメモリで起動...
組込みLinuxのリアルタイム性能
•ソフトリアルタイム (CONFIG_PREEMPT)
•ハードリアルタイム (CONFIG_PREEMPT_RT patch set)
•他のカーネルとの組み合わせでリアルタイム性を向上
•RTAI (Ad...
組込みLinuxの開発環境
•一般的なツール
•Eclipse C/C++ Development Tooling (CDT) :EclipseでのCやC++の開発
に必須
•Target Management (RSE)
•Linux Too...
組込みLinuxに関わる団体
• Linux Foundation (CE Linux Forumを吸収)
• Linuxオペレーティングシステムの普及をサポートする非営利のコンソー
シアム
• 旧CE Linux Forumが開催する定期的な...
メモ

マスタ タイトルの書式設定

This material is licensed under the Creative Commons
License BY-NC-SA 4.0.

0-19
第2章

Android概要

This material is licensed under the Creative Commons License BY-NC-SA 4.0.

0-20
2章の概要
• Androidとは
– 主な機能、歴史

•
•
•
•

Androidアプリケーションの動作環境
Androidのアーキテクチャ
アプリケーション開発環境
プラットフォーム開発環境
– ソースコード
– ルートファイルシステ...
Androidとは
Androidとは
GoogleとOHAが提供する携帯端末用プラットフォームである
主に携帯電話、タブレットなどのプラットフォームとして利用されている
現在では、携帯電話、タブレット問わずさまざまなハードウェアにAndroi...
ハンドセット、タブレット以外の
Android
ノートPC
MediaController
腕時計型

マスタ タイトルの書式設定

This material is licensed under the Creative Commons
Li...
Android組込みハードウェア

マスタ タイトルの書式設定

2-24
Androidの主な機能
【プラットフォーム全般】
ブラウザによるWebサイトの閲覧
→ベースはオープンソースWebKitエンジン

2D、3Dグラフィック
→カスタム2Dグラフィックライブラリ、 OpenGL/ES

軽量データベース
...
豊富なインタフェース
Androidのインタフェース

NFC

タッチパネル
各種センサ
トラックボール
カメラ
GPS
GPS
ソフトキーボード/ハードキーボード
NFC(Near Field Communication)
Bluetoot...
Androidの歴史
年月

できごと

2003年10月

Android社発足

2005年 8月 GoogleがAndroid社を買収
2007年11月

Open Handset Alliance (OHA)が発足
Android SD...
Androidの歴史
年月

できごと

2009年 9月

Android SDK 1.6 発表

2009年10月

Android SDK 2.0 発表

2010年 1月

Android SDK 2.1 発表

2010年 5月

A...
プラットフォーム
Androidのバージョン一覧

1.5

2.3

Cupcake

Gingerbread

Donuts

HoneyComb

2.0–2.1

4.0

Eclair

Ice Cream Sandwich

2.2...
Androidのバージョン 2.x系
2.x系の新機能
Version

コードネーム

APIレベル

リリース

新機能

2.0/2.1

Eclair

5, 6, 7

2009/10/26 (2.0)
2009/12/3 (2.0....
Androidのバージョン 3.x系
3.xの新機能
Version

コードネー
ム

APIレベル

リリース

新機能

3.0

Honeycomb

11

2011/2/22

• 大型ディスプレイに最適化
• タブレット専用となっ...
Androidのバージョン 4.x系
4.xの新機能
Version

コードネー
ム

APIレベル

リリース

新機能

4.0

Ice Cream
Sandwich

14, 15

2011/10/08

•
•
•
•
•
•
•...
Androidのバージョン 4.x系
4.xの新機能
Version

コードネーム

APIレベル

リリース

新機能

• マルチアカウント
• クイック設定
• フォトギャラリーのアップデート。360
度撮影。
• ジェスチャ文字入力
...
Androidのアーキテクチャ
アプリケーション
Home

Contacts

Phone

Browser

自作アプリ

・・
・

アプリケーションフレームワーク
アクティビティ
マネージャ

ウィンドウ
マネージャ

コンテンツ
プロ...
カーネルとネイティブライブラリ
• Linuxカーネル2.6がベース
ベースに)
–
–
–
–

(ただし4.0以降のカーネルはほぼ3.1

Android用変更パッチ(電源管理、Binder、WakeLockなど)
ハードウェアのドライバ類...
Androidランタイム
•コアライブラリ
•Android用のJavaのコアライブラリで基本的なJava APIを提供
•J2SEをベースにしているので開発用ホストPCにJDKが入っていればアプリケー
ションの開発が可能
•未サポートであるJ...
アプリケーション層
• アプリケーションフレームワーク
– Androidアプリケーション作成のための拡張可能なJavaのコンポーネ
ント類
項目
説明
アクティビティマネー
ジャ

アプリケーションのライフサイクルや画面の共通バックスタックを...
アプリケーション層
• アプリケーション
– Google製標準アプリケーション
• アラーム時計、Bluetooth、ブラウザ、電卓、カメラ、コンタ
クトリスト、
検索ボックス、電子メールクライアント、ギャラリー、3Dギャ
ラリー、
インスタ...
アプリケーション開発の手法
アプリケーション

アプリケーション

アプリケーション

アプリケーション

アプリケーションフレームワーク

JNI

JNI

JNI

dalvikVM
ライブラリ
自前のライブラリ

Webkit

Ope...
アプリケーション開発環境
項目

必要な環境

OS

Windows XP, Windows Vista(32 / 64 bit)
Mac OS X 10.5.8以降(x86のみ)
Linux(Ubuntu Hardy Herson、Luci...
プラットフォーム開発環境
項目

必要な環境(共通)

スペック

CPU:2G以上、 メモリ:2G以上
ハードディスク空き容量:80G以上(プラットフォームひとつあたり20G
)
ネットワーク常時接続

ソースコード入手先
項目

Andro...
組込み開発とは
組込み機器のプラットフォーム開発はネイティブ言語で開発(gcc)を行う
【必要な作業】
1.

ホストPCにてクロス開発環境構築
–

2.
3.

ホストPCにてカーネル作成
ターゲットボードに移植
–

4.
5.

ターゲ...
Androidのクロス開発環境
Ubuntu
追加パッケージ

ホストPC (X86)
Ubuntu on VMWarePlayer

ターゲットボード
(ARM)
Armadillo-440

LAN or シリアル

AOSP

ボードベン...
本実習で使用するホストPC構成
ゲストOS Ubuntu ver. 10.04.LTS
32_bit x86版
VMWarePlayer
ver.4.04
ホストPC WindowsXP SP3 or 7
(32_bit x86マシン)
VMW...
Ubuntu on VMWarePlayer
インストールウィ
ザードに
必要な項目を入力し
てインストール開始

ディスクトップ
にVMWarePlayer
のショートカッ
トができるので
ダブルクリック
This material is l...
Ubuntu on VMWarePlayer

ディスク容量…80G
ネットワーク…NAT
メモリ…最低2G以上割り当てる

This material is licensed under the Creative Commons Licens...
Ubuntu on VMWarePlayer

Ubuntuのisoイメージをダウンロードした場所

「ISOイメージ
ファイルを使用
する」にチェッ
クをいれて
参照ボタン押下

「OperationSystem not found」
と表示...
Ubuntu on VMWarePlayer
インストール
ウィザードに
必要な項目を
入力してイン
ストール開始

インストール
が完了すると
再起動を促さ
れるので再起
動をする

This material is licensed und...
Ubuntu on VMWarePlayer
初回インストール時はアップデートマネージャにてセキュリティ
アップデートをする

*社内ネットワークなどproxyの関係で失敗する場合はproxyの設定を正しく行ってからリ
トライしてください
0-...
本実習のクロス開発環境の構築
ホストPCがUbuntu ver.10.0.4LTS (32_bit x86版)の場合
必要なツールのインストール
$ sudo apt-get install git-core gnupg flex bison ...
本実習のクロス開発環境の構築
JDK5のインストール(続き)
下記の/update-java-0.5bツールを実行後ダイアログが表示されるので
「/usr/jvm/java-5-oracle」を選択して「OK」すれば完了
$ wget http...
android open source project
(AOSP)
http://source.android.com/

Androidのソースコードはgitプロジェクト単位(リポジトリ)にTree構
造となっている
コミッターは個々のリポ...
Android のバージョン対応表
Androidの指定バージョンのソース
コードを取得する場合はAOSPの
BuildNumbersで記載されている
Code nameまたはTagを指定する
Code name

Version

API l...
Androidのソースコード管理
(Git)
• Gitとは
– 分散型バージョン管理システム
– 複数リポジトリ間での変更履歴のやり取りが可能
– Linux kernelのソースコード管理に利用されている
【gitサーバにあるリポジトリのコ...
Androidのソースコード管理
(repo)
• repoとは
– Gitの複数リポジトリを一括で管理するためのツール

【gitサーバにあるkernel以外のすべての標準プロジェクトを
一括で取得】
$ repo init -u https...
AOSPのソースコード取得
android-2.2.2_r1のタグのついたAndroid2.2(Froyo)のコードを取得するには
$ mkdir mydroid
$ cd mydroid
$ repo init -u https://andr...
repo sync 後のソースコードツリー

mydroid/

bionic/
bootable/
build/
cts/
dalvik/
development/
external/
frameworks/
hardware/
packag...
ソースコード詳細(packages)
• packages

-> アプリケーションレイヤ

– apps : Android標準搭載アプリケーションのソース
コード
– inputmethods : 入力用メソッドのソースコードが格
納
– ...
ソースコード詳細
(packages/frameworks)
• frameworks -> フレームワークレイヤ
– base
• Androidフレームワークのソースコードと各種サービスのソー
スコード
• base/core : Andr...
ソースコード詳細(bionic/external)
• external -> ライブラリレイヤ
– 外部プロジェクトのライブラリ
• bionic -> ライブラリレイヤ
– BSDライセンス
– POSIX標準Cライブラリのすべての機能は実...
ソースコード詳細(hardware)
• hardware -> HAL
– broadcom : Broadcomの無線ドライバ
– libhardware :外部モジュールで構成されたデバイスドラ
イバ制御用ラッパーライブラリ
(外部モジュ...
ソースコード詳細(system)
•system
–Initなどの基本的なプロセスのコードやシステム
ファイルなど
–bluetooth : bluetoothのソースコード
–core : 必要最小限の実行環境、基本的なコマンド
類
–ext...
ソースコード詳細(開発環境関連)
•

build
– ビルドシステム(Makefile、スクリプトなど)を格納
– Androidソースコードのルートでmakeするとbuild/core/main.mkからmake開始

•

prebuil...
ソースコード詳細(開発環境関連)
• cts
– 互換性テストスイーツ、デバイスの互換性をテストするためのツ
ール
など
– Android認証テスト
– Android Marketなどを使用できるようにするにはGoogleの認証が必要

–...
Androidのエミュレータと実機
プラットフォームが入れ替わるだけで実はエミュレータと実機は同じ
ARMのエミュレートをしているのはQEMUエンジン

Javaプログラム
Dalvik VM

Javaプログラム
Dalvik VM

Lin...
Androidの起動シーケンス
Power ON or Reboot
BootROM

/init.rc
基本設定
・ネットワーク
・キーボード
・デバイス初期
化
サービスの起動

ブートローダ
Boot カーネル
メモリに展開

/in
i...
Android カーネルの起動パラメータ
本実習で使用するArmadillo-440はブートローダにhermitを使用します
カーネルの起動パラメータを設定するためには、開発PCとArmadillo-440を
RS232Cで接続後、hermit...
Androidのinit
init /system/core/init/init.c
int main(int argc, char **argv)
{
ブート処理

/dev、/proc、/sysをマウン
ト

/init.rc
をパースして...
Androidのinit
• initの起点
– /system/core/init/init.c の main関数

• init.rc
– Android Init Languageで書かれた起動用スクリプト
– Action、Comman...
Androidのinit(デーモン処理)
• ファイルディスクリプタ
– device_fd
• カーネルからデバイスの状態変化通知を受けて/dev以下のデバ
イスの生成と削除を行う。
• 生成するデバイスファイルのmode、uid、gidはd...
Androidのルートファイルシステム
data

root
/

キャッシュ、追加パッケージなど格納ディレクト
(R/W)
dev
デバイスファイル格納ディレクトリ
proc
Linux設定ファイル格納ディレクトリ
sys
システムファイル格...
Androidのルートファイルシステム
app

/system/

bin
etc
fonts
framework
lib
usr
xbin
build.prop

プリインストールのアプリケーション
ファイル(.apk)
各種一般的なLin...
1章と2章のまとめと次回予告
以上で一般的なLinuxの概要とAndroidの概要に
ついて学びました
次章からは本実習で使用するターゲットボードの
理解とAndroidを動作させる方法について学びます

This material is li...
メモ

This material is licensed under the Creative Commons License BY-NC-SA 4.0.

0-74
第3章

ターゲットのボード

This material is licensed under the Creative Commons License BY-NC-SA 4.0.

0-75
3章の概要
•
•
•
•
•

代表的なターゲットボード
Armadillo-500fxの構造
Armadillo-500fxのメモリ構成
Armadillo-440の構造
Armadillo-440のメモリ構成

This material...
各種ターゲットボード
ボード名

CPU

メモリ

画面

通信

I/F

ストレー
ジ

カメラ

オーディオ

Armadillo-440
液晶モデル開発
セット

Freescale
i.MX257
400MHz
(ARM9)

32...
ターゲットボード

ボード名

提供元

購入先

価格

Armadillo-440 液晶モデル開発セット

アットマークテクノ社

アットマークテクノ社

128,000(税込)

Armadillo-500fx液晶モデル開発セッ
ト

ア...
Armadillo440

This material is licensed under the Creative Commons License BY-NC-SA 4.0.

0-79
Armadillo440
プロセッサ
CPUコア

Freescale i.MX257 (MCIMX257)
ARM926EJ-S

CPUコアクロック

400MHz

BUSクロック

133MHz

メモリ

128MB (LPDDR)
...
Armadillo440-通常Linux
開発用PC

カーネルの起動パラメータ

[armadillo] hermit> clearenv
[armadillo] hermit> setenv
[armadillo] hermit> boot...
参
考

Armadillo440-Androidデバッグ時
(NFSブート)
開発用PC

カーネルの起動パラメータ
[armadillo] hermit>
setenv␣console=ttymxc0,␣115200␣root=/dev/n...
Armadillo440-Androidデバッグ時
(microSDブート)
開発用PC

カーネルの起動パラメータ
[armadillo] hermit>
setenv␣console=ttymxc1␣root=/dev/mmcblk0p2␣...
Armadillo440-Android
製品イメージ
開発用PC

カーネルの起動パラメータ

[armadillo] hermit>
clearenv
[armadillo] hermit> boot

シリアル通信ソフ
ト

NOR Fl...
メモ

This material is licensed under the Creative Commons License BY-NC-SA 4.0.

0-85
第4章 実機でAndroidを動かす

This material is licensed under the Creative Commons License BY-NC-SA 4.0.

0-86

86
4章の概要
•
•
•
•
•
•
•
•
•

目指すシステム
Androidソースコード取得
Androidカーネルイメージ作成
Androidユーザランドのファイルシステム作成
Androidユーザランドのファイルシステム構成
Armad...
本章で目指すシステム
Armadillo-440に搭載させたmicroSD内のEM3で起動
する
/dev/mmcblk0

microSD
Android
rootfs

/dev/mmcblk0p2

This material is li...
Linuxコマンドの復習
●UbuntuのターミナルのシェルではTabキーでディレクトリ名やファイル名の補完ができま
す
●ホームディレクトリについて
本実習の開発環境におけるユーザ(aj741327)のホームディレクトリは以下のディレクトリ
...
Linuxコマンドの復習
pwd

現在のディレクトリパスを表示

cd

ディレクトリ間移動

cd ../ 一つ前のディレクトリに移動

ls –la

カレントディレクトリのファイルを
一覧表示

-l : ファイルの詳細も示す
-a :...
Linuxコマンドの復習
mount A B

ファイルシステムのマウント

AをBにマウントする

umount B

ファイルシステムのアンマウント

Bをアンマウントする

ps

実行中プロセスの情報表示

top

プロセスの稼動状況...
EM3とは
EM(EmbeddedMaster)とはOESFのディストリビューション ワー
キンググループを中心に仕様策定、構築、公開をしている
組込み機器向けのAndroidのディストリビューションのシリー
ズです
http://www.oe...
Embedded Master 開発者サイト
AOSPと同様にEMにも開発者のためのサイト
(http://developer.oesf.biz/em/developer/)があります。
各バージョンのリリース情報やソースコードの取得方法、
タ...
Embedded Master バージョン
バージョ
ン

コード

説明

5

Fig

TBD

4

EggPlant

Andrid 4.0がベース
詳細は近日にアナウンス予定

Durian

Andrid 2.2がベース
OPBの...
EM3ソースコードの取得
Armadillo440用のカー
ネルコードの取得方法
の説明リンク
サポートしているカーネルの機能
Core: Android^(TM) 2.2_r1.3
wpa_supplicant(version 0.5.11)...
EM3ソースコードの取得
[host_pc~]
[host_pc~]
[host_pc~]
[host_pc~]
[host_pc~]

>
>
>
>
>

cd␣~work
mkdir␣v2_armadillo440-training
ex...
Androidのユーザランドのビルド

core i5 メモリ
1.5G
ubuntu on vmware
120分くらい

// Androidユーザランドのビルド
[host_pc~] > cd␣$ANDROID/Embedded-Mast...
実
習

ユーザランドのファイルシステム作成
カンペ⇒01_ユーザランドのファイルシステム作
成.txt

[host_pc~] > cd␣$ANDROID
[host_pc~] > mkdir␣-p␣android-root

・・・①

[...
実
習

固定IPアドレスの設定について

Androidのネットワーク設定は移植先のターゲットボードのルートファイル
システムにあるハードウェア専用の起動スクリプトinit.<hardware名>.rc
で設定されている
Armadillo4...
実
習

固定IPアドレス設定
カンペ⇒02_固定IPアドレス設
定.txt

//Androidのネットワーク設定ファイルに固定IPアドレスを設定しておく
[host_pc~] > cd␣$ANDROID/android-root
[host...
実
習

Androidファイルシステムの完成
カンペ⇒03_ファイルシステムの完
成.txt

//Androidユーザランドのファイルシステムをアーカイブにする
[host_pc~] > cd␣$ANDROID/android-root
[...
Androidのユーザランドの
ファイルシステム構成(/)
data

root
/

キャッシュ、追加パッケージなど格納ディレクト
(R/W)(空)
dev
デバイスファイル格納ディレクトリ(空)
proc
Linux設定ファイル格納ディレク...
Androidのユーザランドの
ファイルシステム構成(/system/)
app

/system/

bin
etc
fonts
framework
lib
usr
xbin
build.prop

プリインストールのアプリケーション
ファイ...
実
習

Androidカーネルの作成
カンペ⇒04_カーネルの作成.txt

[host_pc~] > cd␣$ANDROID/Embedded-Master-ARM/kernel/armadillo440
[host_pc~] > make...
Linuxカーネルのコンパイルオプション設定

■Linuxカーネルのコンパイルオプション設定とは
①ある機能をコンパイル「する/しない」の設定
→カーネルのオプション設定項目は膨大
②機能をコンパイルする上でどんな形でコンパイルするかの設定
...
KconfigとMakefile
■Linuxカーネルのコンパイルオプション設定で設定できる
オプション名は「Kconfig」というファイルで設定されてい
ます
■ハードウェアのドライバのソースコードが収まっている
ディレクトリには必ず「Kco...
KconfigとMakefile
具体例を見てみましょう。
USBメモリの機能を追加するためのパラメータ(オプション名)とそれに関連するドライバ
のソースコードを探す方法です。
USBメモリはストレージ設備(USB Mass Storage)な...
KconfigとMakefile
次にMakefileを見てみます
# Makefile for the USB Mass Storage device drivers.
# 15 Aug 2000, Christoph Hellwig
# R...
「.config」ファイルについて
.config
#
# Automatically generated make config: don’t edit
# :
# :
CONFIG_64BIT=y
#CONFIG_X86_32 is not...
「.config」の新規作成

・「.config」がまだ存在しない場合
→$make menuconfig → <Exit>
→「.config」が生成
→Kconfigにおいてdefault指定された機能のみ
「.config」に適用

T...
「.config」の更新
・「.config」がすでに存在する場合
→ソースツリーのルートに配置
→$make oldconfig
新しく追加された設定項目について1つ1つ設定するか確認さ

れる
(とりあえずすべてリターンでデフォルトを適用)...
参
考

menuconfigの操作方法
↑

項目の選択カーソルを上に移動
項目の選択カーソルを下に移動

<TAB> 、← 、→

動作メニュー(
Select/Exit/Help)を切り替え

<Enter>

選択されている動作メニュー...
アーキテクチャ毎の「.config」設定ファイル

・アーキテクチャ毎の「.config」の設定ファイルを
作成する
→$make defconfig
→アーキテクチャ毎のデフォルト設定に基づいた「.config」の設定ファ
イルが生成
→生成...
実
習

armadillo400_android_defconfig

下記のファイルを開いて確認してみましょう
$ANDROID/Embedded-MasterARM/kernel/armadillo440/arch/arm/configs...
armadillo400_android_defconfig
# #MX25 Options
#
CONFIG_MACH_ARMADILLO420=y
CONFIG_MACH_ARMADILLO440=y
# #Armadillo-400 Bo...
参
考

makeコマンド関連
[host_pc~] > make
カーネルのコンパイルをする。ソースツリーのルートディレクトリで実行。

[host_pc~] > make␣modules_install
コンパイルされたモジュールを/lib...
参
考

mekeコマンド関連
[host_pc~] > make␣clean
ソースツリーをコンパイル前に戻す。オブジェクトファイルは削除される
が.configやコンパイル時に生成された一部ファイルは削除されない。

[host_pc~] ...
makeコマンド(クロスコンパイル)
クロスコンパイルに必要な変数

変数

意味

ARCH

ターゲットアーキテクチャ

CROSS_COMPILE

クロスコンパイラのプレフィックスを指定

[host_pc~] > make␣ARCH=...
実
習

コンフィギュレーションの確認
makeコマンドやmake menuconfigでカーネルコンフィギュレーション値
が反映されたか確認する場合は

•方法1:「.config」をlessで確認(実習)
•方法2:make menucon...
参
考

コンフィギュレーションの確認
//方法2:make menuconfigコマンドでGUIから確認
[host_pc~] > cd␣$ANDROID/Embedded-Master-ARM/kernel/
[host_pc~] > ma...
参
考

コンフィグレーションの確認
NFS設定を行った場合の確認

This material is licensed under the Creative Commons License BY-NC-SA 4.0.

0-121

121
メモ

This material is licensed under the Creative Commons License BY-NC-SA 4.0.

0-122

122
Armadillo440
製品版Linuxイメージファイル
アットマークテクノのサイトから出荷時状態のLinuxカーネル、ユーザランド、ダウン
ローダー「Hermit-at」をダウンロードする
http://armadillo.atmark-t...
実習の開発環境まとめ
開発用PC
【実習用のAndroidソースコードのrootパス】

/home/aj741327/work/v2_armadillo440-training/Embedded-Master-ARM
【Android用Lin...
ダウンローダ:Hermitについて
開発用PCにRS232Cの端子がない場合はUSB-RS232C変換ケーブ
ルを使用してUSBで接続してください

開発用PC

hermit
Armadillo用
ブートローダ兼ダウンロー
ダ

# 開発PC...
ブートローダ:Hermitについて
開発用PCにRS232Cの端子がない場合はUSB-RS232C変換
ケーブルを使用してUSBで接続してください
JP2ショート状態
(hermit起動モー
ド)

開発用PC
【C-Kermitの使い方】
*...
Armadillo440でAndroidを起動する手順

①
②
③
④
⑤
⑥
⑦

製品版Linuxで起動
Armadillo440側のネットワークの設定
microSDのパーティションと初期化
Android RootfsをArmadil...
製品版Linuxで起動してみよう
JP2をショート

C-Kermit
シリアル通信ソフ
ト
カンペ⇒05_製品版Linuxのブート手
順.txt

1.JP2をショートにする
2.シリアルケーブルでPCとArmadillo-440を接続する
...
実
習

Armadillo440側のネットワークの設定
作業PC側のネットワーク設定
ip:192.168.1.10
subnet:255.255.255.0

カンペ⇒06_製品版Linuxのネットワーク設
定.txt

192.168.1...
実
習

microSDのパーティションと初期化
パーティションのイメージ
mmcblk0p1
FAT 1-100M
mmcblk0p2

microSD

4G

ext3
残り全部の容量

[armadillo ~] # fdisk␣/de...
実
習

microSDのパーティションと初期化
Command (m for help): n //新規パーティション追加コマンド
Command action
e
extended
p
primary partition (1-4)
p /...
実
習

microSDのパーティションと初期化

First cylinder (3054-30656, default 3054):リターン(default 3054 ) //シリンダの開

始値
Using default value 3...
実
習

Android RootfsをArmadillo-440へ転送
開発PC

armadillo440

/home/ftp/pub/

FTP

rootfs_a_training.tar.gz

192.168.1.11
カンペ⇒0...
Android組込み開発基礎コース Armadillo-440編
Android組込み開発基礎コース Armadillo-440編
Android組込み開発基礎コース Armadillo-440編
Android組込み開発基礎コース Armadillo-440編
Android組込み開発基礎コース Armadillo-440編
Android組込み開発基礎コース Armadillo-440編
Android組込み開発基礎コース Armadillo-440編
Android組込み開発基礎コース Armadillo-440編
Android組込み開発基礎コース Armadillo-440編
Android組込み開発基礎コース Armadillo-440編
Android組込み開発基礎コース Armadillo-440編
Android組込み開発基礎コース Armadillo-440編
Android組込み開発基礎コース Armadillo-440編
Android組込み開発基礎コース Armadillo-440編
Android組込み開発基礎コース Armadillo-440編
Android組込み開発基礎コース Armadillo-440編
Android組込み開発基礎コース Armadillo-440編
Android組込み開発基礎コース Armadillo-440編
Android組込み開発基礎コース Armadillo-440編
Android組込み開発基礎コース Armadillo-440編
Android組込み開発基礎コース Armadillo-440編
Android組込み開発基礎コース Armadillo-440編
Android組込み開発基礎コース Armadillo-440編
Android組込み開発基礎コース Armadillo-440編
Android組込み開発基礎コース Armadillo-440編
Android組込み開発基礎コース Armadillo-440編
Android組込み開発基礎コース Armadillo-440編
Android組込み開発基礎コース Armadillo-440編
Android組込み開発基礎コース Armadillo-440編
Android組込み開発基礎コース Armadillo-440編
Android組込み開発基礎コース Armadillo-440編
Android組込み開発基礎コース Armadillo-440編
Android組込み開発基礎コース Armadillo-440編
Android組込み開発基礎コース Armadillo-440編
Android組込み開発基礎コース Armadillo-440編
Android組込み開発基礎コース Armadillo-440編
Android組込み開発基礎コース Armadillo-440編
Android組込み開発基礎コース Armadillo-440編
Android組込み開発基礎コース Armadillo-440編
Android組込み開発基礎コース Armadillo-440編
Android組込み開発基礎コース Armadillo-440編
Android組込み開発基礎コース Armadillo-440編
Android組込み開発基礎コース Armadillo-440編
Android組込み開発基礎コース Armadillo-440編
Android組込み開発基礎コース Armadillo-440編
Android組込み開発基礎コース Armadillo-440編
Android組込み開発基礎コース Armadillo-440編
Android組込み開発基礎コース Armadillo-440編
Android組込み開発基礎コース Armadillo-440編
Android組込み開発基礎コース Armadillo-440編
Android組込み開発基礎コース Armadillo-440編
Android組込み開発基礎コース Armadillo-440編
Android組込み開発基礎コース Armadillo-440編
Android組込み開発基礎コース Armadillo-440編
Android組込み開発基礎コース Armadillo-440編
Android組込み開発基礎コース Armadillo-440編
Android組込み開発基礎コース Armadillo-440編
Android組込み開発基礎コース Armadillo-440編
Android組込み開発基礎コース Armadillo-440編
Android組込み開発基礎コース Armadillo-440編
Android組込み開発基礎コース Armadillo-440編
Android組込み開発基礎コース Armadillo-440編
Android組込み開発基礎コース Armadillo-440編
Android組込み開発基礎コース Armadillo-440編
Android組込み開発基礎コース Armadillo-440編
Android組込み開発基礎コース Armadillo-440編
Android組込み開発基礎コース Armadillo-440編
Android組込み開発基礎コース Armadillo-440編
Android組込み開発基礎コース Armadillo-440編
Android組込み開発基礎コース Armadillo-440編
Android組込み開発基礎コース Armadillo-440編
Android組込み開発基礎コース Armadillo-440編
Android組込み開発基礎コース Armadillo-440編
Android組込み開発基礎コース Armadillo-440編
Android組込み開発基礎コース Armadillo-440編
Android組込み開発基礎コース Armadillo-440編
Android組込み開発基礎コース Armadillo-440編
Android組込み開発基礎コース Armadillo-440編
Android組込み開発基礎コース Armadillo-440編
Android組込み開発基礎コース Armadillo-440編
Android組込み開発基礎コース Armadillo-440編
Android組込み開発基礎コース Armadillo-440編
Android組込み開発基礎コース Armadillo-440編
Android組込み開発基礎コース Armadillo-440編
Android組込み開発基礎コース Armadillo-440編
Android組込み開発基礎コース Armadillo-440編
Android組込み開発基礎コース Armadillo-440編
Android組込み開発基礎コース Armadillo-440編
Android組込み開発基礎コース Armadillo-440編
Android組込み開発基礎コース Armadillo-440編
Android組込み開発基礎コース Armadillo-440編
Android組込み開発基礎コース Armadillo-440編
Android組込み開発基礎コース Armadillo-440編
Android組込み開発基礎コース Armadillo-440編
Android組込み開発基礎コース Armadillo-440編
Android組込み開発基礎コース Armadillo-440編
Android組込み開発基礎コース Armadillo-440編
Android組込み開発基礎コース Armadillo-440編
Android組込み開発基礎コース Armadillo-440編
Android組込み開発基礎コース Armadillo-440編
Android組込み開発基礎コース Armadillo-440編
Android組込み開発基礎コース Armadillo-440編
Android組込み開発基礎コース Armadillo-440編
Android組込み開発基礎コース Armadillo-440編
Android組込み開発基礎コース Armadillo-440編
Android組込み開発基礎コース Armadillo-440編
Android組込み開発基礎コース Armadillo-440編
Android組込み開発基礎コース Armadillo-440編
Android組込み開発基礎コース Armadillo-440編
Android組込み開発基礎コース Armadillo-440編
Android組込み開発基礎コース Armadillo-440編
Android組込み開発基礎コース Armadillo-440編
Android組込み開発基礎コース Armadillo-440編
Android組込み開発基礎コース Armadillo-440編
Android組込み開発基礎コース Armadillo-440編
Android組込み開発基礎コース Armadillo-440編
Android組込み開発基礎コース Armadillo-440編
Android組込み開発基礎コース Armadillo-440編
Android組込み開発基礎コース Armadillo-440編
Android組込み開発基礎コース Armadillo-440編
Android組込み開発基礎コース Armadillo-440編
Android組込み開発基礎コース Armadillo-440編
Android組込み開発基礎コース Armadillo-440編
Android組込み開発基礎コース Armadillo-440編
Android組込み開発基礎コース Armadillo-440編
Android組込み開発基礎コース Armadillo-440編
Android組込み開発基礎コース Armadillo-440編
Android組込み開発基礎コース Armadillo-440編
Android組込み開発基礎コース Armadillo-440編
Android組込み開発基礎コース Armadillo-440編
Android組込み開発基礎コース Armadillo-440編
Android組込み開発基礎コース Armadillo-440編
Android組込み開発基礎コース Armadillo-440編
Android組込み開発基礎コース Armadillo-440編
Android組込み開発基礎コース Armadillo-440編
Android組込み開発基礎コース Armadillo-440編
Android組込み開発基礎コース Armadillo-440編
Android組込み開発基礎コース Armadillo-440編
Android組込み開発基礎コース Armadillo-440編
Android組込み開発基礎コース Armadillo-440編
Android組込み開発基礎コース Armadillo-440編
Android組込み開発基礎コース Armadillo-440編
Android組込み開発基礎コース Armadillo-440編
Android組込み開発基礎コース Armadillo-440編
Android組込み開発基礎コース Armadillo-440編
Android組込み開発基礎コース Armadillo-440編
Android組込み開発基礎コース Armadillo-440編
Android組込み開発基礎コース Armadillo-440編
Android組込み開発基礎コース Armadillo-440編
Android組込み開発基礎コース Armadillo-440編
Android組込み開発基礎コース Armadillo-440編
Android組込み開発基礎コース Armadillo-440編
Android組込み開発基礎コース Armadillo-440編
Android組込み開発基礎コース Armadillo-440編
Android組込み開発基礎コース Armadillo-440編
Android組込み開発基礎コース Armadillo-440編
Android組込み開発基礎コース Armadillo-440編
Android組込み開発基礎コース Armadillo-440編
Android組込み開発基礎コース Armadillo-440編
Android組込み開発基礎コース Armadillo-440編
Android組込み開発基礎コース Armadillo-440編
Android組込み開発基礎コース Armadillo-440編
Android組込み開発基礎コース Armadillo-440編
Android組込み開発基礎コース Armadillo-440編
Android組込み開発基礎コース Armadillo-440編
Android組込み開発基礎コース Armadillo-440編
Android組込み開発基礎コース Armadillo-440編
Android組込み開発基礎コース Armadillo-440編
Android組込み開発基礎コース Armadillo-440編
Android組込み開発基礎コース Armadillo-440編
Android組込み開発基礎コース Armadillo-440編
Android組込み開発基礎コース Armadillo-440編
Android組込み開発基礎コース Armadillo-440編
Android組込み開発基礎コース Armadillo-440編
Android組込み開発基礎コース Armadillo-440編
Android組込み開発基礎コース Armadillo-440編
Android組込み開発基礎コース Armadillo-440編
Android組込み開発基礎コース Armadillo-440編
Android組込み開発基礎コース Armadillo-440編
Android組込み開発基礎コース Armadillo-440編
Android組込み開発基礎コース Armadillo-440編
Android組込み開発基礎コース Armadillo-440編
Android組込み開発基礎コース Armadillo-440編
Android組込み開発基礎コース Armadillo-440編
Android組込み開発基礎コース Armadillo-440編
Android組込み開発基礎コース Armadillo-440編
Android組込み開発基礎コース Armadillo-440編
Android組込み開発基礎コース Armadillo-440編
Android組込み開発基礎コース Armadillo-440編
Android組込み開発基礎コース Armadillo-440編
Android組込み開発基礎コース Armadillo-440編
Android組込み開発基礎コース Armadillo-440編
Android組込み開発基礎コース Armadillo-440編
Android組込み開発基礎コース Armadillo-440編
Android組込み開発基礎コース Armadillo-440編
Android組込み開発基礎コース Armadillo-440編
Android組込み開発基礎コース Armadillo-440編
Android組込み開発基礎コース Armadillo-440編
Android組込み開発基礎コース Armadillo-440編
Android組込み開発基礎コース Armadillo-440編
Android組込み開発基礎コース Armadillo-440編
Android組込み開発基礎コース Armadillo-440編
Android組込み開発基礎コース Armadillo-440編
Android組込み開発基礎コース Armadillo-440編
Android組込み開発基礎コース Armadillo-440編
Android組込み開発基礎コース Armadillo-440編
Android組込み開発基礎コース Armadillo-440編
Upcoming SlideShare
Loading in...5
×

Android組込み開発基礎コース Armadillo-440編

6,227

Published on

OESF公認
Android組込み開発基礎コース Armadillo-440編
公式トレーニングテキスト(日本語)

Contributed by:
【作成】株式会社OKIソフトウェア
    株式会社リーディング・エッジ社
    
【ご注意】
本テキストは、Creative Commons License BY-NC-SA 4.0のもとで提供されます。OESF会員またはコンソーシアムメンバーでない場合、本編の改変の有無にかかわらず、いかなる形態でも商用目的での利用は禁止されています。

Published in: Technology
0 Comments
12 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total Views
6,227
On Slideshare
0
From Embeds
0
Number of Embeds
6
Actions
Shares
0
Downloads
0
Comments
0
Likes
12
Embeds 0
No embeds

No notes for slide

Android組込み開発基礎コース Armadillo-440編

  1. 1. 20130317改変 Android組込み開発 基礎コース Armadillo-440 編 This material is licensed under the Creative Commons License BY-NC-SA 4.0. 0-0
  2. 2. テキストのご利用に関して ・ 本コースのテキストは、 Creative Commons License BY-NC-SA 4.0に基づいて提供されています。改変の有無にかかわらず、商用 目的での利用は禁止されています。 ・ 本教育プログラムは、その中で提供される教材全てを含め、OESF からのいかなる保証もなしに提供されます。OESFは、本コースの内 容またはコースの詳細な情報を使用することに起因して、または 誤って使用することに起因して何らかの障害や法的な行為が生じて も、いかなる責任も負いません。 This material is licensed under the Creative Commons License BY-NC-SA 4.0. 0-1 1
  3. 3. トレーニングの目的 • LinuxとAndroidの違いを理解します • LinuxとAndroidの起動手順の違いを理解します • 組込みLinuxとAndroidの開発環境を構築できるよ うになります • Androidのビルドおよび実機での動作方法を理解 します • 実機のデバッグ方法を理解します • 演習を通してプラットフォーム開発を体験します This material is licensed under the Creative Commons License BY-NC-SA 4.0. 0-2 2
  4. 4. 受講するに当たって必要なスキル • OSの概念を理解している事 • Java言語またはC/C++言語の開発経験がある事 – 基本的なJavaやC/C++の言語仕様について理解があれば 問題ありません • Linuxのコマンド操作経験がある事 – 演習では実際にLinuxコマンドを操作して移植作業を実 施します • Eclipseを使用した経験がある事 – Androidのアプリケーション開発はEclipseを使用しま す This material is licensed under the Creative Commons License BY-NC-SA 4.0. 0-3 3
  5. 5. 目次 1章. Linux概要 2章. Android概要 3章.ターゲットのボード 4章.実機でAndroidを動かす(実習) 5章.デバイスの組み込み 6章. NDK/JNI概要 7章. シリアルデバイスアプリケーション作成(実 習) This material is licensed under the Creative Commons License BY-NC-SA 4.0. 0-4 4
  6. 6. 第1章 Linux概要 This material is licensed under the Creative Commons License BY-NC-SA 4.0. 0-5
  7. 7. 1章の概要 • • • • • • Linuxとは ルートファイルシステム 起動シーケンス Initの概要 組み込み向けOS 組み込みLinux This material is licensed under the Creative Commons License BY-NC-SA 4.0. 0-6 6
  8. 8. Linuxとは?      1998年~ オープンソースで完全フリーで世界中で最もよく使われている GPLライセンス(ソースコードの公開義務) UNIX*1のクローンなのでUNIXの一部資産が流用可能 リーナス・トーバルズ氏が開発/公開したOS :カーネルのみの提供( kernel.org)  Linus中心の強固な管理体制と安定性の確保  主なLinuxシステム(ブートローダーやfsも含む)のディストリビューシ ョン  Debian系:パッケージ管理はdeb形式  Debian GNU Linux、Ubuntu: とが理念 コミュニティベース、100%フリーであるこ  RedHat系:パッケージ管理はRPM形式  Fedora、VineLinux : RedHatLinux後継のコミュニティによる実験 要素が強い *1 : UNIXは現在BSD系UNIXとして存続(FreeBSD,NetBSD) This material is Linux(商用)  RedHat Enterpriselicensed under the Creative Commons License BY-NC-SA 4.0. 0-7 7
  9. 9. Debian系Linuxの起動シーケンス Power ON or Reboot initrd 起動に必要なドライバが格納さ れている一時的なルートファイ ルシステム(初期RAMディス ク) /etc/initt ab BIOS ブートデバイスの専用ブロック読み出し ブートロー ダ Boot カーネル メモリに展開 基本設定 ・ネットワーク ・キーボード ・デバイス初期化 デーモンの起動 (rcスクリプト経 login:hogetaro 由) ini t シェル password: $ login LILO/GRUBなど 起動パラメータの設定 CPU初期化 ハードウェアのチェック ドライバ読みこみ 起動用ファイル(init) が ある領域のマウント initは以下のいずれかの場所にある /sbin/init, /etc/init, /bin/init, /bin/sh This material is licensed under the Creative Commons License BY-NC-SA 4.0. 0-8 8
  10. 10. Debian系Linuxのinitが行う設定 • initが行う各種設定はinittabに記載されている情報 を元に行う # デフォルトランレベル3 init デーモン 1 デーモン 2 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 3 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を 実行) 0-9 # 終了されると再実行 This material is licensed under the Creative Commons License BY-NC-SA 4.0. /etc/initt ab 9
  11. 11. Debian系Linux の inittabの書式 initdefa ult アクションの種 類 システム起動完了時に入るべきランレ ベル /etc/init.d/rcSがやること ∟/etc/default/rcSを実行 ∟/etc/rcS.d内のスクリプト全てを実行 • • • • • • ホスト名の設定 クロックの設定 キーマップの設定 言語とフォントの設定 ハードディスクの検査と修復 ハードディスクのマウント respawn プロセスが終了したらすぐに再起動す る ondemand respawnと同じだがオンデマンドラン レベルが指定された場合のみ実行する wait プロセスが終了するまで待機してラン レベルになったときだけ実行する once 指定ランレベルになったときだけ一度 だけ実行する ランレベルと動作モー ド 0 Halt off 何もしない 1 boot システム起動中に実行する シングルユーザモ ード bootwait システム起動中に実行し、プロセスが 終了するまで待機 2 3 4 マルチユーザモー ド (text) sysinit システム起動中に実行する( boot,bootwaitより先に実行される) 5 マルチユーザ(X) 6 reboot ctrlaltd el SIGINTを受け取ったときに実行する Commons License BY-NC-SA 4.0. This material is licensed under the Creative 0-10 10
  12. 12. Debian系Linux の ルートファイルシステム root / bin boot dev etc lib mnt(media) opt proc home/root sbin sys tmp usr var コマンド類 起動ファイル デバイスファイル 設定ファイル ライブラリ、カーネルモジュール マウントポイント 追加アプリケーション カーネル情報(cpu、process、メモリ情報の参照 ユーザのホームディレクトリ システム管理コマンド(shtdown、mountなど) システムレポジトリ 一時ファイル 各種ユーザプログラム 可変データ(ログ、キャッシュ、スプーラなど) This material is licensed under the Creative Commons License BY-NC-SA 4.0. 0-11 11
  13. 13. 組込み機器向けOSの条件 • 少ない資源(メモリ)で動作可 能 • リアルタイムオペレーティング システム This material is licensed under the Creative Commons License BY-NC-SA 4.0. 0-12 12
  14. 14. 従来の組込み向けOS OS名 VxWorks WindowsCE T-kernel T-kernel Extension Windows Phone7 iOS Symbian OS 提供 開発環境 主な用途 価格 対応PF ウィンドリバー Eclipse 組込み機器全般 有償 ソースコードは 別途購入 マイクロソフト Windows CE Toolkit for Visual C++/Visual BASIC (Visual Studio) 組込み機器全般 有償 Closed Source ARM他 多数 組込み機器全般 無償/有償 Open Source (ただし独自の ライセンス) ARM SH M32 Visual Studio WindowsPhone専用 プロプライエタ リ EULA形式の契約 書が必要 ARM Apple XCodeIDE iPhone/ iPad専用 プロプライエタ リ EULA形式の契約 書が必要 ARM Nokia Carbide C++ (Eclipse) MOAP,S60,UIQ3 携帯電話/スマー トフォン SDKは有償版と 無償版がある OpenSource 0-13 ARM T-Engineフォーラ ム MicroSoft Eclipse for PMC T-Kernel This material is licensed under the Creative Commons License BY-NC-SA 4.0. ARM他 多数 13
  15. 15. 組込み向けLinux OS名 MontaVista Linux 提供 米モンタビスタソフトウ ェア 主な用途 携帯電話向け 価格 対応PF 有償 x86、 PowerPCMIPS など Wind River Linux Wind River 組込み機器全般 有償 x86、 PowerPC、 MIPS、 Tizen Linux Foundation/LiMo Tizen Association 組込み機器全般 無償 オープンソース ARM Intel(X86) AxLinux アックス 組込み機器全般 有償 ARM、OMAP SHなど 組込み機器全般 オープンソース ソフトウェアコン ポーネント:提供 各社ライセンスに よる ARM他 多数 スマートフォン タブレット 無償 オープンソース ARM Lineo uLinux リネオ ソリューション ズ株式会社 Android Google & OHA 無償 ARM オープンソース OMAPなど Tizen Association・・・docomo, intel, orange, Panasonic, SAMSUNG, NEC, Sprint, HUAWEI, vodafoneなどが参加 Embedded Master OESF 組込み機器全般 This material is licensed under the Creative Commons License BY-NC-SA 4.0. 0-14 14
  16. 16. 組込みLinuxの特徴 • Linuxカーネルに少数のフリーソフトウェアを組み合わせ たもの • 組込みCPUアーキテクチャのサポート • ARM、MIPS、X86など • RAMや二次記憶装置などの容量が小さい • 2MB以下のメモリで起動可能 • 組込み機器のアプリケーションや対象ハードウェアに必要 な機能に特化 • MMUユニット※のないCPUでも動作可能(CONFIG_MMU=n) • シングルプロセッサに最適化可能(CONFIG_SMP=n) • NANDの直接使用(JFFS2、UBIFS) • ファイルシステム • マウント速度が速い(YAFFS2など) • 読み出し専用(romfs) This material is licensed under the Creative Commons License BY-NC-SA 4.0. ※MMU:メモリ管理ユニット 0-15 15
  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. This material is licensed under the Creative Commons License BY-NC-SA 4.0. 0-16 16
  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 Creative Commons License BY-NC-SA 4.0. 0-17 17
  19. 19. 組込みLinuxに関わる団体 • Linux Foundation (CE Linux Forumを吸収) • Linuxオペレーティングシステムの普及をサポートする非営利のコンソー シアム • 旧CE Linux Forumが開催する定期的な無料イベント開催 • 日本テクニカルジャンボリー http://tree.celinuxforum.org/CelfPubWiki/JapanTechnicalJamboreeGuidance • 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 Creative Commons License BY-NC-SA 4.0. 0-18 18
  20. 20. メモ マスタ タイトルの書式設定 This material is licensed under the Creative Commons License BY-NC-SA 4.0. 0-19
  21. 21. 第2章 Android概要 This material is licensed under the Creative Commons License BY-NC-SA 4.0. 0-20
  22. 22. 2章の概要 • Androidとは – 主な機能、歴史 • • • • Androidアプリケーションの動作環境 Androidのアーキテクチャ アプリケーション開発環境 プラットフォーム開発環境 – ソースコード – ルートファイルシステム – Androidの起動処理 • エミュレータ This material is licensed under the Creative Commons License BY-NC-SA 4.0. 0-21
  23. 23. Androidとは Androidとは GoogleとOHAが提供する携帯端末用プラットフォームである 主に携帯電話、タブレットなどのプラットフォームとして利用されている 現在では、携帯電話、タブレット問わずさまざまなハードウェアにAndroidは搭 載されている マスタ タイトルの書式設定 AndroidはOS AndroidはLinuxカーネルをベースにしたオープンソースなOSであるため多くのハ ードウェアメーカーからプラットフォームとして採用されている Androidのライセンス 主にApache2.0ライセンスなので複写・修正・再配布が自由 カーネルなどの一部はGPLライセンス This material is licensed under the Creative Commons License BY-NC-SA 4.0. 0-22
  24. 24. ハンドセット、タブレット以外の Android ノートPC MediaController 腕時計型 マスタ タイトルの書式設定 This material is licensed under the Creative Commons License BY-NC-SA 4.0. 0-23
  25. 25. Android組込みハードウェア マスタ タイトルの書式設定 2-24
  26. 26. Androidの主な機能 【プラットフォーム全般】 ブラウザによるWebサイトの閲覧 →ベースはオープンソースWebKitエンジン 2D、3Dグラフィック →カスタム2Dグラフィックライブラリ、 OpenGL/ES 軽量データベース →構造化されたデータ領域のためのSQLite搭載 一般的なオーディオ、ビデオと静止画フォーマットをサポート →MPEG4、H.264、MP3、AAC、AMR、JPG、PNG、GIF、WebM Dalvik VM(ダルビック バーチャルマシン) →JavaVMよりもモバイル端末などの低メモリ環境に最適化 Bluetooth、EDGE、3G、WiFi、カメラ、GPS、コンパス、加速度計 【開発】 リッチな開発環境(Eclipse、DDMSなど)と端末エミュレータ 豊富で整ったアプリケーションフレームワークと拡張の自由 →コンポーネントの再利用と置き換えが可能 This material is licensed under the Creative Commons License BY-NC-SA 4.0. 0-25 25
  27. 27. 豊富なインタフェース Androidのインタフェース NFC タッチパネル 各種センサ トラックボール カメラ GPS GPS ソフトキーボード/ハードキーボード NFC(Near Field Communication) Bluetooth Bluetooth マスタ タイトルの書式設定 This material is licensed under the Creative Commons License BY-NC-SA 4.0. タッチパネル 0-26
  28. 28. 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 Creative Commons License BY-NC-SA 4.0. 0-27 27
  29. 29. 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年 5月 Android SDK 3.1 発表 2011年 7 月 Android SDK 3.2 発表 2011年 10月 2011年 12月 Android SDK 4.0 Android SDK 4.0.3 2012年 6月 Android SDK 4.1! 2012年 11月 スマートフォン向け タブレット向 け Android SDK 4.2 スマートフォン向け と タブレット向けの融 合 This material is licensed under the Creative Commons License BY-NC-SA 4.0. 0-28 28
  30. 30. プラットフォーム Androidのバージョン一覧 1.5 2.3 Cupcake Gingerbread Donuts HoneyComb 2.0–2.1 4.0 Eclair Ice Cream Sandwich 2.2 4.1-4.2 Froyo Jelly Bean マスタ タイトルの書式設定 3.0–3.2 1.6 2-29
  31. 31. Androidのバージョン 2.x系 2.x系の新機能 Version コードネーム APIレベル リリース 新機能 2.0/2.1 Eclair 5, 6, 7 2009/10/26 (2.0) 2009/12/3 (2.0.1) 2010/1/12 (2.1) • マルチタッチ • LiveWallPaper • Bluetooth マスタ タイトルの書式設定 2.2 Froyo 8 2010/5/21 • Dalvik VM にJITコンパイラを搭載 (2〜5倍高速化) • クラウドとデバイスの連携API (C2DM) • テザリング対応 • Adobe Flash対応 • インストール済アプリの自動更 新 2.3 Gingerbread 9, 10 2010/12/6 • • • • • • ゲームのための改良 並列GC(目標3ms以下の停止) NFC(近距離無線通信)対応 複数のカメラを扱えるAPIの追加 SIPの標準サポート バッテリー管理機能の向上 This material is licensed under the Creative Commons License BY-NC-SA 4.0. 0-30
  32. 32. Androidのバージョン 3.x系 3.xの新機能 Version コードネー ム APIレベル リリース 新機能 3.0 Honeycomb 11 2011/2/22 • 大型ディスプレイに最適化 • タブレット専用となった • マルチコアプロセッサのサポート 3.1 Honeycomb 12 2011/5/10 • • • • 3.2 Honeycomb 13 2011/7/15 • 広範囲なタブレット向けの最適化 • SDカードに対してのメディア同期 • スクリーンサポートの拡張 マスタ タイトルの書式設定 ユーザーインターフェースの改善 オープンアクセサリAPI USBホストAPI マウス、ゲームパッド、ジョイス ティックからの入力 • ホームスクリーンウィジェットのサ イズ変更 This material is licensed under the Creative Commons License BY-NC-SA 4.0. 0-31
  33. 33. Androidのバージョン 4.x系 4.xの新機能 Version コードネー ム APIレベル リリース 新機能 4.0 Ice Cream Sandwich 14, 15 2011/10/08 • • • • • • • • • 4.1 Jelly Bean 16 2012/06/27 • • • • • • • ハンドセットとタブレットのUIの統合 Android Beam WiFi Direct Bluetooth Health Device Profile Notificationの向上 ロック画面で、カメラと音楽の操作 ランチャーのアプリ管理の改善 画像や動画のエフェクト 正確なカメラの測光、顔認識 マスタ タイトルの書式設定 Systrace アクセシビリティの拡張 双方向テキスト対応 Unicode 6.0 の絵文字対応 Notificationの拡張 リサイズ可能なアプリウィジェット ライトアウト・フルスクリーンモードへ の遷移API • Remoteable View の追加 • デバイスの追加と除去の検知 • Android Beam の改善 This material is licensed under the Creative Commons License BY-NC-SA 4.0. 0-32
  34. 34. Androidのバージョン 4.x系 4.xの新機能 Version コードネーム APIレベル リリース 新機能 • マルチアカウント • クイック設定 • フォトギャラリーのアップデート。360 度撮影。 • ジェスチャ文字入力 • Miracast ワイヤレスディスプレイ • Google Play 以外からインストールするア プリにもマルウェアスキャン マスタ タイトルの書式設定 4.2 Jelly Bean 17 2012/11/13 This material is licensed under the Creative Commons License BY-NC-SA 4.0. 0-33
  35. 35. Androidのアーキテクチャ アプリケーション Home Contacts Phone Browser 自作アプリ ・・ ・ アプリケーションフレームワーク アクティビティ マネージャ ウィンドウ マネージャ コンテンツ プロバイダ ビューシステム 通知マネージャ パッケージ マネージャ 電話 マネージャ リソース マネージャ 位置 マネージャ XMPP サービス ライブラリ 自作 フレームワーク Androidランタイム サーフェス マネージャ メディア フレームワーク SQLite コアライブラリ OpenGL | ES FreeType WebKit Dalvik 仮想マシン SGL SSL Libc 自作ライブラリ HARDWARE ABSTRACTION LAYER Graphics Audio Camera Radio(RIL) WiFi ディスプレイ ドライバ Bluetooth ドライバ カメラドライバ フラッシュメモリ ドライバ バインダ(IPC) ドライバ キーパッド ドライバ USBドライバ WiFiドライバ オーディオ ドライバ 電源管理 ・・・ Linuxカーネル 2.6 This material is licensed under the Creative Commons License BY-NC-SA 4.0. 自作ドライバ 0-34 34
  36. 36. カーネルとネイティブライブラリ • Linuxカーネル2.6がベース ベースに) – – – – (ただし4.0以降のカーネルはほぼ3.1 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 Creative Commons License BY-NC-SA 4.0. 0-35 35
  37. 37. 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 .class .jar 異なる Dalvik VM .dex This material is licensed under the Creative Commons License BY-NC-SA 4.0. 0-36 36
  38. 38. アプリケーション層 • アプリケーションフレームワーク – Androidアプリケーション作成のための拡張可能なJavaのコンポーネ ント類 項目 説明 アクティビティマネー ジャ アプリケーションのライフサイクルや画面の共通バックスタックを管理 ウィンドウマネージャ ウィンドウの配置や外観を管理するシステムソフトウェア コンテンツプロバイダ パッケージ間(異なるアプリケーション間)でデータ共有を行う手段を提 供する ビューシステム UIの制御 通知マネージャ メッセージの到着、時間、アラームなどのイベント通知(ステータスバー やトーストなど) パッケージマネージャ アプリのインストール、更新、削除などを管理 電話マネージャ 電話の状態や通話機能を管理 リソースマネージャ アプリで使用するリソースの管理 位置マネージャ GPSデバイスによる位置情報取得や更新などを実現、管理 XMPPサービス XMPP(IMのメッセージ交換やログイン状況の通知用通信プロトコル)の サービスを管理 This material is licensed under the Creative Commons License BY-NC-SA 4.0. 0-37 37
  39. 39. アプリケーション層 • アプリケーション – Google製標準アプリケーション • アラーム時計、Bluetooth、ブラウザ、電卓、カメラ、コンタ クトリスト、 検索ボックス、電子メールクライアント、ギャラリー、3Dギャ ラリー、 インスタントメッセージ、ランチャー、音楽再生、 パッケージインストーラ、電話、システム設定、音声レコー ダ、 スピーチレコーダー・・・など – 独自アプリケーションはこのレイヤに該当する This material is licensed under the Creative Commons License BY-NC-SA 4.0. 0-38 38
  40. 40. アプリケーション開発の手法 アプリケーション アプリケーション アプリケーション アプリケーション アプリケーションフレームワーク JNI JNI JNI dalvikVM ライブラリ 自前のライブラリ Webkit OpenGLES OpenGLES OpenGLES ・・・ HAL Graphics Audio Camera Radio(RIL) WiFi ・・・ BIONIC Libc othread Libm Linker ・・・ Linuxカーネル 2.6 デバイスドライバ This material is licensed under the Creative Commons License BY-NC-SA 4.0. 0-39 39
  41. 41. アプリケーション開発環境 項目 必要な環境 OS Windows XP, Windows Vista(32 / 64 bit) Mac OS X 10.5.8以降(x86のみ) Linux(Ubuntu Hardy Herson、Lucid Lynx にてテス ト済) Java JDK Android開発ツール 統合開発環境 JDK 6 Android SDK 3.7(Indigo) 以降 Android Development Tools(ADT) Plug-in テキストベース 開発環境 Apache Ant(Windows版は1.7, Mac/Linux版は1.6.5以 降) *必要なマシンスペックは http://developer.android.com/intl/ja/sdk/requireme This material is licensed under the Creative Commons License BY-NC-SA 4.0. 0-40 40
  42. 42. プラットフォーム開発環境 項目 必要な環境(共通) スペック CPU:2G以上、 メモリ:2G以上 ハードディスク空き容量:80G以上(プラットフォームひとつあたり20G ) ネットワーク常時接続 ソースコード入手先 項目 Android Open Source Project (AOSP) Froyo(2.2)より古いAndroidのソースコード取得やビルドに必要な環境 ホストOS 必要なツール 項目 ホストOS 必要なツール Mac OS X 10.5.8以降(x86のみ) 32bit_Linux(Ubuntu 8.04 以上)(64bitLinuxの場合は下表参照) Python 2.6 - 2.7、 git1.7以上、 GNU Make 3.81 -- 3.82、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のソースコード取得やビルドに必要な環 境 64bit_Linux(Ubuntu 10.04 以上) Python 2.6 - 2.7、 git1.7以上、GNU Make 3.81 -- 3.82、 JDK6 git-core gnupg flex bison gperf build-essential zip curl zlib1gdev gcc-multilib g++-multilib libc6-dev-i386 lib32ncurses5-dev ia32-libs x11proto-core-dev libx11-dev lib32readline5-dev lib32zdev This material is licensed under the Creative Commons License BY-NC-SA 4.0. 0-41 41
  43. 43. 組込み開発とは 組込み機器のプラットフォーム開発はネイティブ言語で開発(gcc)を行う 【必要な作業】 1. ホストPCにてクロス開発環境構築 – 2. 3. ホストPCにてカーネル作成 ターゲットボードに移植 – 4. 5. ターゲットボードのチップのアーキテクトに適用したクロスコンパイル環境で あること (ARM, x86, ・・・) (必要であれば)デバイスドライバ作成、組み込み ホストPCにてユーザランド作成 ターゲットボードのメモリに書き込み、起動、評価 【ターゲットボードに最低限必要なインタフェース】 – – – ネットワークポート(LANなど) シリアルポート(RS232Cなど) JTAG (ICE接続などに使用) This material is licensed under the Creative Commons License BY-NC-SA 4.0. 0-42 42
  44. 44. Androidのクロス開発環境 Ubuntu 追加パッケージ ホストPC (X86) Ubuntu on VMWarePlayer ターゲットボード (ARM) Armadillo-440 LAN or シリアル AOSP ボードベンダなど ソースコード取得 編集 コンパイル カーネルイメージ作成 ユーザランドのルートファイルシステム作成 実機へ転送 デバッグ *1 : コンパイラ(gcc)、プリプロセッサ & リンカ & アセンブラ(bin-utility)、 Cライブラリ、ダイナミックローダ などビルドに必要なツール一式 *2 : Linuxカーネル、ユーザランドのソースコード *3 : ボードに搭載しているハードウェアに依存するドライバやAndroidとの差異を吸収するパッチ ブートローダーなど This material is licensed under the Creative Commons License BY-NC-SA 4.0. 0-43 43
  45. 45. 本実習で使用するホストPC構成 ゲストOS Ubuntu ver. 10.04.LTS 32_bit x86版 VMWarePlayer ver.4.04 ホストPC WindowsXP SP3 or 7 (32_bit x86マシン) VMWare Player入手先サイト 下記サイトからメジャーバージョン4.0、マイナーバージョン4.04を選択し、 「VMware Player for Windows 32-bit and 64-bit」をダウンロードします https://my.vmware.com/jp/web/vmware/free#desktop_end_user_computing/vmware_player/4_0|P LAYER-406|product_downloads Ubuntu 10.0.4LTS入手先サイト Ubuntu 10.0.4LTS CDイメージ(iso) はサポート期間が終了してしまったため、下記 サイトから 「PC (Intel x86) alternate install CD」をダウンロードします。 http://releases.ubuntu.com/lucid/ This material is licensed under the Creative Commons License BY-NC-SA 4.0. 0-44 44
  46. 46. Ubuntu on VMWarePlayer インストールウィ ザードに 必要な項目を入力し てインストール開始 ディスクトップ にVMWarePlayer のショートカッ トができるので ダブルクリック This material is licensed under the Creative Commons License BY-NC-SA 4.0. 0-45
  47. 47. Ubuntu on VMWarePlayer ディスク容量…80G ネットワーク…NAT メモリ…最低2G以上割り当てる This material is licensed under the Creative Commons License BY-NC-SA 4.0. 0-46 46
  48. 48. Ubuntu on VMWarePlayer Ubuntuのisoイメージをダウンロードした場所 「ISOイメージ ファイルを使用 する」にチェッ クをいれて 参照ボタン押下 「OperationSystem not found」 と表示されて止まったらEnterキーを押下 This material is licensed under the Creative Commons License BY-NC-SA 4.0. 0-47 47
  49. 49. Ubuntu on VMWarePlayer インストール ウィザードに 必要な項目を 入力してイン ストール開始 インストール が完了すると 再起動を促さ れるので再起 動をする This material is licensed under the Creative Commons License BY-NC-SA 4.0. 0-48 48
  50. 50. Ubuntu on VMWarePlayer 初回インストール時はアップデートマネージャにてセキュリティ アップデートをする *社内ネットワークなどproxyの関係で失敗する場合はproxyの設定を正しく行ってからリ トライしてください 0-49 This material is licensed under the Creative Commons License BY-NC-SA 4.0. 49
  51. 51. 本実習のクロス開発環境の構築 ホストPCがUbuntu ver.10.0.4LTS (32_bit x86版)の場合 必要なツールのインストール $ sudo apt-get install git-core gnupg flex bison gperf libsdl-dev libesd0-dev libwxgtk2.6-dev build-essential zip curl libncurses5-dev zlib1g-dev $ sudo apt-get install valgrind $ sudo apt-get install libreadline5-dev JDK5のインストール Oracleのサイトからlinnux用のバイナリをダウンロードします( jdk-1_5_0_22-linuxi586.bin) http://www.oracle.com/technetwork/java/javasebusiness/downloads/java-archivedownloads-javase5-419410.html#jdk-1.5.0_22-oth-JPR $ chmod a+x jdk-1_5_0_22-linux-i586.bin $ ./jdk-1_5_0_22-linux-i586.bin $ mv jdk1.5.0_22 java-5-oracle $ sudo mkdir /usr/lib/jvm $ sudo mv java-5-oracle /usr/lib/jvm This material is licensed under the Creative Commons License BY-NC-SA 4.0. 0-50 50
  52. 52. 本実習のクロス開発環境の構築 JDK5のインストール(続き) 下記の/update-java-0.5bツールを実行後ダイアログが表示されるので 「/usr/jvm/java-5-oracle」を選択して「OK」すれば完了 $ wget http://webupd8.googlecode.com/files/update-java-0.5b $ chmod +x update-java-0.5b $ sudo ./update-java-0.5b repoのインストール $ mkdir ~/bin $ curl http://android.git.kernel.org/repo >~/bin/repo $ chmod a+x ~/bin/repo ※export PATH=$PATH:~/bin を .bashrc へ追記 ホストPCがUbuntu 10.0.4 (64bit x86版)の場合:http://source.android.com/source/downlo 0-51 This material is licensed under the Creative Commons License BY-NC-SA 4.0. 51
  53. 53. android open source project (AOSP) http://source.android.com/ Androidのソースコードはgitプロジェクト単位(リポジトリ)にTree構 造となっている コミッターは個々のリポジトリをフォークして変更を加え、本Treeにコ ミットしている AOSPのkernel以外の全リポジトリは https://android.googlesource.com/platform/manifest 0-52 This material is licensed under the Creative Commons License BY-NC-SA 4.0. で管理されている 52
  54. 54. Android のバージョン対応表 Androidの指定バージョンのソース コードを取得する場合はAOSPの BuildNumbersで記載されている Code nameまたはTagを指定する Code name Version API level (no code name) 1.0 API level 1 (no code name) 1.1 API level 2 Cupcake 1.5 API level 3, NDK 1 Donut 1.6 API level 4, NDK 2 Eclair 2.0 API level 5 DMD64 android-1.6_r1.5 latest Donut version Eclair 2.0.1 API level 6 EPF21B android-2.1_r2.1p2 latest Eclair version Eclair 2.1 API level 7, NDK 3 FRK76C android-2.2.3_r2 latest Froyo version Froyo 2.2.x API level 8, NDK 4 GWK74 android-2.3.7_r1 Gingerbread 2.3 - 2.3.2 API level 9, NDK 5 latest Gingerbread version, Nexus S 4G ITL41D android-4.0.1_r1 Gingerbread 2.3.3 - 2.3.7 API level 10 earliest IceCreamSandwich version, Galaxy Nexus Honeycomb 3.0 API level 11 ITL41D android-4.0.1_r1.1 Galaxy Nexus Honeycomb 3.1 API level 12, NDK 6 ITL41F android-4.0.1_r1.2 Galaxy Nexus ICL53F android-4.0.2_r1 Galaxy Nexus Honeycomb 3.2.x API level 13 IceCreamSandwich 4.0.1 - 4.0.2 IceCreamSandwich 4.0.3 Build Tag IML74K android-4.0.3_r1 API level 14, NDK IML77 7 This material is licensed under the Creative Commons License BY-NC-SA 4.0. API level 15 Notes Nexus S latest IceCreamSandwich 0-53 version 53
  55. 55. Androidのソースコード管理 (Git) • Gitとは – 分散型バージョン管理システム – 複数リポジトリ間での変更履歴のやり取りが可能 – Linux kernelのソースコード管理に利用されている 【gitサーバにあるリポジトリのコピー】 $ git clone https://android.googlesource.com/platform/manifest + project path 例1:フレームワーク関連の最新のソースコードを取得する場合 $ git clone https://android.googlesource.com/platform/frameworks/base.git 例2:フレームワーク関連のFroyoのソースコードを取得する場合 $ git clone https://android.googlesource.com/platform/frameworks/base.git –b android-2.2.3_r2 または clone https://android.googlesource.com/platform/frameworks/base.git –b froyo $ git This material is licensed under the Creative Commons License BY-NC-SA 4.0. 0-54 54
  56. 56. Androidのソースコード管理 (repo) • repoとは – Gitの複数リポジトリを一括で管理するためのツール 【gitサーバにあるkernel以外のすべての標準プロジェクトを 一括で取得】 $ repo init -u https://android.googlesource.com/platform/manifest project path $ repo sync + $ repo init -u https://android.googlesource.com/platform/manifest 例1:最新のソースコードを一括取得するためのリポジトリの作成する場合 $ repo init -u https://android.googlesource.com/platform/manifest –b android例2:Froyoのソースコードを一括取得するためのリポジトリの作成する場合 2.2.2_r1 または init -u https://android.googlesource.com/platform/manifest $ repo This material is licensed under the Creative Commons License BY-NC-SA 4.0. –b froyo 0-55 55
  57. 57. AOSPのソースコード取得 android-2.2.2_r1のタグのついたAndroid2.2(Froyo)のコードを取得するには $ mkdir mydroid $ cd mydroid $ repo init -u https://android.googlesource.com/platform/manifest –b android2.2.2_r1 $ repo sync 上記 repo init コマンドでレポジトリの初期化を行うと.repoディレクトリが生成 $ ls .repo msnifst.xml@ manifests/ manifests.git/ repo/ manifest.xml@ (-> manifests/default.xml) にはrepo が管理する対象のプロジェ クトが定義 manifest.xml にないプロジェクトの追加またはmanifest.xml からプロジェクトを外す場合 local_manifest.xml を作成することによってカスタム設定が可能 <?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> パス名 プロジェクト名 指定のタグ名(任意) This material is licensed under the Creative Commons License BY-NC-SA 4.0. 0-56 56
  58. 58. repo sync 後のソースコードツリー mydroid/ bionic/ bootable/ build/ cts/ dalvik/ development/ external/ frameworks/ hardware/ packages/ prebuild/ system/bluetooth system/core system/extras Android用に開発されたCライブラリ ブートローダーリファレンスコード ビルドシステム テストスイート 仮想マシンDalvik 開発ツール、SDK、サンプルコード AOSP以外の外部オープンソースプロジェクト Androidアプリケーションフレームワーク ハードウェアライブラリとRadio Interface 標準的なAndroidアプリケーションとサービス ビルドに必要な各種バイナリファイル Bluetoothツール 最小限の実行環境 低級なデバック、テストツール This material is licensed under the Creative Commons License BY-NC-SA 4.0. 0-57 57
  59. 59. ソースコード詳細(packages) • packages -> アプリケーションレイヤ – apps : Android標準搭載アプリケーションのソース コード – inputmethods : 入力用メソッドのソースコードが格 納 – providers : Android標準搭載サービスのソースコー ド – experimental : 製品には入らないテストツール – wallpapers : ライブ壁紙のソースコード This material is licensed under the Creative Commons License BY-NC-SA 4.0. 0-58 58
  60. 60. ソースコード詳細 (packages/frameworks) • frameworks -> フレームワークレイヤ – base • Androidフレームワークのソースコードと各種サービスのソー スコード • base/core : Androidランタイムのコアライブラリ • base/libs : 外部プロジェクトのライブラリ – opt : googleや絵文字のライブラリソースコード – policies : mid、phoneの構成情報 • dalvik -> Androidランタイム – Dalvik仮想マシン本体の関連クラスライブラリ This material is licensed under the Creative Commons License BY-NC-SA 4.0. 0-59 59
  61. 61. ソースコード詳細(bionic/external) • external -> ライブラリレイヤ – 外部プロジェクトのライブラリ • bionic -> ライブラリレイヤ – BSDライセンス – POSIX標準Cライブラリのすべての機能は実装してい ない – 未サポート機能 • • • • • C++例外 pthreadキャンセル pthread_coreのinitメソッドからスローされたC++例外 pthread_coreのfork()するinitメソッド ロケールとワイルドキャラクタ(UnicodeライブラリICUで代 替) This material is licensed under the Creative Commons License BY-NC-SA 4.0. • ユーザアカウント関連のメソッド(getpwdなど) 0-60 60
  62. 62. ソースコード詳細(hardware) • hardware -> HAL – broadcom : Broadcomの無線ドライバ – libhardware :外部モジュールで構成されたデバイスドラ イバ制御用ラッパーライブラリ (外部モジュールの配置場所は/system/libs/hw配下) – libhardware_legacy : スタティックリンクされる定義で 構成されたデバイスドライバ制御用ラッパーライブラリ (WiFi、バイブレーション、電源、GPSなど) – msm7k : QualcommのMSM7K関連 – qcom : QualcommのGPSドライバ – ril : Radio Interface Layer テレフォニーサービスのベースバンドIF – ti : TIの無線ドライバ This material is licensed under the Creative Commons License BY-NC-SA 4.0. 0-61 61
  63. 63. ソースコード詳細(system) •system –Initなどの基本的なプロセスのコードやシステム ファイルなど –bluetooth : bluetoothのソースコード –core : 必要最小限の実行環境、基本的なコマンド 類 –extras : デバッグ、テストツールが格納 –netd : ネットワーク設定制御用デーモン –vold : ボリュームデーモン、各種メディアのマウ ント –wlan : TIの無線関連のソースコード This material is licensed under the Creative Commons License BY-NC-SA 4.0. 0-62 62
  64. 64. ソースコード詳細(開発環境関連) • 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 Creative Commons License BY-NC-SA 4.0. 0-63 63
  65. 65. ソースコード詳細(開発環境関連) • cts – 互換性テストスイーツ、デバイスの互換性をテストするためのツ ール など – Android認証テスト – Android Marketなどを使用できるようにするにはGoogleの認証が必要 – CTSが通らなければAndroid端末として認証されない(かなり厳格) This material is licensed under the Creative Commons License BY-NC-SA 4.0. 0-64 64
  66. 66. Androidのエミュレータと実機 プラットフォームが入れ替わるだけで実はエミュレータと実機は同じ ARMのエミュレートをしているのはQEMUエンジン Javaプログラム Dalvik VM Javaプログラム Dalvik VM Linux ARM版 Linux ARM版 ARM仮想マシン (QEMU) PC ARM実機マシン Androidエミュレータ Android実機マシン This material is licensed under the Creative Commons License BY-NC-SA 4.0. 0-65 65
  67. 67. Androidの起動シーケンス Power ON or Reboot BootROM /init.rc 基本設定 ・ネットワーク ・キーボード ・デバイス初期 化 サービスの起動 ブートローダ Boot カーネル メモリに展開 /in it ブートデバイスの専用ブロック読み出し U-Boot or Hermit 起動パラメータの設定 CPU初期化 ハードウェアのチェック, ドライバの読みこみ 起動用ファイルがある領域の マウント kernelの起動パラメータ設定時 必ずinit=/initを指定すること Home画面 デフォルトの設定ではカーネルは /sbin/init、/etc/init、/bin/init、 /bin/sh にinitを探しにいくので正常に起動でき 0-66 ない This material is licensed under the Creative Commons License BY-NC-SA 4.0. 66
  68. 68. Android カーネルの起動パラメータ 本実習で使用するArmadillo-440はブートローダにhermitを使用します カーネルの起動パラメータを設定するためには、開発PCとArmadillo-440を RS232Cで接続後、hermitプロンプトからsetenvコマンドで以下のように設 定します hermit>setenv␣console=ttymxc1␣root=/dev/mmcblk0p2␣init=/init␣noinitrd␣ rootwait パラメータ 説明 console=ttymxc1 カーネルコンソールはデバイスttymxc1を使用 noinitrd initrd(初期RAMディスク)を使用しない root=/dev/mmcblk0p2 MMC(SDカード)の2番目のパーティションをルートファイルシ ステムとする rw Read/Writeでルートファイルシステムをマウント rootdelay=1 ルートファイルシステムをマウントする前に指定秒間待機 rootwait ルートファイルシステムがアクセス可能になるまで待機 nfsroot nfsrootNFSを使用する場合に、ルートファイルシステムの場所 やNFSオプションを指示 init=/init initの実行ファイルはルート直下にあるinitを使用 This material is licensed under the Creative Commons License BY-NC-SA 4.0. 0-67 67
  69. 69. Androidのinit init /system/core/init/init.c int main(int argc, char **argv) { ブート処理 /dev、/proc、/sysをマウン ト /init.rc をパースして実行 - action_list作成 - service_list作成 起動時に一度だけ実行される /init.<hardware名>.rc をパースして実行 - action_list作成 - service_list作成 for(;;){ デーモン処理 システムが動作している限 り 繰り返し実行される } } ファイルディスクリプ タの 監視 This material is licensed under the Creative Commons License BY-NC-SA 4.0. device_fd property_fd signal_fd keychord_fd 0-68 68
  70. 70. 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 Creative Commons License BY-NC-SA 4.0. 0-69 69
  71. 71. 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 Creative Commons License BY-NC-SA 4.0. 0-70 70
  72. 72. Androidのルートファイルシステム data root / キャッシュ、追加パッケージなど格納ディレクト (R/W) dev デバイスファイル格納ディレクトリ proc Linux設定ファイル格納ディレクトリ sys システムファイル格納ディレクトリ sbin adbd実行ファイル格納ディレクトリ system 次頁参照 init 起動処理実行ファイル init.armadillo440.rc initが実行するターゲットボード固有 起動用シェルスクリプト init.rc initが実行するAndroid固有起動用シェルスクリ default.prop Androidデフォルトプロパティ init.goldfish.rc エミュレータ起動用シェルスクリプト initlogo.rle 起動時のロゴの画像ファイル (RGB888のRAW形式をRLE形式に変換した画像 ) This material is licensed under the Creative Commons License BY-NC-SA 4.0. 0-71 71
  73. 73. Androidのルートファイルシステム app /system/ bin etc fonts framework lib usr xbin build.prop プリインストールのアプリケーション ファイル(.apk) 各種一般的なLinuxコマンド 設定用シェルスクリプトなど フォントファイル(.ttf) javaのandroidのライブラリ(.jar) ネイティブライブラリ(.so) キー設定ファイルなど root用のコマンドなど Androidデフォルトプロパティ This material is licensed under the Creative Commons License BY-NC-SA 4.0. 0-72
  74. 74. 1章と2章のまとめと次回予告 以上で一般的なLinuxの概要とAndroidの概要に ついて学びました 次章からは本実習で使用するターゲットボードの 理解とAndroidを動作させる方法について学びます This material is licensed under the Creative Commons License BY-NC-SA 4.0. 0-73
  75. 75. メモ This material is licensed under the Creative Commons License BY-NC-SA 4.0. 0-74
  76. 76. 第3章 ターゲットのボード This material is licensed under the Creative Commons License BY-NC-SA 4.0. 0-75
  77. 77. 3章の概要 • • • • • 代表的なターゲットボード Armadillo-500fxの構造 Armadillo-500fxのメモリ構成 Armadillo-440の構造 Armadillo-440のメモリ構成 This material is licensed under the Creative Commons License BY-NC-SA 4.0. 0-76
  78. 78. 各種ターゲットボード ボード名 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+mic roSD - オーディオ入 出力 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+mic roSD 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 Creative Commons License BY-NC-SA 4.0. 0-77
  79. 79. ターゲットボード ボード名 提供元 購入先 価格 Armadillo-440 液晶モデル開発セット アットマークテクノ社 アットマークテクノ社 128,000(税込) Armadillo-500fx液晶モデル開発セッ ト アットマークテクノ社 アットマークテクノ社 63,000(税込) Armadillo-800EVA評価セット アットマークテクノ社 アットマークテクノ社 99,750(税込) BeagleBoard TI/Digi-Key Beagleboard.org Digi-Key $125 BeagleBoard-xM TI/Digi-Key Beagleboard.org Digi-Key $149 PandaBoard Pandaboard.org Digi-Key 14,061(送料 ・消費税・関税 込) PandaBoard-ES Pandaboard.org Digi-Key 15,136(送料 ・消費税・関税 込) This material is licensed under the Creative Commons License BY-NC-SA 4.0. 0-78
  80. 80. Armadillo440 This material is licensed under the Creative Commons License BY-NC-SA 4.0. 0-79
  81. 81. Armadillo440 プロセッサ CPUコア Freescale i.MX257 (MCIMX257) ARM926EJ-S CPUコアクロック 400MHz BUSクロック 133MHz メモリ 128MB (LPDDR) 32MB (NOR) USB USB2.0×2(High Speed/FullSpeed) タッチパネルインタ ーフェースボード 抵抗膜式タッチスクリーンコントロ ーラー SD シリアルポート microSDスロット RS232C、 オーディオ I2S I/F、デジタルオーディオCODEC 画像出力 18bit LCD I/F、DATA IMAGE社製LCD インターフェース EthernetFXボード LAN (10BASE-T/100BASE-TX ) This material is licensed under the Creative Commons License BY-NC-SA 4.0. 0-80
  82. 82. Armadillo440-通常Linux 開発用PC カーネルの起動パラメータ [armadillo] hermit> clearenv [armadillo] hermit> setenv [armadillo] hermit> boot シリアル通信ソフ ト NOR Flashメモリ(32M) linux-440.bin.gz をRAMにロードして実行 bootloader ブートローダ領域(Hermit) kernel Linuxカーネル領域 userland Linuxユーザランド領域 linux-romfs440をマウント 各プロセスの実行 config Linuxカーネルパラメータ保存領域 通常Linuxが起動 This material is licensed under the Creative Commons License BY-NC-SA 4.0. 0-81 81
  83. 83. 参 考 Armadillo440-Androidデバッグ時 (NFSブート) 開発用PC カーネルの起動パラメータ [armadillo] hermit> setenv␣console=ttymxc0,␣115200␣root=/dev/nfs␣rw␣nfsroot=192.16 8.1.10:/home/mydoroid/out/target/product/genelic/root␣init=/i nit␣ip=102.168.1.11␣noinitrd [armadillo] hermit> boot NOR Flashメモリ(32M) linux-440android.bin.gzをRAMに ロードして実行 シリアル通信ソ フト Androidユーザランド android-rootfs 192.168.1.1 0 bootloader ブートローダ領域(Hermit) Android対応kernel Linuxカーネル領域 linux-440-android.bin userland Linuxユーザランド領域 config Linuxカーネルパラメータ保存領域 NFSルートマウント root=/dev/nfs マウント 各プロセスの実行 Androidが起動 LAN接続 192.168.1.11 This material is licensed under the Creative Commons License BY-NC-SA 4.0. 0-82
  84. 84. Armadillo440-Androidデバッグ時 (microSDブート) 開発用PC カーネルの起動パラメータ [armadillo] hermit> setenv␣console=ttymxc1␣root=/dev/mmcblk0p2␣init=/init␣noinitr d␣rootwait [armadillo] hermit> boot シリアル通信ソフ ト NOR Flashメモリ(32M) linux-440-android.bin.gz をRAMにロードして実行 組み込み済み bootloader ブートローダ領域(Hermit) Android対応kernel ルートマウント root=/dev/mmcblk0p2 マウント 各プロセスの実行 Linuxカーネル領域 linux-440-android.bin userland /dev/mmcblk0 microSD Android /dev/mmcblk0p2 rootfs Linuxユーザランド領域 config Androidが起動 Linuxカーネルパラメータ保存領域 This material is licensed under the Creative Commons License BY-NC-SA 4.0. 0-83
  85. 85. Armadillo440-Android 製品イメージ 開発用PC カーネルの起動パラメータ [armadillo] hermit> clearenv [armadillo] hermit> boot シリアル通信ソフ ト NOR Flashメモリ(32M) linux-440-android.bin.gz をRAMにロードして実行 組み込み済み bootloader ブートローダ領域(Hermit) Android対応kernel Linuxカーネル領域 linux-440-android.bin Androidのルートをマウント 各プロセスの実行 Androidが起動 /dev/mmcblk0 /dev/mmcblk0p1 マウント Android /system(RO) Androidルート Root(RO) config microSD /dev/mmcblk0p2 マウント Android /dara(RW) Linuxカーネルパラメータ保存領域 This material is licensed under the Creative Commons License BY-NC-SA 4.0. 0-84
  86. 86. メモ This material is licensed under the Creative Commons License BY-NC-SA 4.0. 0-85
  87. 87. 第4章 実機でAndroidを動かす This material is licensed under the Creative Commons License BY-NC-SA 4.0. 0-86 86
  88. 88. 4章の概要 • • • • • • • • • 目指すシステム Androidソースコード取得 Androidカーネルイメージ作成 Androidユーザランドのファイルシステム作成 Androidユーザランドのファイルシステム構成 Armadillo-440の標準Linuxとネットワーク設定 Android起動用microSDの準備とAndroidカーネルの準備 Android起動 デバッグ環境の構築 – – – – Android SDK のインストール ネットワーク設定 ddms adbコマンドとadb shellコマンド This material is licensed under the Creative Commons License BY-NC-SA 4.0. 0-87 87
  89. 89. 本章で目指すシステム Armadillo-440に搭載させたmicroSD内のEM3で起動 する /dev/mmcblk0 microSD Android rootfs /dev/mmcblk0p2 This material is licensed under the Creative Commons License BY-NC-SA 4.0. 0-88 88
  90. 90. Linuxコマンドの復習 ●UbuntuのターミナルのシェルではTabキーでディレクトリ名やファイル名の補完ができま す ●ホームディレクトリについて 本実習の開発環境におけるユーザ(aj741327)のホームディレクトリは以下のディレクトリ です /home/aj741327 ●Linuxではホームディレクトリのことを【 ~/ 】で簡略化して表現することができます。 <使用例> ホームディレクトリにあるworkというディレクトリに移動したい場合 cd /home/aj741327/work cd ~/work 同じ ●ワイルドカード「*」 Aというディレクトリ内にあるすべてのjavaのソースファイルをまとめて指定したいときな ど「*」を利用して 以下のように指定できます A/*.java This material is licensed under the Creative Commons License BY-NC-SA 4.0. 0-89
  91. 91. 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 Creative Commons License BY-NC-SA 4.0. 0-90
  92. 92. Linuxコマンドの復習 mount A B ファイルシステムのマウント AをBにマウントする umount B ファイルシステムのアンマウント Bをアンマウントする ps 実行中プロセスの情報表示 top プロセスの稼動状況などのリアルタイム 表示 env 環境変数の表示 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 export <環境変数名>=<パス> This material is licensed under the Creative Commons License BY-NC-SA 4.0. 0-91
  93. 93. EM3とは EM(EmbeddedMaster)とはOESFのディストリビューション ワー キンググループを中心に仕様策定、構築、公開をしている 組込み機器向けのAndroidのディストリビューションのシリー ズです http://www.oesf.jp/ Androidのフレームワークに準拠 し、AndroidのAPIとの互換性を保 ちつつ、情報家電等の組込みシス テムで共通に必要となる、 各種 機能を拡張しております。また、 開発に際してはOESFで選定した ハードウェアプラットホームを ターゲットとしています This material is licensed under the Creative Commons License BY-NC-SA 4.0. 0-92
  94. 94. Embedded Master 開発者サイト AOSPと同様にEMにも開発者のためのサイト (http://developer.oesf.biz/em/developer/)があります。 各バージョンのリリース情報やソースコードの取得方法、 ターゲットボードでの動作のさせ方など、詳しい開発情報が 得られます。 This material is licensed under the Creative Commons License BY-NC-SA 4.0. 0-93
  95. 95. Embedded Master バージョン バージョ ン コード 説明 5 Fig TBD 4 EggPlant Andrid 4.0がベース 詳細は近日にアナウンス予定 Durian Andrid 2.2がベース OPBのバージョンアップ、 グラフ・チャートAPI、OSGi拡張機能 2 Cinnamon Andrid 2.0がベース 拡張ビルド環境(OESF Platform Builder: OPB) マーケットプレイスSDKの提供 1 Blue Berry 3 シンボル EMの初代バージョン。Android1.6がベース 高解像度スクリーンのサポート This material is licensed under the Creative Commons License BY-NC-SA 4.0. 0-94
  96. 96. EM3ソースコードの取得 Armadillo440用のカー ネルコードの取得方法 の説明リンク サポートしているカーネルの機能 Core: Android^(TM) 2.2_r1.3 wpa_supplicant(version 0.5.11) OESF boot screen Usb keyboard supported ALSA sound supported ・ALSA-library(version 1.0.23) ・ALSA-Utility(version 1.0.23) ・ビルド環境のセットアッ プ (OBPを使用する場合はEclipseの pluginであるCDTをインストールす る必要があるが今回は使用しない) ・EM3 for ARMのソース コードの取得方法 This material is licensed under the Creative Commons License BY-NC-SA 4.0. 0-95 95
  97. 97. EM3ソースコードの取得 [host_pc~] [host_pc~] [host_pc~] [host_pc~] [host_pc~] > > > > > cd␣~work mkdir␣v2_armadillo440-training export␣ANDROID=~/work/v2_armadillo440-training cd␣$ANDROID git␣clone␣git://github.com/OESF/Embedded-Master- ARM.git : Resolving deltas: 100% (136625/136625), done. Checking out files: 100% (257515/257515), done. : [host_pc~] > cd␣Embedded-Master-ARM/ [host_pc~] > ls core i5 メモリ 1.5G ubuntu on vmware 90分くらい Makefile build development frameworks linaro packages sdk bionic cts device hardware ndk pms system bootable dalvik external kernel opb prebuilt vendor タグで正確にEM3を取得するにはgit clone終了後以下を実行 [host_pc~] > cd␣Embedded-Master-ARM [host_pc~] > git␣checkout␣-b␣EM3␣refs/tags/EmbeddedMaster-3.1.0 This material is licensed under the Creative Commons License BY-NC-SA 4.0. 0-96 96
  98. 98. Androidのユーザランドのビルド core i5 メモリ 1.5G ubuntu on vmware 120分くらい // Androidユーザランドのビルド [host_pc~] > cd␣$ANDROID/Embedded-Master-ARM/ [host_pc~] > echo␣"TARGET_PRODUCT:=armadillo440"␣>␣buildspec.mk [host_pc~] > make␣-j2 2012年5月23日現在ビルドエラーが発生します。 packages/apps配下の下記フォルダを削除することでビルドエラーの発生を回避できま OesfAndroidSystemMonitor OesfNaviCoopAppCarIcon OesfNaviCoopAppPoiDest OesfNaviCoop_PluginNavi_CoopAppRoute OesfSystemMonitorExample OesfMonitorLogGraphicView OesfNaviCoopAppDispArea OesfNaviCoop_PluginNavi_CoopAppDisplay OesfNaviCoop_PluginNavi_CoopAppStatus This material is licensed under the Creative Commons License BY-NC-SA 4.0. 0-97 97
  99. 99. 実 習 ユーザランドのファイルシステム作成 カンペ⇒01_ユーザランドのファイルシステム作 成.txt [host_pc~] > cd␣$ANDROID [host_pc~] > mkdir␣-p␣android-root ・・・① [host_pc~] > cd␣$ANDROID/Embedded-Master-ARM/out/target/product/armadillo440 [host_pc~] > cp␣-Rdpf␣root/*␣$ANDROID/android-root ・・・② [host_pc~] > cp␣-Rdpf␣system/* $ANDROID/android-root/system/ ・・・③ [host_pc~] [host_pc~] [host_pc~] [host_pc~] [host_pc~] > > > > > cd␣$ANDROID/android-root sudo␣chown␣-R␣root.root␣. ・・・④ sudo␣chmod␣777␣-R␣system/usr/keychars ・・・⑤ sudo␣chmod␣777␣-R␣system/usr/keylayout ・・・⑤ sudo␣chmod␣777␣system/etc/dhcpcd/dhcpcd-run-hooks ・・・⑤ ①v2_armadillo440-trainingフォルダ直下に「android-root」というフォルダを作成 ②$ANDROID/Embedded-Master-ARM/out/target/product/armadillo440/root/以下のすべてのファイルや フォルダを「android-root」フォルダにコピー ③$ANDROID/Embedded-Master-ARM/out/target/product/armadillo440/system/以下のすべてのファイル やフォルダを「android-root/system」フォルダにコピー ④「android-root」フォルダにroot権限を付与 ⑤system/usr/keychars、system/usr/keylayout(ハードキーのバインド設定ファイル類)と system/etc/dhcpd//dhcpcd-run-hooksに実行権限を付与する This material is licensed under the Creative Commons License BY-NC-SA 4.0. 0-98 98
  100. 100. 実 習 固定IPアドレスの設定について Androidのネットワーク設定は移植先のターゲットボードのルートファイル システムにあるハードウェア専用の起動スクリプトinit.<hardware名>.rc で設定されている Armadillo440の場合 → $ANDROID/androidroot/init.armadillo440.rc : on boot コメントをはずす setprop ro.sf.lcd_density 120 sudo gedit init.armadillo440.rc setprop ro.radio.use-ppp no setprop ro.radio.noril yes setprop status.battery.state Slow#LAN service lan-setup setprop status.battery.level 5 setprop status.battery.level_raw /system/etc/init.armadillo440.sh 50 setprop status.battery.level_scale 9 oneshot setprop net.eth0.dns1 8.8.8.8 setprop net.dns1 8.8.8.8 symlink /dev/snd/dsp /dev/eac このシェルスクリ chmod 0666 /dev/snd/dsp write /sys/class/backlight/pwm-backlight/brightness プトも確認(次 255 ページ) #LAN ##service lan-setup /system/etc/init.armadillo440.sh ## oneshot This material is licensed under the Creative Commons License BY-NC-SA 4.0. 0-99 99
  101. 101. 実 習 固定IPアドレス設定 カンペ⇒02_固定IPアドレス設 定.txt //Androidのネットワーク設定ファイルに固定IPアドレスを設定しておく [host_pc~] > cd␣$ANDROID/android-root [host_pc~] > cd␣system/etc [host_pc~] > sudo␣gedit␣init.armadillo440.sh gedit起動、編集 #!/system/bin/sh netcfg eth0 up netcfg eth0 dhcp #!/system/bin/sh ifconfig␣eth0␣192.168.1.11 保存してgedit終了 //実行権限をつける [host_pc~] > sudo␣chmod␣a+x init.armadillo440.sh This material is licensed under the Creative Commons License BY-NC-SA 4.0. 0-100 100
  102. 102. 実 習 Androidファイルシステムの完成 カンペ⇒03_ファイルシステムの完 成.txt //Androidユーザランドのファイルシステムをアーカイブにする [host_pc~] > cd␣$ANDROID/android-root [host_pc~] > tar␣cvzf␣$ANDROID/rootfs_a_training.tar.gz . [host_pc~] > cd␣$ANDROID [host_pc~] > ls [host_pc~] > rootfs_a_training.tar.gz␣android-root␣EmbeddedMaster-ARM ユーザランドのファイルシステム This material is licensed under the Creative Commons License BY-NC-SA 4.0. 0-101 101
  103. 103. Androidのユーザランドの ファイルシステム構成(/) data root / キャッシュ、追加パッケージなど格納ディレクト (R/W)(空) dev デバイスファイル格納ディレクトリ(空) proc Linux設定ファイル格納ディレクトリ(空) sys システムファイル格納ディレクトリ(空) sbin adbd実行ファイル格納ディレクトリ system 次頁参照 init 起動処理実行ファイル init.armadillo440.rc initが実行するターゲットボード固有 起動用シェルスクリプト init.rc initが実行するAndroid固有起動用シェルスクリプ default.prop Androidデフォルトプロパティ init.goldfish.rc エミュレータ起動用シェルスクリプト initlogo.rle 起動時のロゴの画像ファイル (RGB888のRAW形式の画像 ) 空のディレクトリはAndroid起動時にカーネルやinitによって自動作成されます This material is licensed under the Creative Commons License BY-NC-SA 4.0. 0-102 102
  104. 104. Androidのユーザランドの ファイルシステム構成(/system/) app /system/ bin etc fonts framework lib usr xbin build.prop プリインストールのアプリケーション ファイル(.apk) 各種一般的なLinuxコマンド 設定用シェルスクリプトなど フォントファイル(.ttf) javaのandroidのライブラリ(.jar) ネイティブライブラリ(.so) キー設定ファイルなど root用のコマンドなど Androidデフォルトプロパティ This material is licensed under the Creative Commons License BY-NC-SA 4.0. 0-103 103
  105. 105. 実 習 Androidカーネルの作成 カンペ⇒04_カーネルの作成.txt [host_pc~] > cd␣$ANDROID/Embedded-Master-ARM/kernel/armadillo440 [host_pc~] > make␣ARCH=arm␣CROSS_COMPILE=$ANDROID/Embedded-MasterARM/prebuilt/linux-x86/toolchain/arm-eabi-4.4.3/bin/arm-eabi␣armadillo400_android_defconfig ・・・① [host_pc~] > make␣ARCH=arm␣CROSS_COMPILE=$ANDROID/Embedded-MasterARM/prebuilt/linux-x86/toolchain/arm-eabi-4.4.3/bin/arm-eabi- ・・・② //カーネルのイメージファイル作成 [host_pc~] > gzip␣-c␣arch/arm/boot/Image␣>␣linux_training.bin.gz ①カーネルのコンフィギュレーションファイル (armadillo400_android_defconfig)に記載してある設 定を.configに適用 ②arm-eabi-というクロスコンパイラでカーネルをコンパ イル ③イメージファイルをgzipで圧縮 Androidのカーネルイメー ジ ※①②は実習時間短縮のためすでに実行済みなのでオブ ジェクトファイルなどはできています。 This material is licensed under the Creative Commons License BY-NC-SA 4.0. 0-104 104
  106. 106. Linuxカーネルのコンパイルオプション設定 ■Linuxカーネルのコンパイルオプション設定とは ①ある機能をコンパイル「する/しない」の設定 →カーネルのオプション設定項目は膨大 ②機能をコンパイルする上でどんな形でコンパイルするかの設定 →機能を静的にカーネルのバイナリに組み込むか →機能をモジュールとしてコンパイルするのか ■コンパイル設定方法 ・GUI設定ツールを使用して設定を行う →$make menuconfig ・設定用ファイルを用意してmakeコマンドで設定を行う →$make <ターゲットのハード名>_<*>_defconfig ■設定内容はmenuconfig終了後「.config」ファイルに収めら This material is licensed under the Creative Commons License BY-NC-SA 4.0. 0-105 105
  107. 107. KconfigとMakefile ■Linuxカーネルのコンパイルオプション設定で設定できる オプション名は「Kconfig」というファイルで設定されてい ます ■ハードウェアのドライバのソースコードが収まっている ディレクトリには必ず「Kconfig」と「Makefile」が存在し ます ■新しいハードウェアを追加するたびにこのKconfigファイ ルにオプション名を追加し、Makefileにはそのオプション に関係のあるソースコード(オブジェクトファイル)の依 存関係の設定を行います This material is licensed under the Creative Commons License BY-NC-SA 4.0. 0-106 106
  108. 108. KconfigとMakefile 具体例を見てみましょう。 USBメモリの機能を追加するためのパラメータ(オプション名)とそれに関連するドライバ のソースコードを探す方法です。 USBメモリはストレージ設備(USB Mass Storage)なのでdrivers/usb/storage/ディレク トリ内のKconfigを見てみます。 config USB_STORAGE_DATAFAB bool "Datafab Compact Flash Reader support (EXPERIMENTAL)" depends on USB_STORAGE && EXPERIMENTAL help Support for certain Datafab CompactFlash readers. Datafab has a web page at <http://www.datafabusa.com/>. ⇒Datafab社製の製品でコンパクトフラッシュリーダーに関連 する機器 config USB_STORAGE_SDDR55 bool "SanDisk SDDR-55 SmartMedia support (EXPERIMENTAL)" depends on USB_STORAGE && EXPERIMENTAL help Say Y here to include additional code to support the Sandisk SDDR-55 SmartMedia reader in the USB Mass Storage driver. ⇒SanDisk社製の製品でスマートメディアカードに関連する機 器 config USB_STORAGE ←USBメモリの機能のオプション 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. This material is licensed under the Creative Commons License BY-NC-SA 4.0. 0-107 To compile this driver as a module, choose M 107
  109. 109. 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-obj-$(CONFIG_USB_STORAGE_DEBUG) usb-storage-obj-$(CONFIG_USB_STORAGE_USBAT) : <省略> usb-storage-obj-$(CONFIG_USB_STORAGE_KARMA) usb-storage-objs := ←このオプションに対するモジュール += debug.o += shuttle_usbat.o += karma.o scsiglue.o protocol.o transport.o usb.o ←scsiglue.c、protocol.c、 initializers.o $(usb-storage-obj-y)transport.c、usb.c、 ifneq ($(CONFIG_USB_LIBUSUAL),) obj-$(CONFIG_USB) += libusual.o endif initializers.c及びこれらと 同名のヘッダファイルがモ ジュールの実体 であることがわかります This material is licensed under the Creative Commons License BY-NC-SA 4.0. 0-108 108
  110. 110. 「.config」ファイルについて .config # # Automatically generated make config: don’t edit # : # : CONFIG_64BIT=y #CONFIG_X86_32 is not set CONFIG_X86_64BIT=y CONFIG_X86=y ・・・ 値 意味 =y この項目に対応する機能は静的にカーネルに組込まれる =m この項目に対応する機能は、モジュールとしてコンパイルされ る。機能の中にはモジュールとしてコンパイルできないものが ある。その場合対応する設定項目がこの値をとることはない。 # CONFIG_* is not set この項目に対応する機能はコンパイルされない。コメントアウ ト。 カーネルをビルドするとこのファイルの設定値でカーネルが作られる .configを直接手で編集してはいけない ある機能が他の機能に依存している可能性がある 機能の依存関係はKconfigが把握している This material is licensed under the Creative Commons License BY-NC-SA 4.0. 0-109 109
  111. 111. 「.config」の新規作成 ・「.config」がまだ存在しない場合 →$make menuconfig → <Exit> →「.config」が生成 →Kconfigにおいてdefault指定された機能のみ 「.config」に適用 This material is licensed under the Creative Commons License BY-NC-SA 4.0. 0-110 110
  112. 112. 「.config」の更新 ・「.config」がすでに存在する場合 →ソースツリーのルートに配置 →$make oldconfig 新しく追加された設定項目について1つ1つ設定するか確認さ れる (とりあえずすべてリターンでデフォルトを適用) →「.config」が再生成 →$make menuconfigでカスタム設定→<Exit> →「.config」更新 This material is licensed under the Creative Commons License BY-NC-SA 4.0. 0-111 111
  113. 113. 参 考 menuconfigの操作方法 ↑ 項目の選択カーソルを上に移動 項目の選択カーソルを下に移動 <TAB> 、← 、→ 動作メニュー( Select/Exit/Help)を切り替え <Enter> 選択されている動作メニューに 応じて動作を行う y 項目を<*>(有効:静的組込み) n 項目を<>無効にする m 項目を<M>(有効:モジュール としてコンパイルする) <SPACE> <Exit>→ 「新しい設定を保存するか?」 → YES→.configに保存 動作 ↓ [host_pc~] > make␣menuconfig キー 項目を<M>/<*>/<>のトグルで切 り替える <ESC><ESC> 上の階層に戻る(<Exit>と同じ ) ? 選択されている項目に関するヘ ルプを表示(<Help>と同じ) 設定項目を検索する。設定項目 / のシンボル名からメニュー上の 0-112 位置を探す場合に便利 This material is licensed under the Creative Commons License BY-NC-SA 4.0. 112
  114. 114. アーキテクチャ毎の「.config」設定ファイル ・アーキテクチャ毎の「.config」の設定ファイルを 作成する →$make defconfig →アーキテクチャ毎のデフォルト設定に基づいた「.config」の設定ファ イルが生成 →生成される場所 <linuxのソース>/arch/<arch>/configs/ <ターゲットのハード名 >_<*>_defconfig This material is licensed under the Creative Commons License BY-NC-SA 4.0. 0-113 113
  115. 115. 実 習 armadillo400_android_defconfig 下記のファイルを開いて確認してみましょう $ANDROID/Embedded-MasterARM/kernel/armadillo440/arch/arm/configs/armadillo400_android_defconfig このファイルはカーネルのコンフィギュレーションの設定値(ターゲットボードの ハードウェアおよびAndroidに特化した設定)が記載されたファイルです makeコマンドでこのファイルを指定することによってカーネルオプションとし て.configに反映されます armadillo400_android_defconfigの一部抜粋 # Networking options CONFIG_ANDROID_PARANOID_NETWORK=y # Voltage and Current regulators CONFIG_ANDROID_PMEM=y # 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 This material is licensed under the Creative Commons License BY-NC-SA 4.0. 0-114 114
  116. 116. armadillo400_android_defconfig # #MX25 Options # CONFIG_MACH_ARMADILLO420=y CONFIG_MACH_ARMADILLO440=y # #Armadillo-400 Board options # # CONFIG_ARMADILLO400_GPIO_A_B_GPIO is not set CONFIG_ARMADILLO400_GPIO_A_B_I2C=y # CONFIG_ARMADILLO400_GPIO_A_B_KEY is not set CONFIG_ARMADILLO400_GPIO_C_D_GPIO=y # CONFIG_ARMADILLO400_GPIO_C_D_I2C is not set ## Select wakeup source # CONFIG_ARMADILLO400_UART2_WAKE_SRC_SELECT=y # CONFIG_ARMADILLO400_UART3_WAKE_SRC_SELECT is not set # CONFIG_ARMADILLO400_UART5_WAKE_SRC_SELECT is not set CONFIG_ARMADILLO400_TOUCHSCREEN_WAKE_SRC_SELECT=y CONFIG_ARMADILLO400_TOUCHSCREEN_IS_WAKE_SRC=1 CONFIG_ARMADILLO400_GPIO_KEYS_WAKE_SRC_SELECT=y CONFIG_ARMADILLO400_GPIO_KEYS_IS_WAKE_SRC=1 CONFIG_UTMI_MXC=y # #Mapping drivers for chip access # CONFIG_MTD_ARMADILLO=y # #Display device support # CONFIG_LOGO=y CONFIG_LOGO_ARMADILLO_CLUT224=y ## System on Chip audio support # CONFIG_SND_SOC=y CONFIG_SND_MXC_SOC=y CONFIG_SND_MXC_SOC_SSI=y CONFIG_SND_SOC_ARMADILLO440_WM8978=y #NFS設定 ## Miscellaneous filesystems # CONFIG_NETWORK_FILESYSTEMS=y CONFIG_NFS_FS=y CONFIG_NFS_V3=y CONFIG_NFS_V3_ACL=y CONFIG_ROOT_NFS=y CONFIG_LOCKD=y CONFIG_LOCKD_V4=y CONFIG_NFS_ACL_SUPPORT=y CONFIG_NFS_COMMON=y CONFIG_SUNRPC=y This material is licensed under the Creative Commons License BY-NC-SA 4.0. 0-115 115
  117. 117. 参 考 makeコマンド関連 [host_pc~] > make カーネルのコンパイルをする。ソースツリーのルートディレクトリで実行。 [host_pc~] > make␣modules_install コンパイルされたモジュールを/lib/modulesにインストール。 [host_pc~] > make␣install カーネルバイナリイメージを/boot以下にインストールされる。 Fedora系ではブート時初期化ファイルシステムイメージも作成される。 [host_pc~] > update-initramfs␣–c␣–k␣<カーネルバージョン > Debian系においてブート時初期化ファイルシステムイメージも作成する際に使用するコマンド ファイルまたはディレクトリ名 内容 /lib/modules/<カーネルバージョン>/ モジュールが配置されるディレクトリ /boot/vmlinuz-<カーネルバージョン> カーネルイメージファイル /boot/initramfs-<カーネルバージョン> または /boot/initrd.img-<カーネルバージョン> ブート時初期化用ファイルシステムイメージ /boot/Systemmap-<カーネルバージョン> アドレス情報ファイル This material is licensed under the Creative Commons License BY-NC-SA 4.0. 0-116 116
  118. 118. 参 考 mekeコマンド関連 [host_pc~] > make␣clean ソースツリーをコンパイル前に戻す。オブジェクトファイルは削除される が.configやコンパイル時に生成された一部ファイルは削除されない。 [host_pc~] > make␣help 使用可能なmakeターゲットを表示する。 [host_pc~] > make␣<dir>/<file>.o 指定したオブジェクトファイルを生成するのに必要なコンパイルだけを行う。 <dir>だけを指定した場合は、 .config によって生成されることになっている そのディレクトリ内すべてのオブジェクトファイルが生成される。 [host_pc~] > make␣<dir>/<file>.ko 指定したモジュールだけを生成する This material is licensed under the Creative Commons License BY-NC-SA 4.0. 0-117 117
  119. 119. makeコマンド(クロスコンパイル) クロスコンパイルに必要な変数 変数 意味 ARCH ターゲットアーキテクチャ CROSS_COMPILE クロスコンパイラのプレフィックスを指定 [host_pc~] > make␣ARCH=arm CROSS_COMPLIE=armv5tel-linux-␣uImage クロスコンパイラarmv5tel-linux-gccによってARM向けのカーネルをクロスコンパイルする。 生成するカーネルのバイナリイメージはuImage形式がよく使われる。 arch/arm/boot/uImageとして生成される。 [host_pc~] > make␣ARCH=arm CROSS_COMPLE=armv5tel-linux-␣modules クロスコンパイラarmv5tel-linux-gccによってARM向けのカーネルモジュールをクロスコン パイルで生成する。 [host_pc~] > make␣ARCH=arm CROSS_COMPLE=armv5tel-linux-␣ INSTALL_MOD_PATH=~/armroot-2.6.38␣modules_install ホームディレクトリに~/armroot-2.6.38/lib/modulesというディレクトリが生成されその 下にクロスコンパイルで生成されたモジュールがインストールされる。 シンボリックリンク(build、source)->カーネルがコンパイルされたソースツリーをさす。 This material is licensed under the Creative Commons License BY-NC-SA 4.0. 0-118 118
  120. 120. 実 習 コンフィギュレーションの確認 makeコマンドやmake menuconfigでカーネルコンフィギュレーション値 が反映されたか確認する場合は •方法1:「.config」をlessで確認(実習) •方法2:make menuconfigコマンドでGUIから確認(参考) // 方法1:カーネルの設定(.configへの適用)を確認する [host_pc~] > cd␣$ANDROID/Embedded-Master-ARM/kernel/armadillo440 [host_pc~] > less␣config lessで開いて検索( 「/」キーのあとにキーワードを入れてリターン)し設定が反映され ているかを確認する # Voltage and Current regulators CONFIG_ANDROID_PMEM=y #Android CONFIG_ANDROID=y CONFIG_ANDROID_BINDER_IPC=y CONFIG_ANDROID_LOGGER=y など This material is licensed under the Creative Commons License BY-NC-SA 4.0. 0-119 119
  121. 121. 参 考 コンフィギュレーションの確認 //方法2:make menuconfigコマンドでGUIから確認 [host_pc~] > cd␣$ANDROID/Embedded-Master-ARM/kernel/ [host_pc~] > make menuconfig Androidに特化したカーネルオプションの確認 This material is licensed under the Creative Commons License BY-NC-SA 4.0. 0-120 120
  122. 122. 参 考 コンフィグレーションの確認 NFS設定を行った場合の確認 This material is licensed under the Creative Commons License BY-NC-SA 4.0. 0-121 121
  123. 123. メモ This material is licensed under the Creative Commons License BY-NC-SA 4.0. 0-122 122
  124. 124. Armadillo440 製品版Linuxイメージファイル アットマークテクノのサイトから出荷時状態のLinuxカーネル、ユーザランド、ダウン ローダー「Hermit-at」をダウンロードする http://armadillo.atmark-techno.com/armadillo-440/downloads 「Hermit-at」はAndroidをArmadillo440の移植する際に使用するので開発PCにインス トールする Linuxカーネルやユーザランドも必要なので必ず開発PCにダウンロードして保存しておく 【Hermit-at】 hermit-at_2.1.0_i386.deb ダブルクリックしてインストールすること 【製品版Linuxカーネ ル】 linux-a400-1.06.bin.gz 【製品版Linuxユーザラン ド】 0-123 romfs-a440-1.04.img.gz This material is licensed under the Creative Commons License BY-NC-SA 4.0. 123
  125. 125. 実習の開発環境まとめ 開発用PC 【実習用のAndroidソースコードのrootパス】 /home/aj741327/work/v2_armadillo440-training/Embedded-Master-ARM 【Android用Linuxカーネルのソースコードのrootパス】 /home/aj741327/work/v2_armadillo440-training/EmbeddedMasterARM/kernel 【環境変数】 [host_pc~] > export␣ANDROID=/home/aj741327/work/v2_armadillo440- training Android kernelイメージ $ANDROID/Embedded-MasterARM/kernel/armadillo440/linux_training.bin.gz Androidユーザラン ドのファイルシステ $ANDROID/rootfs_a_training.tar.gz ム Armadillo440製品版Linux kernelイメージ ~/work/atmark/linux-a400-1.06.bin.gz ユーザランドイメー ジ ~/work/atmark/romfs-a440-1.04.img.gz This material is licensed under the Creative Commons License BY-NC-SA 4.0. 0-124 124
  126. 126. ダウンローダ:Hermitについて 開発用PCにRS232Cの端子がない場合はUSB-RS232C変換ケーブ ルを使用してUSBで接続してください 開発用PC hermit Armadillo用 ブートローダ兼ダウンロー ダ # 開発PCからイメージファイルをArmadilloにダウンロードするダウンローダとして使用す る # (例)atmarktechno製のLinuxカーネルイメージをarmadilloのフラッシュメモリに書き 込む [host_pc~] > cd␣~/work/atmark [host_pc~] > hermit␣download␣--input-file␣linux-a400-1.06.bin.gz␣--region␣kernel␣-- port␣ /dev/ttyUSB0 This material is licensed under the Creative Commons License BY-NC-SA 4.0. 0-125 125
  127. 127. ブートローダ:Hermitについて 開発用PCにRS232Cの端子がない場合はUSB-RS232C変換 ケーブルを使用してUSBで接続してください JP2ショート状態 (hermit起動モー ド) 開発用PC 【C-Kermitの使い方】 *ホームディレクトリで起動させる こと Armadillo440 hermit Armadillo用 ブートローダ兼ダウンロー ダ C-Kermit シリアル通信ソ フト 起動 接続 ヘルプ 切断 c 終了 # シリアル通信ソフトを介してarmadilloのブートローダーに接続する kermit c ? ctrl + ctrl + q [host_pc~] > kermit ← C-Kermit起動 Executing /home/aj741327/.mykermrc... ?SET SPEED has no effect without prior SET LINE C-Kermit 8.0.211, 10 Apr 2004, for Linux Copyright (C) 1985, 2004, Trustees of Columbia University in the City of New York. Type ? or HELP for help. (/home/aj741327/) C-Kermit>c ← ターゲット(armadillo-440)にシ リアル接続 [armadillo] hermit> ンプトが表示(接続済み) This material is licensed under the Creative Commons License BY-NC-SA 4.0. ← armadilloのhermitプロ 0-126 126
  128. 128. Armadillo440でAndroidを起動する手順 ① ② ③ ④ ⑤ ⑥ ⑦ 製品版Linuxで起動 Armadillo440側のネットワークの設定 microSDのパーティションと初期化 Android RootfsをArmadillo-440へ転送 Android RootfsをmicroSDに展開 AndroidのLinuxカーネルのメモリ書き込み Android起動 0-127 This material is licensed under the Creative Open Embedded Software Foundation, All rights reserved Copyright 2009-2012, Commons License BY-NC-SA 4.0. 127
  129. 129. 製品版Linuxで起動してみよう JP2をショート C-Kermit シリアル通信ソフ ト カンペ⇒05_製品版Linuxのブート手 順.txt 1.JP2をショートにする 2.シリアルケーブルでPCとArmadillo-440を接続する 3.LANケーブルでPCとArmadillo-440を接続する 4.Micro SDカード(1G以上)をスロットに挿入して電源を入 れる 5.C-Kermit起動(前頁参照) 6.Armadillo440の起動 microSD 実 習 hermit> clearenv //起動パラメータをク リア 1G以上のmicroSD hermit> boot //起動コマンド Armadillo-440は出荷時状態です Armadillo440用の標準カーネル と標準ユーザランドが載っていま す ・・・・起動ログが流れます login : root //ログイン名入力 password : root //パスワード入力 [root@armadillo440-0 (ttymxc1) ~]# //起動 完了 This material is licensed under the Creative Commons License BY-NC-SA 4.0. 0-128 128
  130. 130. 実 習 Armadillo440側のネットワークの設定 作業PC側のネットワーク設定 ip:192.168.1.10 subnet:255.255.255.0 カンペ⇒06_製品版Linuxのネットワーク設 定.txt 192.168.1.10 [armadillo ~] # vi␣/etc/config/interfaces #␣/etc/network/interfaces␣--␣configuration␣file␣for␣ifup(8),␣ifdown(8) auto␣lo␣eth0 iface␣lo␣inet␣loopback iface␣eth0␣inet␣static address␣192.168.1.11 netmask␣255.255.255.0 network␣192.168.1.0 broadcast␣192.168.1.255 gateway␣192.168.1.1 viで編集 192.168.1.11 [armadillo [armadillo [armadillo [armadillo [armadillo ~] ~] ~] ~] ~] # # # # # cd␣/etc/config flatfsd␣–s //コンフィギュレーション領域に保存 ifdown␣eth0 ifup␣eth0 ifconfig //確認 This material is licensed under the Creative Commons License BY-NC-SA 4.0. 0-129 129
  131. 131. 実 習 microSDのパーティションと初期化 パーティションのイメージ mmcblk0p1 FAT 1-100M mmcblk0p2 microSD 4G ext3 残り全部の容量 [armadillo ~] # fdisk␣/dev/mmcblk0 The number of cylinders for this disk is set to 30656. There is nothing wrong with that, but this is larger than 1024, and could in certain setups cause problems with: 1) software that runs at boot time (e.g., old versions of LILO) 2) booting and partitioning software from other OSs (e.g., DOS FDISK, OS/2 FDISK) Command (m for help): d //削除コマンド Selected partition 1 //パーティション1を指定(不要なパーティションが残っていた 場合念のため削除) This material is licensed under the Creative Commons License BY-NC-SA 4.0. 0-130 130
  132. 132. 実 習 microSDのパーティションと初期化 Command (m for help): n //新規パーティション追加コマンド Command action e extended p primary partition (1-4) p //パーティション Partition number (1-4): 1 //パーティション1を選択 First cylinder (1-30656, default 1): リターン(default 1) //シリンダの開始値 Using default value 1 Last cylinder or +size or +sizeM or +sizeK (1-30656, default 30656): +100M //シ リンダの終了値 Command (m for help): n //新規パーティション追加コマンド Command action e extended p primary partition (1-4) p //パーティション Partition number (1-4): 2 //パーティション2を選択 This material is licensed under the Creative Commons License BY-NC-SA 4.0. 0-131 131
  133. 133. 実 習 microSDのパーティションと初期化 First cylinder (3054-30656, default 3054):リターン(default 3054 ) //シリンダの開 始値 Using default value 3054 Last cylinder or +size or +sizeM or +sizeK (3054-30656, default 30656): ): リターン(default 30656 ) //シリンダの終了値 Using default value 30656 Command (m for help): w //パーティション作成実行して終了 The partition table has been altered! Calling ioctl() to re-read partition table. mmcblk0: p1 p2 mmcblk0: p1 p2 Syncing disks. [armadillo ~] # mkdosfs␣/dev/mmcblk0p1 ↑パーティション1(データ保存領域) はWindowsとのデータ交換を考え てDOS用 ファイルシステムFATでフォーマット [armadillo ~] # mke2fs␣-j␣/dev/mmcblk0p2 ↑パーティション2(Android ユーザーランド領域) はEXT3 でフォー マット This material is licensed under the Creative Commons License BY-NC-SA 4.0. 0-132 132
  134. 134. 実 習 Android RootfsをArmadillo-440へ転送 開発PC armadillo440 /home/ftp/pub/ FTP rootfs_a_training.tar.gz 192.168.1.11 カンペ⇒07_Android RootFSのFTP転送.txt 192.168.1.10 $ANDROIDの有効化 [host_pc~] > export ANDROID=~/work/v2_armadillo440-train [host_pc~] > cd␣$ANDROID [host_pc~] > ftp␣192.168.1.11 login name:ftp login password:なし ftp> cd␣pub ftp> bin ftp> put␣rootfs_a_training.tar.gz ftp> bye [host_pc~] > This material is licensed under the Creative Commons License BY-NC-SA 4.0. 0-133 133

×