組込み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.
組込みLinuxのリアルタイム性能
•ソフトリアルタイム (CONFIG_PREEMPT)
•ハードリアルタイム (CONFIG_PREEMPT_RTpatch 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.
組込みLinuxの開発環境
•一般的なツール
•Eclipse C/C++ DevelopmentTooling (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.
組込み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
アプリケーション開発環境
項目
必要な環境
OS
Windows XP, WindowsVista(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.
プラットフォーム開発環境
項目
必要な環境(共通)
スペック
CPU:2G以上、 メモリ:2G以上
ハードディスク空き容量:80G以上(プラットフォームひとつあたり20G
)
ネットワーク常時接続
ソースコード入手先
項目
Android OpenSource 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
android open sourceproject
(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.
Android のバージョン対応表
Androidの指定バージョンのソース
コードを取得する場合はAOSPの
BuildNumbersで記載されている
Code nameまたはTagを指定する
Codename
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.
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
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.
Linuxコマンドの復習
mount A B
ファイルシステムのマウント
AをBにマウントする
umountB
ファイルシステムのアンマウント
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
KconfigとMakefile
具体例を見てみましょう。
USBメモリの機能を追加するためのパラメータ(オプション名)とそれに関連するドライバ
のソースコードを探す方法です。
USBメモリはストレージ設備(USB Mass Storage)なのでdrivers/usb/storage/ディレク
トリ内のKconfigを見てみます。
configUSB_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.
KconfigとMakefile
次にMakefileを見てみます
# Makefile forthe 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.
「.config」ファイルについて
.config
#
# Automatically generatedmake 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
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.
参
考
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
実
習
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.
実
習
microSDのパーティションと初期化
Command (m forhelp): 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.
実
習
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
実
習
製品版Linuxのrebootとkermit切断
[armadillo ~] #reboot
[armadillo ~] #
System is going down for system reboot now.
Starting local stop scripts.
Exiting Syslogd!
Syncing all filesystems:
done
Unmounting all filesystems:
done
The system is going down NOW !!
Sending SIGTERM to all processes.
Please stand by while rebooting the system.
Hermit-At v2.0.8 (armadillo4x0) compiled at 15:29:17, Nov 12 2010
hermit> <ctrl+→ctrl+c> //ショートカットキー
(Back at ubuntu-vm)
---------------------------------------------------(/home/aj741327/) C-Kermit>q
Closing /dev/ttyUSB0...OK
[host_pc~] >
This material is licensed under the Creative Commons License BY-NC-SA 4.0.
0-135
135
実
習
Androidを起動しましょう
[host_pc~] > cd
[host_pc~]> kermit
C-Kermit起動 &
接続
C-Kermit> c
Armadilloにシリアル
hemit> setenv␣console=ttymxc1␣root=/dev/mmcblk0p2␣init=/init␣noinitrd␣rootwait
hermit> setenv
カーネル起動パラメータ設定
確認
1: console=ttymxc1
&
2: root=/dev/mmcblk0p2
3: init=/init
4: noinitrd
5: rootwait
hermit> boot
起動
Uncompressing
カーネルスター
kernel....................................................................................................
ト
........done.
Doing console=ttymxc1
Doing root=/dev/mmcblk0p2
Linuxカーネルのバージョン
Doing init=/init
ARMのアーキテクチャ
Doing noinitrd
Doing rootwait
Linux version 2.6.26-at7 (unknown) (aj741327@ubuntu-vm) (gcc version 4.4.0 (GCC) ) #1 PREEMPT Tue Feb 15
14:50:35 JST 2011
0-137
CPU: ARM926EJ-S [41069264] revision 4 (ARMv5TEJ), cr=00053177
This material is licensed under the Creative Commons License BY-NC-SA 4.0.
137
139.
Android起動ログ
Machine: Armadillo-440
Memory policy:ECC disabled, Data cache writeivity 4, 32 byte lines, 128 sets
CPU0: D cache: 16384 bytes, associativity 4, 32 byte lines, 128 sets
Built 1 zonelists in Zone order, mobility grouping on.
Total pages: 32512
カーネル起動パラメー
Kernel command line: console=ttymxc1 root=/dev/mmcblk0p2 init=/init noinitrd rootwait
タ
MXC IRQ initialized
PID hash table entries: 512 (order: 9, 2048 bytes)
MXC GPT timer initialized, rate = 12000000
Console: colour dummy device 80x30
Dentry cache hash table entries: 16384 (order: 4, 65536 bytes)
Inode-cache hash table entries: 8192 (order: 3, 32768 bytes)
Memory: 128MB = 128MB total
Memory: 125912KB available (3200K code, 683K data, 112K init)
カーネル初期化
Mount-cache hash table entries: 512
CPU: Testing write buffer coherency: ok
net_namespace: 480 bytes
NET: Registered protocol family 16
MXC WDOG1 Enabled
This material is licensed under the Creative Commons License BY-NC-SA 4.0.
0-138
138
140.
Android起動ログ
CPU is i.MX25Revision 1.0
Clock input source is 24000000
MXC GPIO hardware
Using SDMA I.API
MXC DMA API initialized
SCSI subsystem initialized
usbcore: registered new interface driver usbfs
usbcore: registered new interface driver hub
usbcore: registered new device driver usb
MXC I2C driver
カーネル初期化
MXC I2C driver
MC34704 regulator successfully probed
mc34704 0-0054: Loaded
NET: Registered protocol family 2
IP route cache hash table entries: 1024 (order: 0, 4096 bytes)
TCP established hash table entries: 4096 (order: 3, 32768 bytes)
fsl-ehci fsl-ehci.1: Freescale On-Chip EHCI Host Controller
fsl-ehci fsl-ehci.1: new USB bus registered, assigned bus number 2
This material is licensed under the Creative Commons License BY-NC-SA 4.0.
0-139
139
141.
Android起動ログ
fsl-ehci fsl-ehci.1: irq37, io mem 0x53ff4000
fsl-ehci fsl-ehci.1: USB 2.0 started, EHCI 1.00, driver 10 Dec 2004
usb usb2: configuration #1 chosen from 1 choice
hub 2-0:1.0: USB hub found
hub 2-0:1.0: 1 port detected
asoc: WM8978 HiFi <-> imx-i2s-1 mapping ok
ALSA device list:
#0: armadillo440 (WM8978)
ip_tables: (C) 2000-2006 Netfilter Core Team
カーネル初期化
TCP cubic registered
NET: Registered protocol family 17
NET: Registered protocol family 15
Static Power Management for Freescale i.MX25
input: imx_adc_ts as /devices/virtual/input/input1
i.MX ADC input touchscreen loaded.
rtc-s353xxa 2-0030: setting system clock to 2000-01-01 22:04:59 UTC (946764299)
This material is licensed under the Creative Commons License BY-NC-SA 4.0.
0-140
140
142.
Android起動完了!
Waiting for rootdevice /dev/mmcblk0p2...
mmc0: new high speed SD card at address b368
mmcblk0: mmc0:b368 SD02G 1968128KiB
mmcblk0: p1 p2
カーネル起動設定パラメータに従ってrootディレクトリを
マウント
VFS: Mounted root (ext2 filesystem).
Freeing init memory: 112K
Warning: unable to open an initial console.
sh: can't access tty; job control turned off
rootディレクトリ直下にあるinitを
起動
→initの詳細は後述
# warning: `rild' uses 32-bit capabilities (legacy support in use)
初回起動時は内部の
データベース構築10分ほど
時間がかかりますのであせらず
待ちましょう
fec: PHY @ 0x0, ID 0x0007c0f1 -- LAN8720
eth0: link down
eth0: link up, 100Mbps, full-duplex
imx ssi is already activated
request_suspend_state: wakeup (3->0) at 117437937832 (2000-01-01 22:06:54.852144332 UTC)
binder: release 141:141 transaction 1721 out, still active
binder: 52:185 transaction failed 29189, size 4-0
binder: send failed reply for transaction 1721, target dead
#
起動完了!(Androidのshellプロン
プト)
This material is licensed under the Creative Commons License BY-NC-SA 4.0.
0-141
141
143.
実
習
Android起動後の確認
# cd /
#ls
lost+found
etc
d
mnt
acct
data
default.prop
dev
init
init.armadillo440.rc
init.goldfish.rc
init.rc
initlogo.rle
proc
sbin
sys
system
sdcard
cache
config
# netcfg
lo
UP
eth0
UP
#
rootディレクトリに
移動
ルートのディレクトリ構成
→2章のAndroidのルートファイルシステム
参照
127.0.0.1
255.0.0.0
192.168.1.11
0x00000049
255.255.255..
ネットワークの確
0x00001043
認
This material is licensed under the Creative Commons License BY-NC-SA 4.0.
0-142
142
144.
メモ
This material islicensed under the Creative Commons License BY-NC-SA 4.0.
0-143
143
ADBデバッグ
ADB (Android DebugBridge)やDDMS (Dalvik Debug Monitor
Server )を使用すればグラフィカルなログ表示や開発用PCの
シェルからデバッグ、アプリケーションのインストール・ア
ンインストールなどが可能になります
シリアルではなく
ネットワーク経由
DDMS
コマンド類
she
ll
goldfish
(エミュレー
タ)
Android SDK
ADT on
Eclipse
adbd
ターゲットボード
dalvikVM
開発用PC
adbd
adbサーバ
DDMS
グラフィカ
ル
ツール
shell
This material is licensed under the Creative Commons License BY-NC-SA 4.0.
0-145
145
147.
ADBデバッグをするために
Android SDK
1. ADBデバッグツールはAndroid
SDKのtoolsに含まれている
⇒ホストPCにAndroidSDKを
インストールする必要が
ある
開発用PC
192.168.1.10
192.168.1.11
2. ターゲットボードのadbdと開
発用PCのadbサーバの通信はリ
モート接続が必要
⇒Armadillo440で動作して
いるAndroidに固定IPアド
レス
を設定する必要がある
⇒環境変数ADBHOSTにター
ゲットボードのIPアドレ
0-146
This material is licensed under the Creative Commons License BY-NC-SA 4.0.
146
148.
Android SDKのインストール
*proxy環境ではAndroid SDKand AVD Managerからダウンロードサイトに接続で
きません
ダウンロードサイト(Android Developers >
SDK)
http://developer.android.com/intl/ja/sdk/in
dex.html
tgz形式のアーカイブをダウンロードし
て ダウンロードしたtgzファイルを任
意の場所で展開
This material is licensed under the Creative Commons License BY-NC-SA 4.0.
0-147
147
149.
Android SDKのインストール
*proxy環境ではAndroid SDKand AVD Managerからダウンロードサイトに接続で
きません
SDKのtgzファイル展開後以下の実行ファイルを実行
SDKのルート/android-sdk-linux/tools/android
「Packages 」
→以下の2つにチェックを入れる
・「Android SDK Pratform-tools」と
・「Android 2.2(API 8)-> SDK Platform」
→「Install 2Packages」
This material is licensed under the Creative Commons License BY-NC-SA 4.0.
0-148
148
150.
Android SDKのインストール
*proxy環境ではAndroid SDKand AVD Managerからダウンロードサイトに接続で
きません
「Acsept all 」→「Install」
This material is licensed under the Creative Commons License BY-NC-SA 4.0.
0-149
149
151.
Android SDKのインストール
*proxy環境ではAndroid SDKand AVD Managerからダウンロードサイトに接続で
きません
ダウンロードが完了するとSDKのルート/androidsdk-linux/ 配下の「platform-tools」ディレク
トリと「platform」ディレクトリ内に「android8」ディレクトリができていることを確認
This material is licensed under the Creative Commons License BY-NC-SA 4.0.
0-150
150
参
考
KconfigとMakefileの設定
例 )
kernel/drivers/misc/Kconfig
config SAMPLE_GPIO_CHAR
bool“Sample GPIO CHAR for LED and User Button”
default n
---help--if you use GPIO for LED and User Button
マスタ タイトルの書式設定
例 )
kernel/drivers/misc/Makefile
obj-$(CONFIG_SAMPLE_GPIO_CHAR)
+=sample_gpio_char.o
This material is licensed under the Creative Commons
License BY-NC-SA 4.0.
5-166
166
168.
参
考
ドライバの組込み/モジュール生成
前頁の例で作ったドライバをカーネルに組み込む
$ make menuconfig//設定GUI起動
# DeviceDrivers -> Misc Devices
#
-> [*]Sample GPIO CHAR for LED and User
Button
$ make
マスタ タイトルの書式設定
前頁の例で作ったドライバをモジュール(sample_gpio_char.ko)
にする
$ make menuconfig //設定GUI起動
#DeviceDrivers -> Misc Devices
#
-> [M]Sample GPIO CHAR for LED and User
Button
$ make modules
This material is licensed under the Creative Commons
License BY-NC-SA 4.0.
5-167
167
NDKの開発環境
項目
OS
必要な環境
Windows XP (32-bit)or Vista (32- or 64-bit)
→ ただしCygwin 1.7 以上が必要
Mac OS X 10.4.8 or later (x86 only)
Linux (32- or 64-bit Ubuntu8.0.4以上、またはGLibc2.4
以上のLinux)
マスタ タイトルの書式設定
Java JDK
Java JDK 6
Android SDK
Android SDK 1.5以上(*1,*2)
ツール
Cygwin : gmake, gcc
Linux : GNU Make 3.81 or later 、GNU Awk or Nawk
*1:OpenGL ESは使用するバージョンによって必要なAndroidSDKのバージョンが異なります
・OpenGL ES 1.1を使用:Android 1.6以上 android:minSdkVersion="4“
・OpenGL ES 2.0を使用:Android 2.0以上 android:minSdkVersion="5“
*2:作成するライブラリのCPUアーキテクチャの種類によりAndroidSDKのバージョンが異なり
ます
・ARM,ARM-NEON:Android 1.5以上 android:minSdkVersion=“3“
・x86:Android 2.3以上 android:minSdkVersion=“9“
5-187
This material is licensed under the Creative Commons
・MIPS:Android 2.3以上 android:minSdkVersion=“9“
License BY-NC-SA 4.0.
187
Eclipse ADT pluginインストール
マスタ タイトルの書式設定
①eclipse実行
②Workspace
「/home/aj741327/workspace」
③Java開発用パースペクティブを開
く
This material is licensed under the Creative Commons
License BY-NC-SA 4.0.
5-209
209
211.
Eclipse ADT pluginインストール
マスタ タイトルの書式設定
Eclipseメニュー->Help->Install New
Software
両方にチェックを付
ける
https://dlssl.google.com/android/eclipse/is licensed under the Creative Commons
This material
License BY-NC-SA 4.0.
5-210
212.
Eclipse ADT pluginインストール
「I accept・・・」に
チェック
マスタ タイトルの書式設定
セキュリティ警告⇒O
K
CDT(C/C++開発用Eclipseプラ
グイン)も自動でインストー
ルされた状態で起動される
Welcomeタブは×ボタンで閉じ
る
Eclipse 再起動
This material is licensed under the Creative Commons
License BY-NC-SA 4.0.
5-211
213.
Eclipse ADT pluginインストール
ADTがインストールさ
れるとこのようなボ
タンが追加される
マスタ タイトルの書式設定
AndroidSDKがある場
所のパスを指定
This material is licensed under the Creative Commons
License BY-NC-SA 4.0.
AndroidNDKがある場
所のパスを指定
5-212
gdbの使い方
• コマンドラインからgdbを使う
① 「ndk-build–B NDK_DEBUG=1」 でビルドする
② アプリケーションのAndroidManifest.xmlの
debuggable属性をtrueにしてapkを作成する
③ デバッグ対象のアプリケーションをエミュレータか
実機で起動
④ アプリケーションのプロジェクトのルート直下で
「ndk-gdb --start」を実行
⑤ gdb起動、初期化後(gdb)プロンプトが出現
マスタ タイトルの書式設定
※ただしgdb起動・初期化完了まで時間がかかるのでアプリ起動直後にJNIを
コールしているようなアプリではデバッグは難しい
This material is licensed under the Creative Commons
License BY-NC-SA 4.0.
5-226
226
実
習
製品版Linuxのrebootとkermit切断
[armadillo ~] #reboot
[armadillo ~] #
System is going down for system reboot now.
Starting local stop scripts.
Exiting Syslogd!
Syncing all filesystems:
done
Unmounting all filesystems:
done
The system is going down NOW !!
Sending SIGTERM to all processes.
Please stand by while rebooting the system.
Hermit-At v2.0.8 (armadillo4x0) compiled at 15:29:17, Nov 12 2010
hermit> <ctrl+→ctrl+c> //ショートカットキー
(Back at ubuntu-vm)
---------------------------------------------------(/home/aj741327/) C-Kermit> q
Closing /dev/ttyUSB0...OK
[host_pc~] >
マスタ タイトルの書式設定
This material is licensed under the Creative Commons
License BY-NC-SA 4.0.
5-281
281
283.
実
習
デバイスを組み込んだAndroid用カーネルを書き込む
【接続環境】
開発用PC ⇔ Armadillo-440(RS232Cケーブル)
JP2ショート状態(hermit起動モード)
カンペ⇒14_演習用Androidブート手順.txt
#Armadillo440用の標準カーネルをAndroidのLinuxカーネルで上書きします
[host_pc~] > cd␣$ANDROID/Embedded-Master-ARM/kernel/armadillo440
[host_pc~] > hermit␣download␣--input-file␣linux_training_ensyu.bin.gz␣--
マスタ タイトルの書式設定
region␣kernel␣
--port␣/dev/ttyUSB0
Armadillo-440
NOR Flashメモリ(32M)
開発用PC
bootloader
ブートローダ領域(Hermit)
Android対応kernel
hermit
Linuxカーネル領域
Armadillo用
ブートローダ兼ダウンロー
ダ
userland
Linuxユーザランド領域
config
Linuxカーネルパラメータ保存領域
This material is licensed under the Creative Commons
License BY-NC-SA 4.0.
5-282
282
284.
実
習
デバイスを組み込んだ新Androidで起動
【接続環境】
開発用PC ⇔ Armadillo-440(RS232Cケーブル)
JP2ショート状態(hermit起動モード)
開発用PC
カンペ⇒14_演習用Androidブート手順.txt
[armadillo]hermit>
setenv␣console=ttymxc␣root=/dev/mmcblk0p2␣init=/init␣noinitrd␣ rootwait
[armadillo] hermit> boot
C-Kermit
シリアル通信ソ
フト
マスタ タイトルの書式設定
Armadillo-440
NOR Flashメモリ(32M)
linux_training_ensyu.b
in.gzをRAMにロードして
実行
組み込み済み
bootloader
ブートローダ領域(Hermit)
SDカード内の
Androidで起動
Android対応kernel
/dev/mmcblk0
microSD
Linuxカーネル領域
userland
Androidの
ルートファイル
システム
/dev/mmcblk0p2
Linuxユーザランド領域
config
Linuxカーネルパラメータ保存領域
This material is licensed under the Creative Commons
License BY-NC-SA 4.0.
新Androidが起動
5-283
283
285.
実
習
新Android起動後の確認事項
【接続環境】
ここでは
作業用PC ⇔ Armadillo-440(RS232Cケーブル)
から下記に変更する
開発用PC⇔ Armadillo-440(LANケーブル)
ネットワーク設定の確認をします
[Android] # netcfg
lo UP
127.0.0.1
255.0.0.0
eth0
UP
192.168.1.11
マスタ タイトルの書式設定
0x00000049
255.255.255.0. 0x00001043
※上記のIPアドレスが設定されていない場合は「ifconfig eth0 192.168.1.11」を手
打ち
で実行して設定してください。
IPアドレスの設定確認終了後
①ckermitでの接続を切断(Androidのプロンプトで[ctrl+→ctrl+c] ⇒
[q])
②RS232CケーブルをArmadilloからはずす
③LANケーブルで開発用PCと接続
④開発用PCのコマンドプロンプトからpingを投げてネットワークの接続の確
認
5-284
This material is licensed under the Creative Commons
⑤adb shell 起動
License BY-NC-SA 4.0.
284
参
考
JNIメソッドを一括登録する
Javaでネイティブ定義されたメソッドをJNIで認識させるためには
メソッドの命名規則を守って手動で記述したり、javahコマンドを
使って自動でヘッダファイルを作成する方法がありますが、メ
ソッド名が長く可読性が低くなります。
package com.sample.hellojni;
public classHelloJni {
static {
System.loadLibrary(“hellojni");
}
マスタ タイトルの書式設定
public native int openComm(String str, boolean debug);
public native void closeComm();
public native int getBaudrate();
public native boolean setParams(int i, int j, int k , int n);
public native int commWrite(byte b[], int off, int len);
public static native void setObject(new SomeObject());
public static native void stopTread();
定義されたネイティブメ
ソッドが多くなるにつれ
て、JNI側のコードが見難
くなるので、JNI側のコー
ドを見やすくするための
工夫が必要
メソッドを一括登録でき
るようにする
}
This material is licensed under the Creative Commons
License BY-NC-SA 4.0.
5-331
331