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. 組込み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. 組込み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. 組込み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
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. プラットフォーム開発環境
項目
必要な環境(共通)
スペック
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
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. 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. 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
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. 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
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. 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. 「.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
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. 参
考
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
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. 実
習
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. 実
習
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