[bc10]

Outline

This article explains how to build “android-2.3.2_r1” for bc10. The directions of the building process are shown below.

  1. Building the development environment in which build is actually executed
  2. Obtaining the source code of the android open source project
  3. Building bc10-kernel and the kernel module for USB wifi
  4. Adding patches, and modifying android for bc10
  5. Building android
  6. Installing SGX SDK
  7. Writing into SD card

Creating build environment.

The requirements for the development environment are shown below.

  • OS: Ubuntu 10.04 (64bit version)
  • JAVA: java 1.6x
  • Android: android-2.3.2_r1

Android 2.3 (Gingerbread ) or newer versions needs a 64bit development environment

This section follows the instructions of “Setting up your machine" at “Getting the Source” page of Android Open Source Project.

java6

Applying the commands below, obtain the sun java package form the Ubuntu repository. Then, install the java package.

$ 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

Installing package

Using a command line below, pick up the required packages from the Ubuntu repository, then, install the packages. (Actually, the command line show below is one line, the breaks (\) are added intentionally.)

$ 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

Obtaining android source

Configuration of repository

To obtain the source code of Android, set up repo.

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

To take PATH to ~/bin, you just log-out Ubuntu once and log-in again. If you like to keep on log-in the Ubuntu environment, your need ~/bin to PATH of environment variable. To export PATH, apply the command below.

$ export PATH=~/bin:$PATH

Initializing repo

Create the working directory called bc10, execute repo init for obtaining android-2.3.2_r1 tag (The name of the working directory is arbitrary. You may call the directory in any name such as “android-2.3.2_r1.” If you name it your own rather than the example, please change the configuration of 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

After executing repo init, run repo sync. Then, download the source code of a android.

$ repo sync

The size of file is roughly 5GB. It takes time to download the file, and its duration highly depends on the speed of network.

Building kernel

To turn on/off Wifi from UI of android, the kernel module of USB wifi will be needed to placed in userland. Before building android, the kernel module of USB wifi should be built. As this USB wifi kernel built requires the kernel source tree of already built kernel, kernel for bc10 is built first.

Configuring environment variable

x-loader, u-boot, and kernel, which are necessary for booting, are built from cross toolchain, which is included in the source code of android. Specifically, arm cross toolchain is used here, and this toolchain is located inside of the directory of prebuilt/linux-x86/toolchain/arm-eabi-4.4.3/bin/.

To let arm cross toolchain do cross compile during the build process, the configuration of the environment variable is changed.

$ 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

$ cd ~/
$ git clone git://gitorious.org/~bc-dev/rowboat/bc10-rowboat-kernel.git bc10-rowboat-kernel
$ cd ~/bc10-rowboat-kernel/

Change to the release branch for bc10. If you need only wifi module, you can omit make module from the command lines below.

$ git checkout -t -b bc10-2.6.32 origin/bc10-2.6.32
$ make omap3_bc10_defconfig
$ make uImage
$ make modules

After the build process is completed, uImage is created at the directory shown bwlow.

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

Building USB Wifi (RT3070USB) driver

To use an USB Wifi device, install the drivers for RT3070USB.
The devices that have confirmed to work with bc10 are listed below.

MakerSerial NumberVendor IDDevice IDMemo
PLANEXGW-USMicroN-G2019ED14Discontinued
LogitecLAN-W150N/U2IPH07890164
LogitecLAN-W150N/U2BK07890168
BuffaloWLI-UC-GNM041101a2
BuffaloWLI-UC-G301N0411016fThis only works when it is connected to a powered hub.
BuffaloWLI-UC-GN0411015d

The driver used here is a Linux driver, which is listed at RALINK web site. The name of driver is 2011_0107_RT3070_RT3370_Linux_SAT_v2.5.0.1_DPO.tar.bz2. To download the driver, your name and mail address are required. The file downloaded from there can be placed at the directory of /home/beat/. (Hereafter, the working directory is assumed to be /home/beat/.)

To build the drover, employ the same cross toolchain,which has been used for building kernel. The toolchain is located at the dierctory of prebuilt/linux-x86/toolchain/arm-eabi-4.4.3/bin/.

To apply a patch, the toolchain can cross compile for bc10. The list of modifications, which are resulted from the the patch. The major changes are shown below.

  • Adding the specific compiler configuration for bc10 (platform, PATH of toochain, configuration of compile flag)
  • Modifying the firmware. The region is set for “Japan,” and the list of other entires are simplified.
  • Vender ID and product ID of USB Wifi are added.

To check the effect of the patch, you can see the difference as applying the command line.

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/

After applying the command line above, the modified source is renamed as 2011_0107_RT3070_RT3370_Linux_STA_v2.5.0.1_DPO-bc10 and compared to its original. The difference is shown below. (“---” or “-”indicates removed ones, and “+++” or “+”are added.)

  • Modifications for bc10 configuration
--- 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:
  • The changes for the regional setting and configurations
--- 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
  • Adding Vender_ID:Device_ID
--- 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)
  • Adding GPL flags (Without these flags, insmod cannot be applicable.)
--- 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);

The extension of the distributed source archive is denoted as bz2, but the files are compressed with gzip. After extracting the archives, apply patch and execute make. The instructions are shown below.

$ 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

After the make process is completed, rt3070sta.ko is created.

Obtaining the additional files for bc10

To building android-2.3.2_r1 for bc10, apply git clone and obtain the extra files from github repository.

alsa_sound

Use the commands below, also_sound is added to 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 and also-utils

To apply the commands, alsa-lib and alsa-utils are included in android-2.3.2_r1.

$ 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

bc10 device build files

To apply the commands show below, the build configuration files are added to android-2.3.2_r1. $ cd ~/bc10/device $ git clone git://github.com/bc-dev/2.3-device-beatcraft.git beatcraft

Application of patch and location of files

This patch is not for adding files to the source, but this modifies the source code of android-2.3.2_r1 for bc10.

Obtaining patch

To employ the commands shown below, obtain patch files.

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

wpa_supplicant_6

Apply a patch to wpa_supplicant_6. This patch makes USB wifi manageable from the UI of Android.

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

ti omap3

As bc10 is equipped with OMP3530, it is recognized as TARGET_BOARD=omap3 in the building configuration file. As this setting is effective, code are built under the directory of android-2.3.2_r1/hardware/ti/omap3/'''. The code are not fixed for Gingerbread, and it is not applicable to OMAP3530. This patch prevents building the code.

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

Placing USB Wifi driver

Copy the patched firmwares and the drier of RT3070USB, which, is discussed and built in the previous section, to 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/

Each file placed in this directory is copied to its appropriate directory. Please look at the variables on PRODUCT_COPY_FILE, which are listed on ~/bc10/device/beatcraft/bc10/device.mk.

The prebuilt images of uImage, RT3070sta.ko, and RT2870STA.dat are registered at git repository of device/beatcraft/bc10/. You may create a boot image of android with these prebuilt images. If you would like to use the prebuilt images, we recommend that the kernel and drivers, which are compatible the kernel, should be built at your own development environment.
Now, the preparation for the build process is completed.

Building Android

Setting up the environment variables of bc10 for building android.

$ 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] &#8592; input 3  and press 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
============================================

After checking the configuration, execute make.

$ make

As make is executed, the number of CPU's cores can change depending on your development environment. As applying to -j2, it is executed as parallel computing, and it will significantly reduces the duration of the building process. As adding showcommands to make, the logs of the commands will be output. You may receive the detail information of building process.

  • Example:
$ time make showcommands -j2 2>&1 | tee make.log-20110201-01

Additional build

The building process described above is completed, execute commands below under the same environment variables are applied. The commands will additionally build the HAL modules for GPS and other sensors.

$ cd ~/bc10/device/beatcraft/bc10/libgps
$ mm
$ cd ~/bc10/device/beatcraft/bc10/libsensors
$ mm

Creating image

The built file is housed at the directory of out/target/product/bc10/. The contents of the files are shown below.

$ 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

Applying the commands below, move userland to the bootable place.

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

After userland is relocated, its contents are shown below.

$ 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

Installing SGX SDK

To apply the same method as bc10/froyo, obtain TI Android SDK.
(Caution):

  • Whole process takes quite long time.
  • If you have already downloaded and installed OMAP35x_ Android_Graphics_SDJ_3_01_00_03 for bc10/froyo. Basically, the file is the same, and you may use it for this section. There are no issues on reusing the same file. Please be careful with the location of Rule.make''' directory. If download the same file again, please treat the old one as a backup or delate it.
  • As changing a part of kernel and/or Android userland, whole of kernel and Android is needed to be rebuilt.
$ 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  

The location of install directory is asked. In this example, select the default directory, ${HOME}/OMAP35x_Android_Graphics_SDK_3_01_00_03. ${HOME} means the home directory, it indicates the directory of /home/beat/.

To download TI's Android SGX SDK

Modifying Rules.make

In the file of Rules.make, “Home”, “GRAPHICS_INSTALL_DIR”, “ANDRID_RooT”, “CSTOOL_DIR”, and “KERNEL_INSTALL_DIR” are needed to change their original file PATHs. The file PATH have to be the present locations of these files. The example is shown below. Please use it as a reference.

 $ 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

In this example, the setting of directories are determined at the build configuration. “ANDROID_ROOT” is relevant to the location of bc10-image directory.
After Rules.make are modified, execute make and make install.

$ make
$ make OMAPES=3.x install

Building other files

u-boot

Because of updating, u-boot-bc10 is modified for including the configuration of boot.scr whose default value of display device is AMOLED. At booting period, the waiting time of u-boot shell is changed form 10 seconds to 2 seconds. To apply commands below, obtain the source code and built it.

$ 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

The configuration, which treats AMOLED as the default value of display device, is placed under the directory of 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" \ 

This resembles the configuration of 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

(Caution)From setenv bootargs to disp=lcd, this is one line of command.

After the build process is finished, u-boot.bin is copied at the FAT partition of the targeted SD card. The copy must have done after MOL file is copied. (MLO must be copied to FAT partition first.) For the details of creation of SD card, please look at the section of “Creating a bootable SD card”, which is listed below.

x-loader

To apply the commands shown below, obtain and build the source code.

$ 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

Since the specifications and format of x-load.bin do not match with OMAP BootROM's ones, x-load.bin does not work as boot loader in the NAND Flash or a SD card. To solve this issue, apply signGP, and modify x-load.bin. signGP can be downloaded from http://beagleboard.googlecode.com/files/signGP. signGP can be used as it is shown below.

$ signGP x-load.bin

x-load.bin.ift, which is produced in the build process, is renamed as MLO. MLO is a file, which is installed in the top of FAT partition. The details of creating SD card image is shown below. Please look at the section of “Creating a bootable SD card.”

$ mv x-load.bin.ift MLO

Creating bootable SD card

This article is originally published at the Create bootable SD card of bc10/booting. The instructions apply to only SD card. (bc10 cannot boot from microSD by design.)
The partitions of SD card and the files contained in these partitions are shown below.

  • FAT32 Partition
    • X-Loader
    • U-Boot
    • Linux kernel (Android Version)
  • Linux Partition
    • Android root file system

The working environment is assumed to be Linux.
The directions of process is shown below.

  1. Initializing and configuring the partitions
  2. Formatting file system
  3. Placing files

These instructions are based upon LinuxBootDiskFormat (code.google.com), and its details are arranged for bc10.

Unmounting SD card

To start working on a SD card, please unmount the SD card. As partitioning and formatting the SD card, it is needed to be unmounted.

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

Then, unmount the SD card.

$ umount /media/disk

Initializing and configuring partition

To use fdisk command, obtain the basic information of the SD card. To initialize and configure the SD card, the parameter is the device file of the SD card. The location of the file may change, depending on your working environment. This is an example. The location of files may vary Please check your working environment before start working on the SD card.

 $ sudo fdisk /dev/sdc
Command (m for help): [p]
&#12288;
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) 
Write dow the number of bytes on the SD card. This number will be used later. 
(In this example, it is 2021654528.)

Erase all partitions

Command (m for help): [d]
Selected partition 1

Turn to expert mode.

Command (m for help): [x]

According to the results of fdisk, the number of heads is 255.

Expert Command (m for help): [h]
Number of heads (1-256, default xxx): [255]

Also, from the outputs of fdisk, the number of sectors is 63.

Expert Command (m for help): [s]
Number of sectors (1-63, default xxx): [63]

The number of cylinders highly depends on a SD card. The figure that is used for calculating the number of cylinders. The outcome is truncated below decimal point, do not be rounded.

#cylinders = FLOOR(the number of Bytes on the SD Card/#heads/#sectors/#some )
#some is used for calculating units in the results of “fdisk” (Not #cylinders, the other number). 
In this example it will be “512”.

The application of this figure is shown below.

2021654528 / 255 / 63 / 512 = 245.79
-> 245

The number of cylinders for this example is 245

Expert Command (m for help): [c]
Number of cylinders (1-256, default xxx): [245]

Go back to the normal mode

Expert Command (m for help): [r]

Create FAT32 partition

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))

Configure the boot flags

Command (m for help): [a]
Partition number (1-4): [1]

Create Linux file system system partition

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

Check up the configurations of the partitions.

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

Save the change in the partition table.

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.

Formatting file system

FAT32 partition and Linux partition are formatted separately.
In the commands shown below, “FAT32” and “EXT3” define the names of partitions. These names are just examples, and you may choose any names you prefer.

$ [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)
1 95072 inodes, 389576 blocks
19 478 blocks (5.00%) reserved for the super user
Fir st data block=0
Ma ximum 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:  

Writing files into SD card

Placing files on FAT32 partition

There are several restrictions on the instillation of X-Loader (MLO) on the SD card. The restrictions are shown below.

  • After formatting FAT32 partition, MLO is placed first.
  • Put it at the top directory inside the partition.
$ cd ~/bc10/x-load-bc10/
$ sudo cp MLO /media/FAT32/ 

Other files do not have any restrictions. Just copy the files to the SD card.

$ 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/

If you have made mistakes on this process, or any process are not succeeded, please redo from the section of creating F32 partition.

Put files on EXT3 partition

There are no specific regulations on how to place the files. bc10-image/ can copied to EXT3 partition of the SD card.

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

This is the end of copying the bootable image to a SD card.
Please do sync first, then, unmount the SD card.

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

Booting from SD card

Insert the prepared SD card into the SD card slot of bc10. Then, turn on the power supply. At the first time, Android takes long time for booting since it createsSQLite configuration DB and Dalvik Executable (.dex) file and writes on the hard drive.

This is the end of the creating the bootable image of Android 2.3.2_r1 for bc10.

Remarks

Allocation of buttons

bc10 does have 7 buttons at both sides. Please In Figure A, the configuration of buttons is identified. (In the picture, the enclosure of bc10 is a prototype.)

1. Menu
2. Back
3. Home
4. Up
5. Left
6. Right
7. Down
keypad_android.jpg

boot.scr

As updating u-boot-bc10, the configuration, which AMOLED is treated as the initial value of display device, has been located at the directory under u-boot-bc10/include/configs/omap3_bc10.h. Because of this configuration, the location of boot.scr has not been predetermined, yet the same content of the configuration is coped to boot.scr, and used for booting bc10. As copying the content, the configuration of u-boot.bin replaces the content of boot.scr. The content of configuration of boot.scr, which AMOLED is considered as the initial value of display device, is shown below.

$ 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
(Caution) From '''setenv bootargs''' to '''disp=lcd'  ''' is originally written as a single sentence. To type in the
 command, please type as a single line command.

$ mkimage -A arm -O linux -T script -C none -a 0 -e 0 -n ./boot.script -d ./boot.script ./boot.scr &> /dev/null

To connect to an external LDE display via MDMI-DVI connector, please change the section of omapdss.def_disp=lcd to omapdss_disp=dvi. Then, set up the resolution. The highest resolution we have confirmed here is 1024 x 768.

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
 (Caution) From '''setenv bootargs''' to '''disp=lcd'  ''' is originally written as a single sentence. To type in the
 command, please type as a single line command.

To fond the detail information of omapfb.mode and omapdss, please look at the file, which is located under kernel source file, kernel/Documentation/arm/OMAP/DSS.

Reference

Revision History

2011/04/01 This article is initially published


Attach file: fileRT3070-2.5.0.1.diff 1045 download [Information] file2011_0107_RT3070_RT3370_Linux_STA_v2.5.0.1_DPO.tar.bz2 1042 download [Information] filekeypad_android.jpg 952 download [Information]

Front page   Edit Freeze Diff Backup Upload Copy Rename Reload   New List of pages Search Recent changes   RSS of recent changes
Last-modified: 2011-04-04 (Mon) 13:42:53 (2484d)