bc10

bc10/prebuilt-20101227 概要

2010年12月27日:bc10/froyoに追加修正を加えた android-2.2_r1.1 prebuilt イメージ作成について記載します。
追加項目として RT3070USB のドライバーを含めています、動作確認デバイスは以下のとおりです。

メーカー   型番              対応 Device ID
PLANEX     GW-USMicroN-G     2019:ED14
Logitec    LAN-W150N/U2IPH    0789:0164
Buffalo    WLI-UC-G301N      0411:016f
Buffalo    WLI-UC-GN         0411:015d


以下のホームディレクトリは /home/beat というディレクトリで記載しています。
一部デバイスに対応中の箇所があります。予告無く更新することがありますのでご了承ください。

開発環境

今回の開発環境の概略は以下のとおりです。

パッケージインストール

ubuntu のリポジトリから必要なパッケージを取得してインストールします。

$ sudo apt-get install git-core gnupg flex bison gperf libsdl-dev libesd0-dev \
  libwxgtk2.6-dev build-essential zip curl libncurses5-dev zlib1g-dev uboot-mkimage

java5

android-2.2_r1.1 のビルドに必要な sun-java5-jdk は Ubuntu 9.10 以降リポジトリから外されていますので、
/etc/apt/sources.list に一時的に古いリポジトリを追加します。

$ sudo vi /etc/apt/sources.list
  ## respective vendors as a service to Ubuntu users.
  deb http://archive.canonical.com/ubuntu lucid partner
  deb-src http://archive.canonical.com/ubuntu lucid partner
 
  deb http://archive.ubuntu.com/ubuntu lucid-security main restricted
  deb-src http://archive.ubuntu.com/ubuntu lucid-security restricted main multiverse universe #Added by software-properties
  deb http://archive.ubuntu.com/ubuntu lucid-security universe
  deb http://archive.ubuntu.com/ubuntu lucid-security multiverse
+ deb http://us.archive.ubuntu.com/ubuntu/ jaunty multiverse
+ deb http://us.archive.ubuntu.com/ubuntu/ jaunty-updates multiverse

追加完了後、 apt-get update コマンドでリポジトリ情報の取得をし sun-java5-jdk をインストールします。

$ sudo apt-get update
$ sudo apt-get install sun-java5-jdk

インストール完了後、誤って他の古いパッケージをインストールしないよう上記で追加したリポジトリを削除しておきます。

$ sudo vi /etc/apt/sources.list
  ## respective vendors as a service to Ubuntu users.
  deb http://archive.canonical.com/ubuntu lucid partner
  deb-src http://archive.canonical.com/ubuntu lucid partner
 
  deb http://archive.ubuntu.com/ubuntu lucid-security main restricted
  deb-src http://archive.ubuntu.com/ubuntu lucid-security restricted main multiverse universe #Added by software-properties
  deb http://archive.ubuntu.com/ubuntu lucid-security universe
  deb http://archive.ubuntu.com/ubuntu lucid-security multiverse
- deb http://us.archive.ubuntu.com/ubuntu/ jaunty multiverse
- deb http://us.archive.ubuntu.com/ubuntu/ jaunty-updates multiverse

もう一度 apt-get update で現状のリポジトリ情報の取得をして元の状態に戻します。

$ sudo apt-get update

Android ソースファイル取得

repo 設定

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 初期化

bc10 というandroid ソースファイル用ディレクトリを作成し、android-2.2_r1.1 branch
を取得するために repo init を実行します。

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

local_manifest.xml の追加

android-2.2_r1.1 tag で取得できるソースコード内には ALSA が含まれていません。
音声ライブラリに ALSA を使用するため bc10/.repo/ 以下に local_manifest.xml を作成します。
local_manifest.xmlに ALSA 関連ファイルを追加しソースコードを取得できるようにします。

また ALSA 関連ファイルには android-2.2_r1.1 tag が切られていないため、Froyo branch を使用します。

$ vi .repo/local_manifest.xml
<?xml version="1.0" encoding="UTF-8"?>
<manifest>
  <project path="external/alsa-lib" name="platform/external/alsa-lib" revision="froyo"/>
  <project path="external/alsa-utils" name="platform/external/alsa-utils" revision="froyo"/>
  <project path="hardware/alsa_sound" name="platform/hardware/alsa_sound" revision="froyo"/>
</manifest>

repo sync

local_manifest.xml の追加後 repo sync を実行し、android のソースコードを取得します。

$ repo sync

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

bc10 用ビルド設定ファイルの適用

android-2.2_r1.1 を bc10 向けに最適化してビルドするための patch および設定ファイルを
github のリポジトリから git clone で取得し、patch_to_android-2.2_r1.1_for_b10/bc10-patch.sh を 実行します。

$ cd ~
$ git clone git://github.com/bc-dev/patch_to_android-2.2_r1.1_for_b10.git
$ cd patch_to_android-2.2_r1.1_for_b10

git clone で取得する場所はどこでも構いませんが、bc10-patch.sh を実行する前に
bc10-patch.sh の中の以下の環境変数をファイルの PATH に合うよう修正してください。

$ vi bc10-patch.sh
### Settings 
ANDROID_DIR=${HOME}/bc10
SETUP_DIR=${HOME}/patch_to_android-2.2_r1.1_for_b10
PATCH_DIR=${SETUP_DIR}/patches-for-bc10

ファイルの PATH 指定を確認後 bc10-patch.sh を実行します。

$ ./bc10-patch.sh

Android ビルド

bc10用の環境設定をします。

$ cd ~/bc10
$ source build/envsetup.sh
$ lunch bc10-eng
============================================
PLATFORM_VERSION_CODENAME=REL
PLATFORM_VERSION=2.2
TARGET_PRODUCT=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=FRF91
============================================

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

$ make

イメージ作成

ビルドが終了したらビルドされた userland のバイナリを起動可能な配置に整えます。
userland を整えるスクリプト mkbc10-image.sh を使用します。

$ cd ~/patch_to_android-2.2_r1.1_for_b10
$ ./mkbc10-image.sh

実行すると以下のように out/target/product/bc10/ に bc10-image/ というディレクトリが作成され、
このディレクトリ内に android userland が配置されます。

/home/beat/bc10/out/target/product/bc10
mkdir android for android-rfs
/home/beat/bc10/out/target/product/bc10
copy android-root
copy android-system
change permission and owner
[sudo] password for beat:
$ cd ~/bc10/out/target/product/bc10
$ ls -l
-rw-r--r--  1 beat beat        7 2010-08-27 23:37 android-info.txt
drwxrwxrwx  8 root root     4096 2010-08-30 11:34 bc10-image
-rw-r--r--  1 beat beat     8866 2010-08-27 21:16 clean_steps.mk
drwxr-xr-x  3 beat beat     4096 2010-08-27 21:54 data
-rw-r--r--  1 beat beat    22869 2010-08-27 23:37 installed-files.txt
drwxr-xr-x 13 beat beat     4096 2010-08-27 23:28 obj
-rw-r--r--  1 beat beat      189 2010-08-27 21:16 previous_build_config.mk
-rw-r--r--  1 beat beat   163811 2010-08-27 23:37 ramdisk.img
drwxr-xr-x  8 beat beat     4096 2010-08-27 21:54 root
drwxr-xr-x  4 beat beat     4096 2010-08-27 21:54 symbols
drwxr-xr-x 11 beat beat     4096 2010-08-27 23:17 system
-rw-------  1 beat beat 78486144 2010-08-27 23:37 system.img
-rw-------  1 beat beat  1522752 2010-08-27 23:37 userdata.img
$ cd bc10-image
$ ls -l
drwxrwxrwx  2 root root   4096 2010-08-27 21:26 data
-rwxrwxrwx  1 root root    118 2010-08-27 21:54 default.prop
drwxrwxrwx  2 root root   4096 2010-08-27 21:26 dev
-rwxrwxrwx  1 root root 107440 2010-08-27 21:54 init
-rwxrwxrwx  1 root root   1677 2010-08-27 20:53 init.goldfish.rc
-rwxrwxrwx  1 root root    197 2010-08-24 20:58 init.omap3.rc
-rwxrwxrwx  1 root root  13605 2010-08-24 20:58 init.rc
drwxrwxrwx  2 root root   4096 2010-08-27 21:26 proc
drwxrwxrwx  2 root root   4096 2010-08-27 21:54 sbin
drwxrwxrwx  2 root root   4096 2010-08-27 21:26 sys
drwxrwxrwx 11 root root   4096 2010-08-30 11:34 system

kernel ビルド

環境変数設定

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

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

kernel

$ 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 が作成されます。

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

USB Wifi (RT3070USB) ドライバー ビルド

ここでは、RT3070USBを使用している無線LAN USBデバイスここでは Baffalo WLI-UG-G301N と
WLI-UC-GN 、Logitec LAN-W150N/U2IPH について記載します。

ドライバーはRALINK Web にある Linux ドライバー
2010_0831_RT3070_Linux_STA_v2.4.0.1_DPO.bz2 を使用します。
あわせて ファームウェア RT28XX/RT30XX USB series (RT2870/RT2770/RT3572/RT3070) も使用します。
ソースコード及びファームウェアの入手はメールアドレスと氏名の入力を必要とします。
ダウンロードしてきたファイルは /home/beat/に置くものとして記載します。
また toolchain は上記 kernel ビルド時に設定した Android ソースファイル内の
prebuilt/linux-x86/toolchain/arm-eabi-4.4.0/bin を使用します。

$ cd ~
$ tar xvfj 2010_0831_RT3070_Linux_STA_v2.4.0.1_DPO.bz2
$ cd 2010_0831_RT3070_Linux_STA_v2.4.0.1_DPO/

bc10用に以下のように修正します。

diff -urpN 2010_0831_RT3070_Linux_STA_v2.4.0.1_DPO/Makefile 2010_0831_RT3070_Linux_STA_v2.4.0.1_DPO-orig/Makefile
--- 2010_0831_RT3070_Linux_STA_v2.4.0.1_DPO/Makefile    2011-01-05 12:18:51.443788447 +0900
+++ 2010_0831_RT3070_Linux_STA_v2.4.0.1_DPO-orig/Makefile    2010-08-31 18:12:20.000000000 +0900
@@ -15,8 +15,7 @@ endif
 RTMP_SRC_DIR = $(RT28xx_DIR)/RT$(CHIPSET)

 #PLATFORM: Target platform
-#PLATFORM = PC
-PLATFORM = BC10
+PLATFORM = PC
 #PLATFORM = 5VT
 #PLATFORM = IKANOS_V160
 #PLATFORM = IKANOS_V180
@@ -148,11 +147,6 @@ LINUX_SRC_MODULE = /lib/modules/$(shell

 CROSS_COMPILE =
 endif

-ifeq ($(PLATFORM),BC10)
-LINUX_SRC = /home/beat/prebuilt-20101227/bc10-rowboat-kernel
-CROSS_COMPILE = /home/beat/prebuilt-20101227/bc10/prebuilt/
linux-x86/toolchain/arm-eabi-4.4.0/bin/arm-eabi-
-endif
-
 ifeq ($(PLATFORM),IXP)
 LINUX_SRC = /project/stable/Gmtek/snapgear-uclibc/linux-2.6.x
 CROSS_COMPILE = arm-linux-
@@ -353,9 +347,6 @@ ifeq ($(OSABL),YES)
        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
@@ -364,7 +355,7 @@ endif
 endif
 endif
 endif
-endif
+

 release:
 ifeq ($(TARGET), LINUX)
@@ -397,9 +388,6 @@ endif
        $(MAKE) -C os/linux clean
        rm -rf os/linux/Makefile
 endif
-ifneq ($(TARGET),THREADX)
-       $(MAKE) -C tools clean
-endif
 ifeq ($(TARGET), UCOS)
        $(MAKE) -C os/ucos clean MODE=$(RT28xx_MODE)
 endif
diff -urpN 2010_0831_RT3070_Linux_STA_v2.4.0.1_DPO/RT2870STA.dat 2010_0831_RT3070_Linux_STA_v2.4.0.1_DPO-orig/RT2870STA.dat
--- 2010_0831_RT3070_Linux_STA_v2.4.0.1_DPO/RT2870STA.dat    2011-01-05 12:01:54.891970197 +0900
+++ 2010_0831_RT3070_Linux_STA_v2.4.0.1_DPO-orig/RT2870STA.dat  2010-08-31 18:12:20.000000000 +0900
 @@ -1,10 +1,8 @@
 #The word of "Default" must not be removed
 Default
 CountryRegion=5
-#CountryRegionABand=7
-#CountryCode=
-CountryRegionABand=1
-CountryCode=JP
+CountryRegionABand=7
+CountryCode=
 ChannelGeography=1
 SSID=11n-AP
 NetworkType=Infra
diff -urpN 2010_0831_RT3070_Linux_STA_v2.4.0.1_DPO/common/rtusb_dev_id.c 2010_0831_RT3070_Linux_STA_v2.4.0.1_DPO-orig/common/rtusb_dev_id.c
--- 2010_0831_RT3070_Linux_STA_v2.4.0.1_DPO/common/rtusb_dev_id.c       2011-01-05 12:07:21.693788923 +0900
+++ 2010_0831_RT3070_Linux_STA_v2.4.0.1_DPO-orig/common/rtusb_dev_id.c  2010-09-01 10:47:30.000000000 +0900
@@ -107,14 +107,8 @@ USB_DEVICE_ID rtusb_dev_id[] = { 
        {USB_DEVICE(0x13D3,0x3321)}, /* Azurewave */
        {USB_DEVICE(0x07FA,0x7712)}, /* Edimax */
        {USB_DEVICE(0x0789,0x0166)}, /* Edimax */
-       {USB_DEVICE(0x0DB0,0x822B)}, /* MSI 3070*/
-       {USB_DEVICE(0x2019,0xED14)}, /* PLANEX*/
-       {USB_DEVICE(0x2019,0xAB29)}, /* PLANEX*/
-       {USB_DEVICE(0x0789,0x0164)}, /* Logitec*/
-       {USB_DEVICE(0x0789,0x0168)}, /* Logitec*/
-       {USB_DEVICE(0x0411,0x01a2)}, /* Buffalo*/
-       {USB_DEVICE(0x0411,0x016f)}, /* Buffalo*/
-       {USB_DEVICE(0x0411,0x015d)}, /* Buffalo*/
+       {USB_DEVICE(0x0DB0,0x822B)}, /* MSI 3070*/^M
+       {USB_DEVICE(0x0DB0,0x871B)}, /* MSI 3070*/
 #endif // RT3070 //
 #ifdef RT3370
        {USB_DEVICE(0x148F,0x3370)}, /* Ralink 3370 */
diff -urpN 2010_0831_RT3070_Linux_STA_v2.4.0.1_DPO/os/linux/config.mk 2010_0831_RT3070_Linux_STA_v2.4.0.1_DPO-orig/os/linux/config.mk
--- 2010_0831_RT3070_Linux_STA_v2.4.0.1_DPO/os/linux/config.mk  2011-01-05 17:34:44.254470861 +0900
+++ 2010_0831_RT3070_Linux_STA_v2.4.0.1_DPO-orig/os/linux/config.mk     2010-08-31 18:12:20.000000000 +0900
@@ -26,7 +26,7 @@ HAS_WDS=n
  HAS_APCLI=n 

 # Support Wpa_Supplicant
-HAS_WPA_SUPPLICANT=y
+HAS_WPA_SUPPLICANT=n

 # Support Native WpaSupplicant for Network Maganger
 HAS_NATIVE_WPA_SUPPLICANT_SUPPORT=n
@@ -546,10 +545,6 @@ ifeq ($(PLATFORM),PC)
     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)

以下のようにmakeを実行します。make 完了後 os/linux 以下に rt3370sta.ko が作成されています。

$ make
$ ls -l os/linux/rt3370sta.ko
-rw-r--r-- 1 beat beat 10746686 2011-01-05 12:42 os/linux/rt3370sta.ko

USB Wifi (RT3070USB) ドライバー 配置について

ファイルのオーナーと権限は mkbc10-image.sh にあわせて root と 777 にします。

$ sudo mkdir ~/bc10/out/target/product/bc10/bc10-image/system/lib/modules
$ sudo mkdir -p ~/bc10/out/target/product/bc10/bc10-image/system/etc/Wireless/RT2870STA
$ sudo cp -afr os/linux/rt3370sta.ko ~/bc10/out/target/product/bc10/bc10-image/system/lib/modules/
$ sudo cp -afr RT2870STA.dat ~/bc10/out/target/product/bc10/bc10-image/system/etc/Wireless/RT2870STA/
$ cd ~
$ unzip RT2870_Firmware_V22.zip
$ cd RT2870_Firmware_V22/
$ sudo mkdir ~/bc10/out/target/product/bc10/bc10-image/system/etc/firmware
$ sudo cp -afr * ~/bc10/out/target/product/bc10/bc10-image/system/etc/firmware/
$ sudo chown -R root.root ~/bc10/out/target/product/bc10/bc10-image/system
$ sudo chmod -R 777 ~/bc10/out/target/product/bc10/bc10-image/system

SGX SDK のビルド

bc10/froyo と同じ手順で TI Android SGX SDK を取得します。

(注):

$ 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 を指定します。

To download TI's Android SGX SDK

Rules.make の変更

Rules.make のHOME、GRAPHICS_INSTALL_DIR、ANDROID_ROOT、CSTOOL_DIR、
KERNEL_INSTALL_DIRをそれぞれのファイルPATHに合うよう修正してください。
以下の Rules.make は上記ビルド時の設定にあわせています。
ANDROID_ROOTは mkbc10-image.sh で作成した 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.0
+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

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

$ make 
$ make OMAPES=3.x install

u-boot

$ 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

ビルド後出来た u-boot.bin は SDカードFATパーティションに MLO ファイルコピー後コピーします。
SDカードイメージ作成についてはページ下部にありますSDカードイメージ作成をご覧ください。

x-loader

$ 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 という名前で SDカードFATパーティションの先頭に書き込む
ためのファイルです。SDカードイメージ作成についてはページ下部にありますSDカードイメージ作成
をご覧ください。

以上の作成ファイルを圧縮したものが prebuilt イメージになります。

prebuilt-image

上記手順にて作成しましたイメージを sourceforge.jp からダウンロードできます。
ダウンロードしてきたファイルは HOMEディレクトリの/home/beat/に置くものとして記載します。
以下のURLからダウンロードしてください。
http://sourceforge.jp/projects/bc10-dev/downloads/50494/bc10-boot-sd-image--release20110107.tar.gz/
bc10-boot-sd-image--release20101013.tar.gz を展開すると

FAT.tar.gz
EXT3.tar.gz

上記の二つのアーカイブが入っています。
それぞれをSDカードのFAT32パーティションとEXT3パーティションに書き込んで下さい。
書き込みの手順は以下のようになります。

SD カードイメージ作成

bc10/booting 起動用SDカード作成 の手順に従って作成していきます。
なお、この作成手順は、SDカード用です。bc10は、設計上マイクロSDからのブートは出来ません。
SDカードの概略は以下のようになります。

作業環境はLinuxを想定しています。
作業手順は以下のようになります。

  1. パーティションの初期化・設定
  2. ファイルシステムのフォーマット
  3. ファイルの配置

以下の説明は主にLinuxBootDiskFormat(code.google.com)から引用してアレンジしたものです。

SDカードのアンマウント

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

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

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

$ umount /media/disk

パーティションの初期化・設定

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.

ファイルシステムのフォーマット

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: 

prebuilt-image のファイルの配置

FAT32パーティションの配置

FAT32パーティションのファイルには配置方法に制限がありますので、作業環境でアーカイブを一旦展開します。

$ [tar xvfz FAT.tar.gz]

展開すると以下のファイルが含まれています。

$ ls FAT.tar.gz
MLO  boot.scr  u-boot.bin  uImage

1段目のブートローダであるX-Loader(MLO)は、SDカード上の配置方法に制限があります。必ず以下のように配置してください。

$ [cp MLO /media/FAT32/]

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

$ [cp u-boot.bin boot.scr uImage /media/FAT32/]

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

EXT3パーティションの配置

ext3パーティションの配置には特に制限はありませんので、アーカイブを直接SDカード上に展開します。

$ [sudo tar xvfz EXT3.tar.gz -C /media/EXT3]


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

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

SDカードからの起動

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

補足

Android SGX について

init.rc の最終行に記載のとおりSGX 機能が有効の設定になっています。
不要の場合はコメントアウトで無効にしてください。
また、kernel 、userland 更新時は更新された kernel 、userlandを含む SGX のリビルド
が必要になります。

$ vi init.rc
# Start PowerVR SGX DDK
service pvr /system/bin/sgx/rc.pvr start

bc10 Wifi 設定手順

Android GUI上からの Wifi ON/OFF機能を実装していないので、起動の際にシリアルで insmod 、
netcfg コマンドで動作確認をしています。
対象となる USB-Wifi 機器はRT3070 搭載の以下の機器になります。

メーカー   型番              対応 Device ID
PLANEX     GW-USMicroN-G     2019:ED14
Logitec    LAN-W150N/U2IPH    0789:0164
Buffalo    WLI-UC-G301N      0411:016f
Buffalo    WLI-UC-GN         0411:015d

上記の RT3070USB デバイスをbc10 に接続し起動、デバイスの認識を確認後
netcfg ra0 up にてデバイスを起動、netcfg ra0 dhcp などのコマンドを実行し
RT2870STA.dat で指定したSSID との接続、IP 取得を行います。
prebuilt イメージのRT2870STA.dat は以下のように設定しています。
お使いの環境に合わせて設定してください。
詳細については 2010_0831_RT3070_Linux_STA_v2.4.0.1_DPO/README_STA_usb 
をご覧ください。

(略)
SSID=ssidname
NetworkType=Infra
WirelessMode=5
Channel=0
BeaconPeriod=100
TxPower=100
BGProtection=0
TxPreamble=0
RTSThreshold=2347
FragThreshold=2346
TxBurst=1
PktAggregate=0
WmmCapable=1
AckPolicy=0;0;0;0
AuthMode=authmodetype
EncrypType=encyptype
WPAPSK=
DefaultKeyID=1
Key1Type=0
Key1Str=
(略)

USB Wifi (RT3070USB) ドライバーについて

prebuilt イメージでは ' WFLAGS += -DCONFIG_STA_SUPPORT -DDBG 'としていますので
デバックログが出力されます。操作し辛い場合は ' -WFLAGS += -DCONFIG_STA_SUPPORT '
としてソースファイルをビルド、ファイルの再配置を行ってください。
ただし、デバックログが出力されないため必要なエラーログが表示されないことがありますのでご注意ください。

diff -urpN 2010_0831_RT3070_Linux_STA_v2.4.0.1_DPO/os/linux/config.mk 2010_0831_RT3070_Linux_STA_v2.4.0.1_DPO-orig/os/linux/config.mk
--- 2010_0831_RT3070_Linux_STA_v2.4.0.1_DPO/os/linux/config.mk  2011-01-05 17:34:44.254470861 +0900
+++ 2010_0831_RT3070_Linux_STA_v2.4.0.1_DPO-orig/os/linux/config.mk     2010-08-31 18:12:20.000000000 +0900
@@ -26,7 +26,7 @@ HAS_WDS=n
  HAS_APCLI=n 

 # Support Wpa_Supplicant
-HAS_WPA_SUPPLICANT=y
+HAS_WPA_SUPPLICANT=n

 # Support Native WpaSupplicant for Network Maganger
 HAS_NATIVE_WPA_SUPPLICANT_SUPPORT=n
@@ -148,8 +148,7 @@ endif
 # config for STA mode 

 ifeq ($(RT28xx_MODE),STA)
-#WFLAGS += -DCONFIG_STA_SUPPORT -DDBG
-WFLAGS += -DCONFIG_STA_SUPPORT
+WFLAGS += -DCONFIG_STA_SUPPORT -DDBG 

 ifeq ($(HAS_XLINK),y)
 WFLAGS += -DXLINK_SUPPORT
@@ -546,10 +545,6 @@ ifeq ($(PLATFORM),PC)
     endif
 endif

以下は、RT3070USB を bc10 に挿し insmod rt3370sta.ko まで実行した際の
シリアルに表示されたログです。

参照URL


BC::labsへの質問は、bc9-dev @ googlegroups.com までお願い致します。
トップ   新規 一覧 単語検索 最終更新   最終更新のRSS