[[bc10]]

[[bc10/ソフトウェア]]

- 目次
#contents

* bc10用 android-2.3.2_r1 の概要 [#pa31d611]
bc10 向けに修正を加えた android-2.3.2_r1 の作成について記述します。~

作業の流れは以下のとおりです。~

+ android-2.3.2_r1 のビルドを実行する環境の作成
+ android open source project のソースコード取得
+ bc10-kernel と USB wifi 用 kernel module のビルド
+ android への bc10用変更の追加
+ android のビルド
+ SGX SDK のインストール
+ SDカードへの書き込み

COLOR(red){センサーなど一部デバイスに調整中の箇所がありますため、予告無く更新することがあります。予めご了承ください。}~

* SDイメージについて [#n3c55ba1]
Android2.3.2_r1をbc10向けに調整してビルドしたSDイメージをSourceForge.jpにアップしています。~
SDカードへの導入手順については[[起動用 SD カードの作成>http://labs.beatcraft.com/ja/index.php?bc10%2Fandroid-2.3.2_r1#o13ac30f]]を参照してください。~

http://sourceforge.jp/projects/bc10-dev/releases/50946


* ビルド環境作成 [#w4edb4d1]
今回の環境は以下のようになります。~
-OS: Ubuntu 10.04(64bit版)~
-JAVA:  java 1.6x ~
-Android Version: android-2.3.2_r1

COLOR(red){Android 2.3(codename : Gingerbread)以降をビルドするには 64bit 環境が必要です。}~

環境の構築は、[[Android Open Source Project の "Getting the Source" のページ:http://source.android.com/source/download.html]] 、~
"Setting up your machine" の項の手順に従って行います。



** java6 [#g91d799b]
以下のコマンドで ubuntu のリポジトリから sun java6 のパッケージを取得してインストールします。~

 $ sudo add-apt-repository "deb http://archive.canonical.com/ lucid partner"
 $ sudo add-apt-repository "deb-src http://archive.canonical.com/ubuntu lucid partner"
 $ sudo apt-get update
 $ sudo apt-get install sun-java6-jdk
 $ sudo update-java-alternatives -s java-6-sun

** パッケージインストール [#t10e0e6c]
以下のコマンドで ubuntu のリポジトリから必要なパッケージを取得してインストールします。~
(実際は一行ですが、shell の改行バックスラッシュで途中で改行して表示しています。)

 $ sudo apt-get install git-core gnupg flex bison gperf build-essential zip curl zlib1g-dev \
   gcc-multilib g++-multilib libc6-dev-i386 lib32ncurses5-dev ia32-libs \
   x11proto-core-dev libx11-dev lib32readline5-dev lib32z-dev


* android ソースコード取得 [#nea0dd19]
** repo 設定 [#o0b0c850]
android のソースコードを取得するため repo の設定を行います。

 $ cd ~
 $ mkdir bin
 $ curl http://android.git.kernel.org/repo >~/bin/repo
 $ chmod a+x ~/bin/repo

ubuntu を使っている場合は一旦ログアウトしてログインし直せば ~/bin への PATH は通っています。~
ログアウトせずそのまま作業したい場合は、以下のようにして ~/bin を環境変数の PATH に追加します。

 $ export PATH=~/bin:$PATH

** repo 初期化 [#y1d65e4e]
bc10 という作業用ディレクトリを作成し、android-2.3.2_r1 tag を取得するため repo init を実行します。~
(このディレクトリ名は任意です。android-2.3.2_r1 などといった名前でもかまいません。~
 変更した場合には以降の記述の PATH を自分の設定で読み替えてください。)

 $ cd ~/
 $ mkdir bc10 
 $ cd bc10
 $ repo init -u git://android.git.kernel.org/platform/manifest.git -b android-2.3.2_r1

** repo sync [#i804a5a7]
repo init の実行後、 repo sync を実行し android のソースコードを取得します。~

 $ repo sync

約5GB のファイルをダウンロードしますので回線速度に応じて時間がかかります。


* kernel ビルド [#fed99519]

android の UI からの Wifi on/off に対応するためには~
android の userland 内に USB wifi 用の kernel module を配置する必要があります。~
そのため、android のビルドを行う前に USB wifi の kernel module をビルドします。~
この USB wifi の kernel module のビルドには~
ビルド実行済みの kernel ソースツリーが必要になるため、~
bc10 用 kernel を最初にビルドします。


**環境変数設定 [#x363e564]
boot に必要な x-loader、u-boot、kernel は全て android のソースコードと共に配布されている~
cross toolchain を使用してビルドします。~
ここでは、prebuilt/linux-x86/toolchain/arm-eabi-4.4.3/bin/ 内 の arm cross toolchain を使用します。~
~
ビルド時にこの toolchain を使って cross compile が行われるように環境変数を設定します。~

 $ export PATH=/home/beat/bc10/prebuilt/linux-x86/toolchain/arm-eabi-4.4.3/bin:${PATH}
 $ export ARCH=arm
 $ export CROSS_COMPILE=arm-eabi-

** kernel [#m4983c49]
 
 $ cd ~/
 $ git clone git://gitorious.org/~bc-dev/rowboat/bc10-rowboat-kernel.git bc10-rowboat-kernel
 $ cd ~/bc10-rowboat-kernel/
bc10向けリリースブランチに切り替えます。~
 $ git checkout -t -b bc10-2.6.32 origin/bc10-2.6.32
 $ make omap3_bc10_defconfig
 $ make uImage
 $ make modules

ビルド完了後以下のディレクトリに uImage が作成されます。~
(USB wifi 以外の kernel module を使用しない場合、最後の make modules は必要ありません。)

 $ ls ~/bc10-rowboat-kernel/arch/arm/boot/
 Image  Makefile  bootp  compressed  install.sh  uImage  zImage



* USB Wifi (RT3070USB) ドライバー ビルド [#qef844a3]
USB Wifi に対応するため RT3070USB のドライバーを追加します。~
動作を確認したデバイスは以下のものです。~
LEFT:
| メーカー | 型番 | Vendor ID | Device ID | 備考 |h
| PLANEX  | [[GW-USMicroN-G>http://www.planex.co.jp/product/wireless/gw-usmicron-g/]] | 2019 | ED14 | 販売終了 |
| Logitec | [[LAN-W150N/U2IPH>http://www.pro.logitec.co.jp/pro/g/gLAN-W150NU2M]] | 0789 | 0164 | |
| Logitec | [[LAN-W150N/U2BK>http://www.pro.logitec.co.jp/pro/g/gLAN-W150NU2BK/]] | 0789 | 0168 | |
| Buffalo | [[WLI-UC-GNM>http://buffalo.jp/product/wireless-lan/client/wli-uc-gnm/]] | 0411 | 01a2 | |
| Buffalo | [[WLI-UC-G301N>http://buffalo.jp/products/catalog/network/wli-uc-g301n/]] | 0411 | 016f |AC給電の USBハブに接続して動作を確認しています。 |
| Buffalo | [[WLI-UC-GN>http://buffalo.jp/products/catalog/network/wli-uc-gn/]] | 0411 | 015d | |


ここでは、RT3070USB を使用している上記 USB Wifi の使用を前提に記述します。~
~
ドライバーは [[RALINK Web>http://www.ralinktech.com/support.php?s=2]] にあるLinuxドライバー~
2011_0107_RT3070_RT3370_Linux_STA_v2.5.0.1_DPO.tar.bz2 を使用します。~
~
ソースコードの入手には上記 web ページからのメールアドレスと氏名の入力を必要とします。~
ダウンロードしたファイルは /home/beat/ に置いて作業するものとして記述します。~
~
ビルドには上記 kernel ビルド時に使用したのと同じ Android ソースファイル内の ~
prebuilt/linux-x86/toolchain/arm-eabi-4.4.3/bin/ の cross toolchain を使用します。~
~
以下の patch を当てることで bc10 向けにクロスコンパイルできるようになります。~
変更内容は、~
・bc10 向けのコンパイル設定の追加(platform、toolchain の PATH、コンパイルフラグの設定)~
・ファームウェアのリージョン設定を日本にし、設定項目例をわかりやすいものに変更~
・USB Wifi のベンダーID、製品IDの追加~
です。~

#ref(2011_0107_RT3070_RT3370_Linux_STA_v2.5.0.1_DPO.tar.bz2)~
#ref(RT3070-2.5.0.1.diff)~

差分は修正後のソースを 2011_0107_RT3070_RT3370_Linux_STA_v2.5.0.1_DPO-bc10 とリネームした後オリジナルと比較し
 diff -urN 2011_0107_RT3070_RT3370_Linux_STA_v2.5.0.1_DPO/ 2011_0107_RT3070_RT3370_Linux_STA_v2.5.0.1_DPO-bc10/
で取得しました。

・bc10 用設定の追加
 --- 2011_0107_RT3070_RT3370_Linux_STA_v2.5.0.1_DPO/Makefile     2011-01-07 11:18:32.000000000 +0900
 +++ 2011_0107_RT3070_RT3370_Linux_STA_v2.5.0.1_DPO-bc10/Makefile        2011-01-30 15:09:46.023581979 +0900
 @@ -23,7 +23,8 @@
  RTMP_SRC_DIR = $(RT28xx_DIR)/RT$(CHIPSET)
 
  #PLATFORM: Target platform
 -PLATFORM = PC
 +PLATFORM = BC10
 +#PLATFORM = PC
  #PLATFORM = 5VT
  #PLATFORM = IKANOS_V160
  #PLATFORM = IKANOS_V180
 @@ -176,6 +177,11 @@
  CROSS_COMPILE =
  endif
 
 +ifeq ($(PLATFORM),BC10)
 +LINUX_SRC = /home/beat/bc10-rowboat-kernel
 +CROSS_COMPILE = /home/beat/bc10/prebuilt/linux-x86/toolchain/arm-eabi-4.4.3/bin/arm-eabi-
 +endif
 +
  ifeq ($(PLATFORM),IXP)
  LINUX_SRC = /project/stable/Gmtek/snapgear-uclibc/linux-2.6.x
  CROSS_COMPILE = arm-linux-
 @@ -384,6 +390,9 @@
         cp -f $(RT28xx_DIR)/os/linux/rtnet$(CHIPSET)apsta.ko /tftpboot
  endif
  else
 +ifeq ($(PLATFORM),BC10)
 +       $(MAKE) ARCH=arm CROSS_COMPILE=$(CROSS_COMPILE) -C  $(LINUX_SRC) SUBDIRS=$(RT28xx_DIR)/os/linux modules
 +else
         cp -f $(RT28xx_DIR)/os/linux/rt$(CHIPSET)sta.ko /tftpboot
  ifeq ($(OSABL),YES)
         cp -f $(RT28xx_DIR)/os/linux/rtutil$(CHIPSET)sta.ko /tftpboot
 @@ -392,6 +401,7 @@
  endif
  endif
  endif
 +endif
 
 
  release:

・リージョンコードの変更、設定例の変更
 --- 2011_0107_RT3070_RT3370_Linux_STA_v2.5.0.1_DPO/RT2870STA.dat        2011-01-07 11:18:32.000000000 +0900
 +++ 2011_0107_RT3070_RT3370_Linux_STA_v2.5.0.1_DPO-bc10/RT2870STA.dat   2011-01-30 15:18:32.301699483 +0900
 @@ -1,8 +1,8 @@
  #The word of "Default" must not be removed
  Default
  CountryRegion=5
 -CountryRegionABand=7
 -CountryCode=
 +CountryRegionABand=1
 +CountryCode=JP
  ChannelGeography=1
  SSID=11n-AP
  NetworkType=Infra
 @@ -18,8 +18,8 @@
  PktAggregate=0
  WmmCapable=1
  AckPolicy=0;0;0;0
 -AuthMode=OPEN
 -EncrypType=NONE
 +AuthMode=authtype
 +EncrypType=encrtype
  WPAPSK=
  DefaultKeyID=1
  Key1Type=0

・Vendor_ID:Device_ID の追加
 --- 2011_0107_RT3070_RT3370_Linux_STA_v2.5.0.1_DPO/common/rtusb_dev_id.c        2011-01-07 11:18:32.000000000 +0900
 +++ 2011_0107_RT3070_RT3370_Linux_STA_v2.5.0.1_DPO-bc10/common/rtusb_dev_id.c   2011-01-30 15:28:20.393002119 +0900
 @@ -104,6 +104,13 @@
         {USB_DEVICE(0x13D3,0x3321)}, /* Azurewave */
         {USB_DEVICE(0x07FA,0x7712)}, /* Edimax */
         {USB_DEVICE(0x0789,0x0166)}, /* Edimax */
 +        {USB_DEVICE(0x2019,0xED14)}, /* PLANEX added by BC */
 +        {USB_DEVICE(0x2019,0xAB29)}, /* PLANEX added by BC */
 +        {USB_DEVICE(0x0789,0x0164)}, /* Logitec added by BC */
 +        {USB_DEVICE(0x0789,0x0168)}, /* Logitec added by BC */
 +        {USB_DEVICE(0x0411,0x01a2)}, /* Buffalo added by BC */
 +        {USB_DEVICE(0x0411,0x016f)}, /* Buffalo added by BC */
 +        {USB_DEVICE(0x0411,0x015d)}, /* Buffalo added by BC */
  #endif /* RT3070 */
         { }/* Terminating entry */
 };

・bc10用設定の追加
 --- 2011_0107_RT3070_RT3370_Linux_STA_v2.5.0.1_DPO/os/linux/config.mk   2011-01-07 11:20:51.000000000 +0900
 +++ 2011_0107_RT3070_RT3370_Linux_STA_v2.5.0.1_DPO-bc10/os/linux/config.mk      2011-01-30 15:36:50.191769728 +0900
 @@ -11,7 +11,7 @@
  HAS_XLINK=n
 
  # Support Wpa_Supplicant
 -HAS_WPA_SUPPLICANT=n
 +HAS_WPA_SUPPLICANT=y
 
  # Support Native WpaSupplicant for Network Maganger
  HAS_NATIVE_WPA_SUPPLICANT_SUPPORT=n
 @@ -415,6 +415,10 @@
      endif
  endif
 
 +ifeq ($(PLATFORM),BC10)
 +EXTRA_CFLAGS := $(WFLAGS) -I$(RT28xx_DIR)/include -DMODILE
 +endif
 +
  #If the kernel version of RMI is newer than 2.6.27, please change "CFLAGS" to "EXTRA_FLAGS"
  ifeq ($(PLATFORM),RMI)
  EXTRA_CFLAGS := -D__KERNEL__ -DMODULE=1 -I$(LINUX_SRC)/include -I$(LINUX_SRC)/include/asm-mips/mach-generic \
  -I$(RT28xx_DIR)/include -Wall -Wstrict-prototypes -Wno-trigraphs -O2 -fno-strict-aliasing -fno-common \
  -DCONFIG_IFX_ALG_QOS -DCONFIG_WAN_VLAN_SUPPORT -fomit-frame-pointer -DIFX_PPPOE_FRAME -G 0 -fno-pic \
  -mno-abicalls -mlong-calls -pipe -finline-limit=100000 -mabi=32 -G 0 -mno-abicalls -fno-pic -pipe -msoft-float \
  -march=xlr -ffreestanding  -march=xlr -Wa,--trap, -nostdinc -iwithprefix include $(WFLAGS)

・GPLフラグの追加(これがないと insmod できません。)
 --- 2011_0107_RT3070_RT3370_Linux_STA_v2.5.0.1_DPO/os/linux/usb_main_dev.c      2011-01-07 11:18:32.000000000 +0900
 +++ 2011_0107_RT3070_RT3370_Linux_STA_v2.5.0.1_DPO-bc10/os/linux/usb_main_dev.c 2011-01-30 14:38:08.011046027 +0900
 @@ -37,6 +37,7 @@
  /* Otherwise post to forum in ralinktech's web site(www.ralinktech.com) and let all users help you. *** */
  MODULE_AUTHOR("Paul Lin <paul_lin@ralinktech.com>");
  MODULE_DESCRIPTION("RT2870 Wireless Lan Linux Driver");
 +MODULE_LICENSE("GPL");
  #ifdef CONFIG_STA_SUPPORT
  #ifdef MODULE_VERSION
  MODULE_VERSION(STA_DRIVER_VERSION);

配布されているソースアーカイブは拡張子が bz2 となっているのに実際は gzip 圧縮されていますので、~
以下のようにアーカイブの展開、patch 後 makeを実行します。~
 $ cd ~/
 $ tar xvfz 2011_0107_RT3070__RT3370_Linux_STA_v2.5.0.1_DPO.tar.bz2
 $ patch -p0 < RT3070-2.5.0.1.diff
 $ cd 2011_0107_RT3070__RT3370_Linux_STA_v2.5.0.1_DPO/
 $ make
 $ ls -l os/linux/rt3070sta.ko
 -rw-r--r-- 1 beat beat 8809768 2011-01-30 21:58 rt3070sta.ko
make 完了後 os/linux/ 以下に rt3070sta.ko が作成されています。


* bc10 用追加ファイルの取得 [#nc942ebf]

android-2.3.2_r1 を bc10 向けにビルドするための追加ファイルを~
github のリポジトリから git clone で取得します。~

** alsa_sound [#jfebc9c0]
以下のコマンドで alsa_sound を android-2.3.2_r1 に追加します。

 $ cd ~bc10/hardware/
 $ git clone git://github.com/bc-dev/2.3-hardware-alsa_sound.git alsa_sound

** alsa-lib, alsa-utils [#q0cf6dda]
以下のコマンドで alsa-lib, alsa-utils を android-2.3.2_r1 に追加します。
2011/07/21 alsa-utils取得のgitコマンドの間違いを訂正 ~

 $ cd ~/bc10/external/
 $ git clone git://github.com/bc-dev/2.3-external-alsa-lib.git alsa-lib
 $ git clone git://github.com/bc-dev/2.3-external-alsa-lib.git alsa-utils
 $ git clone git://github.com/bc-dev/2.3-external-alsa-utils.git alsa-utils

** bc10 device build files [#s89fea9d]
以下のコマンドで android-2.3.2_r1 を bc10 向けにビルドするビルド設定ファイル類を android-2.3.2_r1 に追加します。

 $ cd ~/bc10/device
 $ git clone git://github.com/bc-dev/2.3-device-beatcraft.git beatcraft


* patch の適用とファイルの配置 [#wc12ddba]

ファイルの追加でなく、android-2.3.2_r1 のソースコードに直接 bc10 向けの修正を加える patch を適用します。~

** patch の取得 [#jab036a0]
まず以下のコマンドで patch ファイルを取得します。

 $ cd ~/
 $ git clone git://github.com/bc-dev/2.3-patches.git

** wpa_supplicant_6 [#k04581c1]

USB wifi を接続し Android の UI から設定できるよう wpa_supplicant_6 に patch をあてます。

 $ cd ~/bc10/external/wpa_supplicant_6
 $ cp ~/2.3-patches/external-wpa_supplicant_6.diff .
 $ patch -p1 < external-wpa_supplicant_6.diff 

** ti omap3 [#tf639b0b]
bc10 は OMAP3530 を搭載しているためビルド設定ファイル内で TARGET_BOARD_PLATFORM=omap3 と設定しています。~
この設定が有効になっていると android-2.3.2_r1/hadware/ti/omap3/ の下のコードもビルドされますが~
ここにあるコードは Gingerbread 向けのメンテナンスも行われておらず
そのままでは OMAP3530 で使用できないので、ビルドされないようにします。

 $ cd ~/bc10/hardware/ti/omap3
 $ cd ~/2.3-patches/hardware-ti-omap3.diff .
 $ patch -p1 < hardware-ti-omap3.diff

** USB Wifi ドライバーの配置 [#sb18b052]
前項でビルドした RT3070USB のドライバーと、patch 済みのファームウェアファイルを~
device/beatcraft/bc10/ にコピーします。~
 $ cd ~/bc10/2011_0107_RT3070__RT3370_Linux_STA_v2.5.0.1_DPO/
 $ cp os/linux/rt3070sta.ko ~/bc10/device/beatcraft/bc10/
 $ cp RT2870STA.dat ~/bc10/device/beatcraft/bc10/

このディレクトリに配置したファイルは android のビルド時に~
android のビルドシステムによって適正な位置にコピーされます。~
詳細は ~/bc10/device/beatcraft/bc10/device.mk の中の変数~
PRODUCT_COPY_FILES をご覧ください。~
~
なお、device/beatcraft/bc10/ の git リポジトリには~
ビルド済みの uImage、RT3070sta.ko と、RT2870STA.dat を最初から登録してありますので~
そちらを使って androud の起動イメージ を作成することもできますが、~
kernel と その kernel に合ったドライバーはお手元でビルドされることをお勧めします。
~
以上でビルドの準備が整いました。~

* Android ビルド [#abc9999a]
android ビルドのため bc10用の環境変数を設定します。~

 $ cd ~/bc10
 $ source build/envsetup.sh
 including device/beatcraft/bc10/vendorsetup.sh
 including device/htc/passion/vendorsetup.sh
 including device/samsung/crespo/vendorsetup.sh
 $ lunch
 
 You're building on Linux
 
 Lunch menu... pick a combo:
      1. generic-eng
      2. simulator
      3. full_bc10-eng
      4. full_passion-userdebug
      5. full_crespo-userdebug
 
 Which would you like? [generic-eng] [3] ← 3 を入力し enter
 
 ============================================
 PLATFORM_VERSION_CODENAME=REL
 PLATFORM_VERSION=2.3.2
 TARGET_PRODUCT=full_bc10
 TARGET_BUILD_VARIANT=eng
 TARGET_SIMULATOR=false
 TARGET_BUILD_TYPE=release
 TARGET_BUILD_APPS=
 TARGET_ARCH=arm
 HOST_ARCH=x86
 HOST_OS=linux
 HOST_BUILD_TYPE=release
 BUILD_ID=GRH78C
 ============================================

上記の設定確認後 make を実行します。~

 $ make

make を実行する際はビルドの環境(CPU のコア数)に応じて -j2 など並列実行を指定すると所要時間を減らすことができます。~
make 中に出力される情報を増やしたい場合は showcommands を付加して実行すると~
make 中に実行されているコマンドのログを詳細に出力します。~
~
例:
 $ time make showcommands -j2 2>&1 | tee make.log-20110201-01

** 追加ビルド [#mf6179a6]
上記のビルド完了後、同じ環境変数が設定されたままの状態で以下のコマンドを実行し、~
GPS用とセンサー用の HAL ライブラリモジュールを追加ビルドします。
 $ cd ~/bc10/device/beatcraft/bc10/libgps
 $ mm
 $ cd ~/bc10/device/beatcraft/bc10/libsensors
 $ mm

* イメージ作成 [#j4b9ee56]
ビルド完了後のビルド済みファイルは out/target/product/bc10/ にあり、以下のような内容になっています。~

 $ cd ~/bc10/out/target/product/bc10
 $ ls -al
 drwxr-xr-x  8 beat beat      4096 2011-02-01 20:29 .
 drwxr-xr-x  3 beat beat      4096 2011-02-01 19:47 ..
 -rw-r--r--  1 beat beat        11 2011-02-01 19:47 android-info.txt
 drwxrwxrwx  8 root root      4096 2011-02-01 20:32 bc10-image
 -rw-r--r--  1 beat beat      3727 2011-02-01 20:23 clean_steps.mk
 drwxr-xr-x  3 beat beat      4096 2011-02-01 19:53 data
 -rw-r--r--  1 beat beat     22633 2011-02-01 20:02 installed-files.txt
 drwxr-xr-x 14 beat beat      4096 2011-02-01 20:02 obj
 -rw-r--r--  1 beat beat       230 2011-02-01 20:23 previous_build_config.mk
 -rw-r--r--  1 beat beat    142336 2011-02-01 19:57 ramdisk.img
 drwxr-xr-x  8 beat beat      4096 2011-02-01 19:57 root
 drwxr-xr-x  5 beat beat      4096 2011-02-01 19:57 symbols
 drwxr-xr-x 12 beat beat      4096 2011-02-01 19:58 system
 -rw-------  1 beat beat 104951616 2011-02-01 20:02 system.img
 -rw-------  1 beat beat   1482624 2011-02-01 19:53 userdata.img

以下のコマンドでビルドされた userland のバイナリを起動可能な配置に整えます。~

 $ mkdir bc10-image
 $ cp -afr root/* bc10-image/
 $ cp -afr system/* bc10-image/system/
 $ sudo chown -R root.root bc10-image/
 $ sudo chmod -R 777 bc10-image/

起動可能な配置の userland は以下のような内容になります。

 $ cd bc10-image
 $ ls -al
 drwxrwxrwx  8 root root  4096 2011-02-01 20:32 .
 drwxr-xr-x  8 beat beat  4096 2011-02-01 20:29 ..
 drwxrwxrwx  2 root root  4096 2011-02-01 19:47 data
 -rwxrwxrwx  1 root root   118 2011-02-01 19:47 default.prop
 drwxrwxrwx  2 root root  4096 2011-02-01 19:47 dev
 -rwxrwxrwx  1 root root   904 2011-02-01 15:35 gps_init.sh
 -rwxrwxrwx  1 root root 90084 2011-02-01 19:57 init
 -rwxrwxrwx  1 root root  1677 2011-02-01 14:27 init.goldfish.rc
 -rwxrwxrwx  1 root root   917 2011-02-01 15:08 init.omap3.rc
 -rwxrwxrwx  1 root root 15018 2011-02-01 17:15 init.rc
 drwxrwxrwx  2 root root  4096 2011-02-01 19:47 proc
 drwxrwxrwx  2 root root  4096 2011-02-01 19:57 sbin
 drwxrwxrwx  2 root root  4096 2011-02-01 19:47 sys
 drwxrwxrwx 12 root root  4096 2011-02-01 20:30 system
 -rwxrwxrwx  1 root root     0 2011-02-01 14:27 ueventd.goldfish.rc
 -rwxrwxrwx  1 root root   231 2011-02-01 15:08 ueventd.omap3.rc
 -rwxrwxrwx  1 root root  3764 2011-02-01 14:27 ueventd.rc


* SGX SDK のインストール [#g555a2b6]
[[bc10/froyo]]と同じ手順でTI Android SGX SDKを取得します。~
~
(注):~
- 取得完了までに時間がかかることがあります。~
- [[bc10/froyo]]にてOMAP35x_Android_Graphics_SDK_3_01_00_03をインストール済みの場合は~
同じファイルなので転用しても問題ありません、Rules.makeのディレクトリ位置の変更には~
注意してください。再度ダウンロードの際は任意にバックアップもしくは削除などをしてください。~
- kernelもしくはAndroid userlandの入れ替えを行う際はkernel、Android全体のリビルドが必要になります。~

 $ cd ~
 $ git clone git://gitorious.org/rowboat/ti_android_sgx_sdk.git
 $ cd ti_android_sgx_sdk/
 $ ./OMAP35x_Android_Graphics_SDK_setuplinux_3_01_00_03.bin

インストールディレクトリ位置を聞かれるので今回はデフォルトインストールディレクトリ~
の${HOME}/OMAP35x_Android_Graphics_SDK_3_01_00_03 を指定します。~
${HOME}は、ホームディレクトリーの意味で、/home/beatを指します。~
(以降、ホームディレクトリーは、/home/beatを指します。)~
~
[[To download TI's Android SGX SDK>http://code.google.com/p/rowboat/wiki/Source#To_download_TI%27s_Android_SGX_SDK]] ~
~
** Rules.make の変更 [#ke48d729]
Rules.make のHOME、GRAPHICS_INSTALL_DIR、ANDROID_ROOT、CSTOOL_DIR、~
KERNEL_INSTALL_DIRをそれぞれのファイルPATHに合うよう修正してください。~
以下のRules.makeは上記ビルド時の設定にあわせています。~
ANDROID_ROOTは作成したbc10-imageのディレクトリ位置~
にあわせています。~

 $ cd ~/OMAP35x_Android_Graphics_SDK_3_01_00_03

 --- Rules.make  2011-01-05 14:20:43.863788943 +0900
 +++ Rules.make-orig     2011-01-05 14:17:04.661291128 +0900
 @@ -4,24 +4,20 @@ PLATFORM=LinuxOMAP3 
 
  ################# FIELDS MODIFIABLE BY THE USER ###############################
  #set home area HOME (relative location for all SDK operations)
 -#HOME=INVALIDVAL
 -HOME=/home/beat/prebuilt-20101227
 +HOME=INVALIDVAL
  #Current Directory where Graphics SDK is installed
  GRAPHICS_INSTALL_DIR=$(HOME)/OMAP35x_Android_Graphics_SDK_3_01_00_03
  #Android Specific
  #Path of Android Root FS
 -#ANDROID_ROOT=$(HOME)/INVALIDVAL
 -ANDROID_ROOT=$(HOME)/bc10/out/target/product/bc10/bc10-image
 +ANDROID_ROOT=$(HOME)/INVALIDVAL
  #set toolchain root path for arm-eabi
 -#CSTOOL_DIR=INVALIDVAL
 -CSTOOL_DIR=$(HOME)/bc10/prebuilt/linux-x86/toolchain/arm-eabi-4.4.3
 +CSTOOL_DIR=INVALIDVAL
  CSTOOL_PREFIX=arm-eabi-
  CSTOOL_PATH=$(CSTOOL_DIR)/bin
  CSTOOL_LIBSTDC++_PATH=$(CSTOOL_DIR)/arm-none-linux-gnueabi/libc/usr/lib 
 
  #set the kernel installation path
 -#KERNEL_INSTALL_DIR=$(HOME)/INVALIDVAL
 -KERNEL_INSTALL_DIR=$(HOME)/bc10-rowboat-kernel
 +KERNEL_INSTALL_DIR=$(HOME)/INVALIDVAL
  TARGETFS_INSTALL_DIR=$(ANDROID_ROOT)
 
  GFX_TARGETFS_KERMOD_PATH=$(TARGETFS_INSTALL_DIR)/lib/modules/2.6.32

RULEs.make変更完了後make、make installを実行します。~

 $ make 
 $ make OMAPES=3.x install


* Kernel 以外の起動に必要なファイルのビルド [#g80eeb41]
** u-boot [#w583bb25]
u-boot-bc10 のアップデートにより、有機ELを表示デバイスの初期値とする boot.scr の設定を~
予め組込むように修正しています。~
また起動時の u-boot shell の入力待機時間を10秒から2秒に変更しています。~
以下のコマンドでソースコードを取得しビルドします。
 $ cd ~/
 $ git clone git://gitorious.org/bc10/u-boot-bc10.git u-boot-bc10
 $ cd u-boot-bc10/
 $ make mrproper
 $ make omap3_bc10_config
 $ make

有機ELを表示デバイスの初期値とする設定は u-boot-bc10 内の~
include/configs/omap3_bc10.h に以下のように記述しています。~

 u-boot-bc10/include/configs$ vi omap3_bc10.h
 #define CONFIG_EXTRA_ENV_SETTINGS \
         "loadaddr=0x82000000\0" \
         "usbtty=cdc_acm\0" \
         "console=ttyS2,115200n8\0" \
         "androidconsole=ttyS2\0" \
         "mem=256M\0" \
         "vram=12M\0" \
         "dvimode=1024x768MR-24@60\0" \
         "defaultdisplay=lcd\0" \
         "mmcroot=/dev/mmcblk0p2 rw\0" \
         "mmcrootfstype=ext3 rootwait\0" \
         "nandroot=/dev/mtdblock4 rw\0" \ 

これは、以下の boot.scr と同じ設定内容になります。~

 if fatload mmc 0 84000000 uImage
 then
  echo ***** Kernel: /dev/mmcblk0p1/uImage.bin *****
 fi
 echo ***** RootFS: /dev/mmcblk0p2 *****
 setenv bootargs 'mem=256M androidboot.console=ttyS2 console=tty0  
 console=ttyS2,115200n8 root=/dev/mmcblk0p2 init=/init rootwait omapdss.def_disp=lcd'
 bootm 84000000
 (注)setenv bootargs〜 disp=lcd' は改行してありますが、使用される際は1行で記述してください。

ビルド後 u-boot.bin は SDカードFATパーティションに MLO ファイルをコピーした後にコピーします。~
(必ず MLO ファイルを最初に FATパーティションにコピーする必要があります。)
SDカードイメージ作成についてはページ下部にあります[[SDカードイメージ作成]]をご覧ください。~

** x-loader [#r82ab56e]
以下のコマンドでソースコードを取得しビルドします。
 $ cd ~/
 $ git clone git://gitorious.org/~bc-dev/x-load-omap3/x-load-bc10.git x-load-bc10
 $ cd x-load-bc10/
 $ git checkout -t -b bc10 origin/bc10
 $ make omap3530bc10_config
 $ make

x-load.bin は OMAP BootROMの仕様とフォーマットが合っていないため、このまま NAND Flash や~
SDカードに書きこんでもブートローダとして動作させることができません。~
この問題を解決するため、signGP というツールで x-load.bin を加工する必要があります。~
~
signGP の実行ファイルは以下の場所からダウンロードすることができます。 ~
http://beagleboard.googlecode.com/files/signGP ~
ダウンロードした signGP を以下のように実行します。~

 $ signGP x-load.bin

ビルド後作成された x-load.bin.ift を MLO という名前に変更します。~
MLO は SDカードFATパーティションの先頭に書き込むためのファイルです。~
SDカードイメージ作成についてはページ下部にあります[[SDカードイメージ作成]]をご覧ください。~

 $ mv x-load.bin.ift MLO



* 起動用 SD カードの作成 [#o13ac30f]
[[bc10/booting 起動用SDカード作成 >http://labs.beatcraft.com/ja/index.php?bc10%2Fbooting#q0449272]]の~
手順に従って作成していきます。~
この作成手順はSDカード用です。~
(bc10 は、設計上マイクロSDからのブートは出来ません。)~
~
SDカードのパーティション配置、ファイル配置の概略は以下のようになります。~

- FAT32パーティション
-- X-Loader
-- U-Boot
-- Android 化 Linux kernel
- Linuxパーティション
-- Android ルートファイルシステム

作業環境は Linux を想定しています。~
作業手順は以下のようになります。~
+ パーティションの初期化・設定
+ ファイルシステムのフォーマット
+ ファイルの配置

以下の手順は主に[[LinuxBootDiskFormat(code.google.com):http://code.google.com/p/beagleboard/wiki/LinuxBootDiskFormat]]から引用してアレンジしたものです。~

** SDカードのアンマウント [#s015a679]
このあとパーティション操作やフォーマット作業をおこなうために、~
SDカードがマウントされている場合には、まずアンマウントをおこないます。~
以下のようにSDカードがマウントされているとします。~

 $ df -h

 Filesystem            Size  Used Avail Use% Mounted on
 ...
 /dev/sdc1             400M   94M  307M  24% /media/disk
 ...

アンマウントをおこないます。~

 $ umount /media/disk

** パーティションの初期化・設定 [#y9078f7c]
fdiskコマンドを実行します。~
引数にはSDカードのデバイスファイルを指定します。~
この位置は作業環境によって変わりますので、事前に確認しておいてください。~
以下は実行例です。~

 $ sudo fdisk /dev/sdc

 Command (m for help): [p]
 
 Disk /dev/sdc: 2021 MB, 2021654528 bytes
 255 heads, 63 sectors/track, 245 cylinders
 Units = cylinders of 16065 * 512 = 8225280 bytes
 
    Device Boot      Start         End      Blocks   Id  System
 /dev/sdc1   *           1         246     1974240+   c  W95 FAT32 (LBA)
 Partition 1 has different physical/logical endings:
      phys=(244, 254, 63) logical=(245, 200, 19)

パーティションを全て削除します。
 Command (m for help): [d]
 Selected partition 1

エキスパートモードにモード変更します。
 Command (m for help): [x]

ヘッダ数を255に設定します。
 Expert Command (m for help): [h]
 Number of heads (1-256, default xxx): [255]

セクタ数を63に設定します。
 Expert Command (m for help): [s]
 Number of sectors (1-63, default xxx): [63]

シリンダ数の設定は使用するSDカードごとに異なります。~
以下の計算式でシリンダ数を計算します。(小数点以下切り捨て)
 #シリンダ数 = 小数点以下切り捨て (SDカードのバイト数 / 255 / 63 / 512 )

今回の例で使用しているSDカードでは以下のようになります。
 2021654528 / 255 / 63 / 512 = 245.79
 -> 245

シリンダ数を設定します。今回の例では245になります。
 Expert Command (m for help): [c]
 Number of cylinders (1-256, default xxx): [上式で求めた値]

ノーマルモードにモード変更します。
 Expert Command (m for help): [r]

FAT32パーティションを作成します。
 Command (m for help): [n]
 Command action
    e   extended
    p   primary partition (1-4)
 [p]
 Partition number (1-4): [1]
 First cylinder (1-245, default 1): [(press Enter)]
 Using default value 1
 Last cylinder or +size or +sizeM or +sizeK (1-245, default 245): [+50]
 
 Command (m for help): [t]
 Selected partition 1
 Hex code (type L to list codes): [c]
 Changed system type of partition 1 to c (W95 FAT32 (LBA))

ブートフラグを設定します。
 Command (m for help): [a]
 Partition number (1-4): [1]

Linuxのファイルシステム用パーティションを作成します。
 Command (m for help): [n]
 Command action
    e   extended
    p   primary partition (1-4)
 [p]
 Partition number (1-4): [2]
 First cylinder (52-245, default 52): [(press Enter)]
 Using default value 52
 Last cylinder or +size or +sizeM or +sizeK (52-245, default 245): [(press Enter)]
 Using default value 245

パーティション設定を確認します。
 Command (m for help): [p]
 
 Disk /dev/sdc: 2021 MB, 2021654528 bytes
 255 heads, 63 sectors/track, 245 cylinders
 Units = cylinders of 16065 * 512 = 8225280 bytes
 
    Device Boot      Start         End      Blocks   Id  System
 /dev/sdc1   *           1          51      409626    c  W95 FAT32 (LBA)
 /dev/sdc2              52         245     1558305   83  Linux

パーティションテーブルの変更を保存します。
 Command (m for help): [w]
 The partition table has been altered!
 
 Calling ioctl() to re-read partition table.
 
 WARNING: Re-reading the partition table failed with error 16: Device or resource busy.
 The kernel still uses the old table.
 The new table will be used at the next reboot.
 
 WARNING: If you have created or modified any DOS 6.x
 partitions, please see the fdisk manual page for additional
 information.
 Syncing disks.

** ファイルシステムのフォーマット [#g51c7516]
FAT32パーティションとLinuxパーティションをそれぞれフォーマットします。~
FAT32とEXT3の文字列の部分はパーティションのラベルになりますので、お好きな名前で設定してください。~

 $ [sudo mkfs.msdos -F 32 /dev/sdc1 -n FAT32]
 mkfs.msdos 2.11 (12 Mar 2005)

 $ [sudo mkfs.ext3 -L EXT3 /dev/sdc2]
 mke2fs 1.40-WIP (14-Nov-2006)
 Filesystem label=
 OS type: Linux
 Block size=4096 (log=2)
 Fragment size=4096 (log=2)
 195072 inodes, 389576 blocks
 19478 blocks (5.00%) reserved for the super user
 First data block=0
 Maximum filesystem blocks=402653184
 12 block groups
 32768 blocks per group, 32768 fragments per group
 16256 inodes per group
 Superblock backups stored on blocks: 
         32768, 98304, 163840, 229376, 294912
 
 Writing inode tables: done                            
 Creating journal (8192 blocks): done
 Writing superblocks and filesystem accounting information: 

* SDカードへのファイルの書き込み [#a5b17eea]
**FAT32パーティションへのファイル配置 [#g32d86a9]
1段目のブートローダであるX-Loader(MLO)は、SDカード上の配置方法に制約があります。~
必ず以下のように配置してください。~
- FAT32パーティションのフォーマット後、最初に配置するようにします。
- パーティション内のトップディレクトリに配置します。

 $ cd ~/bc10/x-load-bc10/
 $ sudo cp MLO /media/FAT32/

他のファイルには配置方法に特に規則はありません。そのままSDカード上にコピーしてください。

 $ cd ~/bc10/u-boot-bc10/
 $ sudo cp u-boot.bin /media/FAT32/
 $ cd ~/bc10/bc10-rowboat-kernel/arch/arm/boot/
 $ sudo cp uImage /media/FAT32/

配置する順序を間違えたり手順に失敗したりした場合は、~
FAT32パーティションのフォーマットからやり直してください。~


**EXT3パーティションへの配置 [#g73e209f]
EXT3パーティションへの配置には特に制限はありません。~
bc10-image/ の中身をまるごと SDカード上にコピーします。

 $ cd ~/bc10/out/target/product/bc10/bc10-image/
 $ sudo cp -a * /media/EXT3/

~
以上で起動イメージのSDカード上への配置は完了です。~
念のため sync を行ってからアンマウントしてください。

 $ sudo sync
 $ umount /media/EXT3
 $ umount /media/FAT32

* SDカードからの起動 [#w6faa303]
用意できたSDカードを bc10 のSDカードスロットに挿入して電源を投入します。~
Android は初回起動時に SQLite3 設定DBの作成や Dalvik Executable(.dex)ファイルの生成を行い~
それらの起動ディスクへの書き込みを行いますので、初回起動には少し長めに時間がかかります。~
~
これで bc10 向けの Android 2.3.2_r1 の起動イメージの作成は完了です。~
~

* 備考 [#ceeee919]
** ボタン配置について [#q4e5c3ef]
bc10の本体正面右側に7つのボタンがあります。~
図a.の数字で示した各ボタンは、以下のように予め設定してあります。~
(図のbc10 筐体は試作用筐体です)~
 1. Menu
 2. Back
 3. Home
 4. 上
 5. 左
 6. 右
 7. 下

#ref(keypad_android.jpg);
~
** boot.scr について [#j14f31cf]
u-boot-bc10 のアップデートにより、有機ELを表示デバイスの初期値とする設定は~
u-boot-bc10 内の include/configs/omap3_bc10.h に以下のように予め設定しています。~
そのため boot.scr の配置を行っていませんが、~
同じ内容の設定を boot.scr に記述して起動することも可能です。~
その際は、u-boot.bin の設定は boot.scr の設定で上書きされて起動します。~
有機ELを表示デバイスの初期値とする設定の boot.scr は以下のように作成します。~

 $ cd ~
 $ vi boot.script
 
 if fatload mmc 0 84000000 uImage
 then
   echo ***** Kernel: /dev/mmcblk0p1/uImage.bin *****
  fi
  echo ***** RootFS: /dev/mmcblk0p2 *****
  setenv bootargs 'mem=256M androidboot.console=ttyS2 console=tty0  
  console=ttyS2,115200n8 root=/dev/mmcblk0p2 init=/init rootwait omapdss.def_disp=lcd'
  bootm 84000000
 (注)setenv bootargs〜 disp=lcd' は改行していますが、使用される際は1行で記述してください。
 
 $ mkimage -A arm -O linux -T script -C none -a 0 -e 0 -n ./boot.script -d ./boot.script ./boot.scr &> /dev/null

またHDMI-DVIコネクタ経由で外部の液晶ディスプレイなどに出力して起動するの場合は~
上記 boot.scr の omapdss.def_disp=lcd を omapdss.def_disp=dvi に変更し、~
解像度を設定してください。~
現在 1024x768 の解像度まで動作を確認しています。~

 if fatload mmc 0 84000000 uImage
 then
   echo ***** Kernel: /dev/mmcblk0p1/uImage.bin *****
  fi
 setenv bootargs 'mem=256M androidboot.console=ttyS2 console=tty0  
 console=ttyS2,115200n8 root=/dev/mmcblk0p2 init=/init rootwait 
 omapfb.mode=dvi:1024x768MR-24@60 omapdss.def_disp=dvi'
  bootm 84000000
 (注)setenv bootargs〜 disp=lcd' は改行していますが、使用される際は1行で記述してください。

omapfb.mode や omapdss の詳細については、kernelソースファイル内 ~
kernel/Documentation/arm/OMAP/DSS をご覧ください~

** SDカードについて [#oaa7b071]
bc10でSDカード動作確認をとったSDカードは以下のものになります。~
- SanDisk Ultra CLASS4 15MB/s 2GB
-- 型番:SDSDH-002G-J95
-- http://www.sandisk.co.jp/products/sd-sdhc-sdxc-cards/sandisk-ultra-sdhc ~
同タイプのCLASS 2では起動、および動作が遅いという報告を受けています。~
~

記載されている全てのSDカードの動作確認は取っておりませんが、
TI-Android-FroYo-DevKit-V2.2 UserGuide(本バージョンはandroid-2.3.2_r1です)のページに推奨SDカードが記載されています。~
~
[[SD_Card_Recommendations>http://processors.wiki.ti.com/index.php/TI-Android-FroYo-DevKit-V2.2_UserGuide#SD_Card_Recommendations]]
~


* 参照URL [#e90654f8]
-SGX のインストールに関して
--[[rowboat ConfigureAndBuild>http://code.google.com/p/rowboat/wiki/ConfigureAndBuild#Install_the_drivers_in_Target_filesystem]]
-使用可能な USB Wifi に関して
--[[[Armadillo:06309] Re: Armadillo-440で使用可能な無線LAN アダプタについて>http://lists.atmark-techno.com/pipermail/armadillo/2010-December/006309.html]]


* 更新記録 [#qcd29268]
2011/02/09 初稿公開~
2011/02/10 kernelビルド、USB Wifi ドライバービルドを追加し全面改稿~
2011/04/21 SDカードについてを追記 ~
2011/04/22 イメージ作成に関してコピー先の抜けを修正~
2011/07/08 SDイメージについてを追記~
2011/07/21 alsa-utils取得のgitコマンドの間違いを訂正 ~

BC::labsへの質問は、bc9-dev @ googlegroups.com までお願い致します。
トップ   編集 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   最終更新のRSS