20100925 sola-android

99
Android を移植して遊ぶ 自分専用端末を作る第一歩

Upload: akihiro-maeda

Post on 29-Jun-2015

2.223 views

Category:

Technology


7 download

DESCRIPTION

日本Androidの会 中国支部 第14回勉強会の発表資料

TRANSCRIPT

Page 1: 20100925 sola-android

Androidを移植して遊ぶ自分専用端末を作る第一歩

Page 2: 20100925 sola-android

自己紹介

● 名前

– sola● 仕事

– 大学卒業後、 7年間は携帯の開発

– 今年転職して、新しいことに挑戦中

● ブログと twitter– ブログ

● http://blog.sola-dolphin-1.net/

– twitter

● http://twitter.com/sola_dolphin_1

Page 3: 20100925 sola-android

参加しているグループ

● 日本 Androidの会● 横浜 Androidプラットフォーム部( PFへの興味で参加)

http://www.yokohama.android-pf.org/

横浜支部の人でなくても参加可能

● 日本 Android の会 町田支部(近所なので参加)

Page 4: 20100925 sola-android

Android歴

● 2008春頃– 社内の人に言ってみたが、感心無し(携帯作ってるとこなのに ... )

● 2008秋頃– ソース公開をきっかけに、まじめにソースとか読み始めた

● 2008冬頃~ 2009春頃– AndroidDevPhone1 、 Armadillo-500FX 、 BeagleBoardを入手

● 2009~– ブログ書き始めた& twitterを始めた

– 仕事でも Androidに関われるようになった

● 2010春頃~– 新しいことを求めて転職

– アプリ作りに手を出し始めた。 A3に出すのが目標

Page 5: 20100925 sola-android

普通に使ってる Android端末

Page 6: 20100925 sola-android

● Xperia (電話として使ってます)● dynabook AZ

Page 7: 20100925 sola-android

自分でいじった Android環境を動かした実機たち

Page 8: 20100925 sola-android

● Armadillo-500FX● Armadillo-440● Armadillo-9● Armadillo-240● mini2440● SmartQ5

● BeagleBoard● BeagleBoard-xM● IGEPv2● TOUCHBOOK● Dev Phone 1● Dev Phone 2● Nexus One

※赤字はブログとかでネタにしたもの

Page 9: 20100925 sola-android

本日の話の概要

● 移植する時にやること

● これまでハマったこと

● その他

Page 10: 20100925 sola-android

扱う範囲

Page 11: 20100925 sola-android

移植するときにやること

Page 12: 20100925 sola-android

移植手順

1.Android用の Linux Kernelを作成する

2.動作確認

3.ユーザランドを作成する

4.動作確認

5.デバイスを追加したり、チューニングしたりする

Page 13: 20100925 sola-android

Android用の Linux Kernelを作る

Page 14: 20100925 sola-android

2通りの方法

● Googleが公開している Androidの Linux Kernelに、ターゲット固有のドライバ等を移植する

● ターゲットで既に動いている Linux Kernelに Androidのドライバ(変更点)を移植する

Page 15: 20100925 sola-android

Androidの Linux Kernelにターゲット固有の部分を移植する

Page 16: 20100925 sola-android

移植手順

● ターゲット固有の部分は、 vanilla kernel と差分を取って抽出する

Linux Kernelの配布場所は、 http://www.kernel.org/ターゲットのカーネルは、linux-2.6.32ベースの sola-kernelがあると仮定

● 差分を Androidの Linux Kernelに適用する

$ wget http://www.kernel.org/pub/linux/kernel/v2.6/linux-2.6.32.tar.gz$ tar zxvf linux-2.6.32.tar.gz$ diff -crdN linux-2.6.32/ sola-kernel/ > sola-kernel.patch

$ git clone git://android.git.kernel.org/kernel/common.git$ cd common/$ git checkout -b android-2.6.32-work origin/android-2.6.32$ patch -p1 -E < ../sola-kernel.patch

Page 17: 20100925 sola-android

既に動いている Linux KernelにAndroidのドライバを移植する

Page 18: 20100925 sola-android

移植手順

● Androidのドライバは、 vanilla kernel と差分を取って抽出す

Linux Kernelの配布場所は、 http://www.kernel.org/Androidの Linux Kernelの配布場所は、git://android.git.kernel.org/kernel/common.git

● 差分を既に動いている Linux Kernelに適用する

$ git clone git://android.git.kernel.org/kernel/common.git$ cd common/$ git checkout -b android-2.6.32-work origin/android-2.6.32$ cd ../$ wget http://www.kernel.org/pub/linux/kernel/v2.6/linux-2.6.32.tar.gz$ tar zxvf linux-2.6.32.tar.gz$ diff -crdN linux-2.6.32/ common/ > android-2.6.32.patch

$ cd sola-kernel$ patch -p1 -E < ../android-2.6.32.patch

Page 19: 20100925 sola-android

オススメしない例

Page 20: 20100925 sola-android

Armadillo-500FXでやったこと

● Linux Kernelのバージョンを 2.6.27に上げつつ、ドライバをAndroidの Linux Kernelへ移植

● 差分を取って、 Androidの Linux Kernelに適用する

$ git clone git://android.git.kernel.org/kernel/common.git$ cd common$ patch -p1 -E < ../at6.patch

※masterブランチは android-2.6.27なので、使用する Linux Kernelのバージョンは 2.6.27となります

$ wget http://armadillo.atmark-techno.com/files/downloads/armadillo-500-fx/source/kernel/linux-2.6.26-at6.tar.gz$ wget http://www.kernel.org/pub/linux/kernel/v2.6/linux-2.6.26.tar.gz$ tar zxvf linux-2.6.26-at6.tar.gz$ tar zxvf linux-2.6.26.tar.gz$ diff -crdN linux-2.6.26/ linux-2.6.26-at6/ > at6.patch

Page 21: 20100925 sola-android

Armadillo-500FXでやったこと

● ハマるところ

– Armadillo-500FXの Linux Kernelは 2.6.26なので、これと一致するバージョンの Androidの Linux Kernelがない(今回の例では、 2.6.27を使用)

– そのため、前のスライドでのパッチ適用は失敗する箇所が多く、手動で適用する必要のある箇所が多くなる

– Linux Kernelのバージョンが異なることで、構造体や関数の型が変更になり、コンパイルエラーとか ...

– コンパイルエラーが出なくても、動かすと kernel panicになったりするなど ...

Page 22: 20100925 sola-android

Armadillo-500FXでやったこと

● 解決策

– 頑張るしかないです ...

– 私はひたすらソースコードと睨めっこでした。

– 経験上、動かない原因はほぼ arch/arm/*** であることが多い

– JTAG-ICEがあると原因を追いかけ易いが、個人では手が出せない ...

– 調べても原因不明な場合は、 Android-Embedded-Japan へメールを投げてみる

– 英語が分かる人は android-porting も良いと思います

Page 23: 20100925 sola-android

実機を使用せずに試す例

Page 24: 20100925 sola-android

Android Emulator ( Goldfish )

● Emulatorの Linux Kernelが 2.6.29までしかないので、 2.6.31へバージョンを上げましたhttp://blog.sola-dolphin-1.net/archives/1858666.htmlhttp://blog.sola-dolphin-1.net/archives/1862864.html

● Linux Kernel 2.6.31に、 Goldfish向けの変更と Android用のドライバを一気に移植

● Goldfishは規模が小く、 Armadillo-500FXよりは楽

● ただし、一気に移植すると問題発生時にGoldfish向けの変更が悪いのか、 Android向けの変更が悪いのか切り分ける必要が出てきます

Page 25: 20100925 sola-android

Emulatorの便利なところ

● Emulatorを使うと、実機無しで移植の試しが出来る

● デバッグも出来ます

この記事が分かり易くて良いと思います

Androidエミュレータで Linuxカーネルをデバッグ !!

http://monoist.atmarkit.co.jp/fembedded/articles/filesys/06/filesys_06a.html

● センサー等のデバイスを繋ぐことは出来ないけど、 Linux Kernelの中身を追うことが出来る。

Page 26: 20100925 sola-android

役に立つドキュメント

● Android Platform Developer's Guide

http://source.android.com/porting/index.html

(こういうの、去年欲しかった ... )

Page 27: 20100925 sola-android

Androidのユーザランドを作成する

Page 28: 20100925 sola-android

その前に、Emulatorのイメージで動作させる

ソースからビルドしなくても動きます

Page 29: 20100925 sola-android

Emulatorのイメージで起動させる手順

1.busyboxをクロスコンパイルする

2.Emulatorに busyboxを入れる

3.busyboxを使用してイメージを吸い出す

4.吸い出したイメージの中を変更する(設定ファイルのみ)

5.変更したイメージを実機にのせて動かす

Page 30: 20100925 sola-android

手順 1と 2

● busyboxのクロスコンパイル

● busyboxのインストール

$ wget http://www.codesourcery.com/sgpp/lite/arm/portal/package6488/public/arm-none-linux-gnueabi/arm-2010q1-202-arm-none-linux-gnueabi-i686-pc-linux-gnu.tar.bz2$ tar jxvf arm-2010q1-202-arm-none-linux-gnueabi-i686-pc-linux-gnu.tar.bz2 -C /opt/$ wget http://busybox.net/downloads/busybox-1.17.2.tar.bz2$ tar jxvf busybox-1.17.2.tar.bz2$ cd busybox-1.17.2$ export ARCH=arm$ export CROSS_COMPILE=/opt/arm-2010q1/bin/arm-none-linux-gnueabi-$ make menuconfig$ make CFLAGS=--static LDFLAGS=--static

$ adb push busybox /data/

Page 31: 20100925 sola-android

手順 3

● busyboxを使用して必要なデータを取り出す

$ adb shell/ # export PATH=$PATH:/data/ # busybox tar zcvf /cache/system.tar.gz system/ # busybox tar zcvf /cache/sbin.tar.gz sbin/ # busybox cp init /cache// # busybox cp init.rc /cache// # busybox cp default.prop /cache// # exit# exit$ mkdir emulator-image$ adb pull /cache/ ./emulator-image/

Page 32: 20100925 sola-android

手順 4

● 設定ファイルの変更

– init.rcのみ

変更点は以下mountのところのみ

mount rootfs rootfs / ro remount

mount yaffs2 mtd@system /system mount yaffs2 mtd@system /system ro remount

mount yaffs2 mtd@userdata /data nosuid nodev

mount yaffs2 mtd@cache /cache nosuid nodev

Page 33: 20100925 sola-android

手順 5

● 実機にのせるファイルを用意する

data 空フォルダ作成

dev 空フォルダ作成

proc 空フォルダ作成

sys 空フォルダ作成

default.prop 吸い出したファイル

init 吸い出したファイル

init.rc 吸い出したファイル

sbin 吸い出したファイル

system 吸い出したファイル

Page 34: 20100925 sola-android

これだけで動作します

Page 35: 20100925 sola-android

Androidのユーザランドを作成する

● ターゲット毎に必要な変更箇所を簡単に紹介します

– BeagleBoard

– BeagleBoard-xM

– IGEPv2

– Armadillo-500FX

– Armadillo-440

Page 36: 20100925 sola-android

まずは Androidのビルド

● ソースを取得してmakeを実行●

● make完了後、実機にのせるファイルをまとめる

$ repo init -u git://android.git.kernel.org/platform/manifest.git -b android-2.2_r1.1$ repo sync$ make -j8

$ mkdir android-fs$ cp -a out/target/product/generic/root/* android-fs/$ cp -a out/target/product/generic/system/* android-fs/system/

Page 37: 20100925 sola-android

BeagleBoard編

● BeagleBoard向けに変更する箇所– init.rc

Page 38: 20100925 sola-android

BeagleBoard-xM編

● BeagleBoard-xM向けに変更する箇所– init.rc

Page 39: 20100925 sola-android

IGEPv2編

● IGEPv2向けに変更する箇所– init.rc

Page 40: 20100925 sola-android

Armadillo-500FX編

● Armadillo-500FX向けに変更する箇所– init.rc

Page 41: 20100925 sola-android

Armadillo-440編

● Armadillo-440向けに変更する箇所– init.rc

Page 42: 20100925 sola-android

まとめ

● 複数例紹介したけど、必要な変更点はほとんど同じ

● 他のターゲット向けにも、基本的には同じところを変更してあげれば動くと思います

● Androidをのせてみるのは、本当に簡単● 初めての場合、難しいのは Linux Kernelの部分ですので、既に Linuxが動作している実機を用意した方が良いと思います。

● カメラとかGPSとかセンサーとか無線 LANを動かしたい時はそれなりに手間です。(いずれどこかに整理したいと思っています)

Page 43: 20100925 sola-android

BeagleBoardの環境を変更してみる

Page 44: 20100925 sola-android

変更するところ

● 以下の環境変数を設定してみる( Froyoでの例)– TARGET_ARCH_VARIANT

– WITH_JIT

● SDカードを認識させる– vold.fstabの設定( eclairまでは vold.conf )

● 複数のターゲット向けに環境を設定する

– BeagleBoardや Armadillo向けに、別々に環境を用意するのはもったいないので、切り替えられるようにする

Page 45: 20100925 sola-android

環境変数の設定

● 設定例

● TARGET_ARCH_VARIANTに設定可能な値は、

build/core/combo/arch/arm/に存在するものであれば可能

● WITH_JITは、 JITコンパイラを有効にするかの設定で、

trueにすると有効になる

● ビルド例

TARGET_ARCH_VARIANT := armv7-a-neonWITH_JIT := true

make TARGET_ARCH_VARIANT=armv7-a-neon WITH_JIT=true

Page 46: 20100925 sola-android

SDカードを認識させる

● vold.fstabの設定( Froyo )

● vold.confの設定( Eclairまで)

● 設定すべき値を知る方法

# Mounts the first usable partition of the specified devicedev_mount sdcard /mnt/sdcard auto /devices/platform/mmci-omap-hs.0/mmc_host/mmc0

# ls -l /sys/devices/platform/mmci-omap-hs.0/mmc_host/mmc0-rw-r--r-- root root 4096 2000-01-01 00:00 ueventlrwxrwxrwx root root 2000-01-01 00:04 subsystem -> ../../../../../class/mmc_hostlrwxrwxrwx root root 2000-01-01 00:04 device -> ../../../mmci-omap-hs.0drwxr-xr-x root root 2000-01-01 00:00 power-r--r--r-- root root 4096 2000-01-01 00:04 slot_namedrwxr-xr-x root root 2000-01-01 00:00 mmc0:aaaa

## This is the direct uevent device path to the SD slot on the devicemedia_path /devices/platform/mmci-omap-hs.0/mmc_host/mmc0

Page 47: 20100925 sola-android

ターゲット向けの設定ファイルを作る

● device/に設定ファイルを格納する– devices/sola/beagleboard/***

– devices/sola/armadillo500fx/***

※eclairまでは devicesではなく、 vendorでした

● 格納するファイルの例( BeagleBoardの場合)– AndroidBoard.mk

– AndroidProducts.mk

– BoardConfig.mk

– beagleboard.mk

– vendorsetup.sh

Page 48: 20100925 sola-android

AndroidBoard.mk

● 記述例

オリジナルの init.rcは system/core/rootdirにあります

LOCAL_PATH := $(call my-dir)

# board specific init.rc#PRODUCT_COPY_FILES += \

$(LOCAL_PATH)/init.rc:root/init.rc

# vold#PRODUCT_COPY_FILES += \

$(LOCAL_PATH)/vold.fstab:system/etc/vold.fstab

Page 49: 20100925 sola-android

AndroidProducts.mk

● 記述例

PRODUCT_MAKEFILES := \$(LOCAL_DIR)/beagleboard.mk

Page 50: 20100925 sola-android

BoardConfig.mk

● 記述例

# config.mk# # Product-specific compile-time definitions.#TARGET_NO_BOOTLOADER := trueTARGET_NO_KERNEL := trueTARGET_CPU_ABI := armeabiBOARD_USES_GENERIC_AUDIO := trueUSE_CAMERA_STUB := trueTARGET_ARCH_VARIANT := armv7-a-neonWITH_JIT := true

Page 51: 20100925 sola-android

beagleboard.mk

● 記述例

# Superclass$(call inherit-product, build/target/product/generic.mk)

PRODUCT_PACKAGES += \ LiveWallpapersPicker \ LiveWallpapers \ MagicSmokeWallpapers \ VisualizationWallpapers

# OverridesPRODUCT_NAME := beagleboardPRODUCT_DEVICE := beagleboardPRODUCT_MODEL := beagleboardPRODUCT_BRAND := beagleboardPRODUCT_MANUFACTURER := beagleboard

PRODUCT_LOCALES := ldpi hdpi mdpi ja_JP en_US

Page 52: 20100925 sola-android

vendorsetup.sh

● 記述例

add_lunch_combo beagleboard-eng

Page 53: 20100925 sola-android

ビルド方法

● トップディレクトリで以下を実行する

$ source build/envsetup.sh

$ lunch beagleboard-eng

● ビルドした結果は genericではなく、 beagleboardフォルダの下に格納されます

out/target/product/beagleboard

● 他のターゲット(例えば armadillo440 )の場合、 beagleboardのところを読み替えてください

Page 54: 20100925 sola-android

これまでにハマったところ

Page 55: 20100925 sola-android

Android起動直後に終了する

Page 56: 20100925 sola-android

Android起動直後に終了する

● capcake ( Android1.5 )でよく目撃した例

Page 57: 20100925 sola-android

解決方法 1

● BatteryServiceで状態をごまかす

詳細は、ブリリアントサービスさんのブログを参照。

バッテリードライバを見にいかず、

BatteryServiceでバッテリー FULLを返しています。

http://d.hatena.ne.jp/bs-android/20090603/1244043649

Page 58: 20100925 sola-android

解決方法 2

● バッテリードライバを組み込む

考え方は、方法 1と同じ。方法 2では、ドライバで常にバッテリー FULLを返すようにする。数十行で書けます。

実際に使うには、(株)パイロンさんの公開しているドライバを使用するのが良いかと思います。http://pylone.jp/blog/virtual_battery

この方法の良いところは、 Androidに手を入れる必要が無いこと。

Page 59: 20100925 sola-android

Androidが起動しない

Page 60: 20100925 sola-android

● cupcake ( Android1.5 )から donut ( Android1.6 )へのバージョンアップ時に目撃した例

Androidのロゴ点滅で無限ループ

ここから進まない

Page 61: 20100925 sola-android

原因

● センサーのライブラリ( system/lib/hw/sensors.xxx.so)

元々は Android Dev Phone1で donutを動かそうとした時、起動しなくて調べました。センサーのライブラリを外すと起動したため、センサーが原因だと判断。

しかし、当時は Android Dev Phone1向けのセンサーのソースコードが公開されていなかったため、 cupcake向けに自分で実装したソフトで確認。

結果、センサーのライブラリに原因があると判明。

Page 62: 20100925 sola-android

解決方法

#include <cutils/native_handle.h> /* donut */

/* <donut> static int control_open_data_source( struct sensors_control_device_t *dev ) */static native_handle_t* control_open_data_source( struct sensors_control_device_t *dev ) /* <donut> */{ native_handle_t* handle; /* <donut> */ handle = native_handle_create( 1, 0 ); /* <donut> */ sensor_fd = open_sensors_phy( dev ); handle->data[ 0 ] = sensor_fd; /* <donut> *//* return sensor_fd; *//* <donut> */ return handle; /* <donut> */}

/* <donut> int sensors_open( struct sensors_data_device_t *dev, int fd ) */int sensors_open( struct sensors_data_device_t *dev, native_handle_t* handle ) /* <donut> */{ int i; sPendingSensors = 0;/* event_fd = dup( fd ); *//* <donut> */ event_fd = dup( handle->data[ 0 ] ); /* <donut> */ native_handle_close( handle ); /* <donut> */ native_handle_delete( handle ); /* <donut> */ for( i = 0 ; i < MAX_NUM_SENSORS ; i++ ) sensors[ i ].vector.status = SENSOR_STATUS_ACCURACY_HIGH; return 0;}

● センサーライブラリの修正例

Page 63: 20100925 sola-android

Androidが起動しない(2)

Page 64: 20100925 sola-android

Androidのロゴ点滅で無限ループ(2)

● eclair ( Android2.1 )以降の目撃例●

I/SystemServer( 123): Battery ServiceW/dalvikvm( 123): No implementation found for native Lcom/android/server/BatteryService;.native_update ()VW/dalvikvm( 123): threadid=15: thread exiting with uncaught exception (group=0x4001b160)E/AndroidRuntime( 123): Uncaught handler: thread android.server.ServerThread exiting due to uncaught exceptionE/AndroidRuntime( 123): *** EXCEPTION IN SYSTEM PROCESS. System will crash.E/AndroidRuntime( 123): java.lang.UnsatisfiedLinkError: native_updateE/AndroidRuntime( 123): at com.android.server.BatteryService.native_update(Native Method)E/AndroidRuntime( 123): at com.android.server.BatteryService.update(BatteryService.java:200)E/AndroidRuntime( 123): at com.android.server.BatteryService.<iniinit: untracked pid 117 exitedt>(BatteryService.java:138)E/AndroidRuntime( 123): at com.android.server.ServerThread.run(SystemServer.java:140)E/AndroidRuntime( 123): Crash logging skipped, no checkin serviceI/Process ( 123): Sending signal. PID: 123 SIG: 9D/BootAnimation( 133): SurfaceFlinger died, exiting...I/ServiceManager( 25): service 'package' died(省略)I/ServiceManager( 25): service 'content' diedE/installd( 32): eofE/installd( 32): failed to read sizeI/installd( 32): closing connectionI/Zygote ( 118): Exit zygote because system server (123) has terminated

Page 65: 20100925 sola-android

解決方法 1

● Power supply class supportを有効にする

バッテリーのドライバは用意しなくてよい。kernel configで、 CONFIG_POWER_SUPPLYを yにする。

Page 66: 20100925 sola-android

解決方法 2

frameworks/base/services/java/com/android/server/BatteryService.java

197c197< private native void native_update();---> // private native void native_update();200c200,204< native_update();---> mAcOnline = true;> mBatteryPresent = true;> mBatteryLevel = 100;> mBatteryStatus = BatteryManager.BATTERY_STATUS_FULL;> // native_update();

● BatteryServiceで状態をごまかす

cupcakeの頃とは BatteryService.javaの作りが違うので、別の対応を行う。やることは同じ。バッテリー FULLを返す。

Page 67: 20100925 sola-android

解決方法 3

● バッテリードライバを組み込む

Android起動直後に終了するで書いた通り。ドライバで常にバッテリー FULLを返すようにする。数十行で書けます。

実際に使うには、(株)パイロンさんの公開しているドライバを使用するのが良いかと思います。http://pylone.jp/blog/virtual_battery

この方法の良いところは、 Androidに手を入れる必要が無いこと。

Page 68: 20100925 sola-android

Androidが起動しない(3)

Page 69: 20100925 sola-android

Androidのロゴ点滅で無限ループ(3)

● froyo ( Android2.2 )での目撃例●

W/MountService( 53): Waiting too long for mReady!W/MountService( 53): Waiting too long for mReady!W/MountService( 53): Waiting too long for mReady!W/MountService( 53): Waiting too long for mReady!W/MountService( 53): Waiting too long for mReady!W/MountService( 53): Waiting too long for mReady!W/MountService( 53): Waiting too long for mReady!W/MountService( 53): Waiting too long for mReady!W/MountService( 53): Waiting too long for mReady!W/MountService( 53): Waiting too long for mReady!W/MountService( 53): Waiting too long for mReady!W/MountService( 53): Waiting too long for mReady!W/MountService( 53): Waiting too long for mReady!W/MountService( 53): Waiting too long for mReady!W/MountService( 53): Waiting too long for mReady!W/MountService( 53): Waiting too long for mReady!W/MountService( 53): Waiting too long for mReady!W/MountService( 53): Waiting too long for mReady!W/MountService( 53): Waiting too long for mReady!

Page 70: 20100925 sola-android

解決方法 1

● Mountサービス無効化

SDカード使えなくなるのでおすすめしませんが、一応

frameworks/base/services/java/com/android/server/MountService.java

// if ("simulator".equals(SystemProperties.get("ro.product.device"))) { mReady = true; mUmsEnabling = true; return;// }

// mConnector = new NativeDaemonConnector(this, "vold", 10, "VoldConnector");// mReady = false;// Thread thread = new Thread(mConnector, NativeDaemonConnector.class.getName());// thread.start();

Page 71: 20100925 sola-android

解決方法 2

@@ -97,11 +97,12 @@ final class NativeDaemonConnector implements Runnable { LocalSocketAddress.Namespace.RESERVED); socket.connect(address);- mCallbacks.onDaemonConnected(); InputStream inputStream = socket.getInputStream(); mOutputStream = socket.getOutputStream(); + mCallbacks.onDaemonConnected();+ byte[] buffer = new byte[BUFFER_SIZE]; int start = 0;

● NativeDaemonConnector.javaの修正

android-portingで同じ現象に関する投稿があり、既に解決済みだった。

froyo weird timeouts?http://groups.google.co.jp/group/android-porting/browse_thread/thread/a2adbf27075ef8ef?pli=1

Page 72: 20100925 sola-android

Androidが起動しない(4)

Page 73: 20100925 sola-android

Androidのロゴまで進まない

● initで kernel panicが発生して停止●

kjournald starting. Commit interval 5 secondsEXT3-fs warning: maximal mount count reached, running e2fsck is recommendedEXT3 FS on mmcblk0p3, internal journalEXT3-fs: mounted filesystem with writeback data mode.VFS: Mounted root (ext3 filesystem) on device 179:3.Freeing init memory: 132KWarning: unable to open an initial console.Kernel panic - not syncing: Attempted to kill init!

Page 74: 20100925 sola-android

原因と解決方法

● 原因は TLS

Androidで TLSを使うようになっていたため、発生した。

ARCH_ARM_HAVE_TLS_REGISTERが true

しかし Linux Kernelでは CONFIG_HAS_TLS_REGが無効。

そのため、現象が発生した。

Linux Kernel側で有効であれば、問題無し。

または、 Android側で使わないようにする。

Page 75: 20100925 sola-android

追加したデバイスが使えない

Page 76: 20100925 sola-android

加速度センサーを繋いだとき

● TDS01V (加速度、地磁気、気圧のセンサー)USBシリアル( FTDIのドライバ)で接続します

Page 77: 20100925 sola-android

Webカメラを繋いだとき

● USB接続するタイプのもの

Page 78: 20100925 sola-android

発生した現象

● Linuxでは認識してるのに、 Androidで触れない

Linux起動直後( Android起動前)に確認した結果

Android起動後に確認した結果

加速度センサー[root@armadillo500 (ttymxc0) /]# ls -l /dev/ttyUSB* crw-rw-rw- 1 root root 188, 0 Jan 9 20:34 /dev/ttyUSB0

Webカメラ[root@armadillo500 (ttymxc0) ~]# ls -l /dev/video0 crw-rw---- 1 root root 81, 0 Jan 9 20:56 /dev/video0

加速度センサー# ls -l /dev/ttyUSB*crw------- root root 188, 0 2000-01-09 11:39 ttyUSB0

Webカメラ# ls -l /dev/video0crw------- root root 81, 0 2000-01-09 11:52 video0

Page 79: 20100925 sola-android

解決方法

● Androidの initを変更する

デバイスファイルのパーミッション設定に関しては、

system/core/init/devices.cに記載します。

static struct perms_ devperms[] = { { "/dev/null", 0666, AID_ROOT, AID_ROOT, 0 }, { "/dev/zero", 0666, AID_ROOT, AID_ROOT, 0 }, { "/dev/full", 0666, AID_ROOT, AID_ROOT, 0 },(省略) { "/dev/ttyUSB0", 0666, AID_ROOT, AID_ROOT, 0 }, { "/dev/video0", 0660, AID_ROOT, AID_CAMERA, 1 }, { NULL, 0, 0, 0, 0 },};

Page 80: 20100925 sola-android

ネットワークに繋がらない

Page 81: 20100925 sola-android

有線 LAN使用時の問題

● Linuxでは認識してるのに、ブラウザでWebページを表示できない

Page 82: 20100925 sola-android

対処方法 1

● init.rcで dnsの設定を書いてあげる

on bootのブロックに、

setprop net.dns1 8.8.8.8を書く

init.rcの抜粋

on boot... setprop net.dns1 8.8.8.8...

Page 83: 20100925 sola-android

有線 LAN使用時の問題

● Linuxは認識してるのに Androidで認識していない?

Page 84: 20100925 sola-android

対処方法 2

● ethernet supportを移植

Android-x86に実装されているので、必要な処理を持ってきて動かしてみた

変更箇所についてはブログを参照

ethernet support

http://blog.sola-dolphin-1.net/archives/2974043.html

Page 85: 20100925 sola-android

有線 LAN使用時の問題解決?

● Androidにネットワーク接続を認識させた結果

Page 86: 20100925 sola-android

ライブ壁紙が使えない

Page 87: 20100925 sola-android

ライブ壁紙を動かすのに必要なもの

● アプリケーションをインストールしても動作しない

● 必要なライブラリがインストールされていないのが原因

Android Zaurusの日記

NetWalkerで Nexus Oneの Live Wallpaper

http://d.hatena.ne.jp/androidzaurus/20100121/1264065376

ビルドは実行されており、以下にライブラリが出来ている。

out/target/product/<target>/obj/lib/librs_jni.so

out/target/product/<target>/obj/lib/libRS.so

※<target>は環境によって異なる

これらを、ターゲット環境の /system/lib/へコピーする

Page 88: 20100925 sola-android

何故インストールされない?

● Android.mkに

LOCAL_MODULE_TAGS := optional

があると、インストールされない

今回の場合、以下の 2ファイル

frameworks/base/libs/rs/Android.mk

frameworks/base/graphics/jni/Android.mk

Page 89: 20100925 sola-android

(おそらく)正解な解決方法

● 以下のように設定してビルドを行う

device/sola/beagleboard/beagleboard.mkに、

PRODUCT_PACKAGES += \

libRS \

librs_jni

を追記してビルドする。

Page 90: 20100925 sola-android

Ubuntu10.04でcupcake 、 donutのビルドができない

Page 91: 20100925 sola-android

ビルドエラーの原因

● gccと g++が 4.4になったせい

色々とチェックが厳しいらしい

● 解決策としては、 gcc-4.3と g++-4.3をインストール。

ビルド時にこれらを使うようにする

gcc-4.3と g++-4.3のインストール

$ sudo apt-get install gcc-4.3 g++-4.3

gcc-4.3と g++-4.3を使用してビルドする

$ CC=gcc-4.3 CXX=g++-4.3 make

Page 92: 20100925 sola-android

Androidのビルドができない

Page 93: 20100925 sola-android

ビルドエラーの原因

● master 、 froyoなどのブランチは頻繁に修正が入ります。運が悪いと、ビルド出来ない状態なことがあります。( cupcakeの頃はとても酷かったです ... )

● 使用するなら、 android-2.2_r1.1や android-2.1_r2のように、タグが付いているものの方が良いと思います。ビルドエラーは出ない(はずです)

● 最近( 9/23に取得)のmasterではこんなのが ...

Checking build tools versions...build/core/main.mk:72: ************************************************************build/core/main.mk:73: You are attempting to build on a 32-bit system.build/core/main.mk:74: Only 64-bit build environments are supported beyond froyo/2.2.build/core/main.mk:75: ************************************************************build/core/main.mk:76: *** stop. 中止 .

Page 94: 20100925 sola-android

その他

Page 95: 20100925 sola-android

起動画面を変更する

● 動画にする方法

– png形式の画像を用意して、アニメーションを作れます

以下の順にデータを探しに行くようになっています。

/data/local/bootanimation.zip

/system/media/bootanimation.zip

zip形式でアニメーションデータをまとめます$ lsdesc.txt part0 part1$ zip -r -0 bootanimation ./*

dest.txtの中身320 180 30p 1 0 part0p 0 0 part1

part0/part1の中身は、 png形式の画像データ

Page 96: 20100925 sola-android

ソース読みを楽にするために

● GNU GLOBAL– 普段よく使用しているソフト

http://www.tamacom.com/global-j.html

サンプル( VMwareの仮想環境)

http://sola-dolphin-1.net/data/android/image/gnuglobal_sample.tar.gz

ユーザ名やパスワードは android

Firefoxのブックマークに参照先のリンクがあります

● OpenGrok– OESFのサーバで Android-2.2_r1.1が公開されてます

http://tools.oesf.biz/android-2.2_r1.1/

Page 97: 20100925 sola-android

A81-E

● BeagleBoardと同じ、OMAP3搭載● カスタム ROMを動かせるので、専用端末化するのに向いてる。

● 独自イメージの起動方法

知りたい orやりたい?

Page 98: 20100925 sola-android

今後やろうとしてること

● 個人&(横浜) PF部等で情報を出していくまだ情報が少ない?らしいので

● 冬のコミケに申し込み中

● そろそろ Android以外のネタを

Page 99: 20100925 sola-android

終了