現在調整中
bc10用 android-2.2_r1.1 概要 †bc10 向けに修正を加えた android-2.2_r1.1 userland の作成について記載します。 作業の流れは以下のとおりです。 android-2.2_r1.1 の開発環境作成 ->ソースコード取得 -> bc10用変更スクリプト実行 -> SGX SDK のインストール 現在調整中: 現在一部デバイスに対応中の箇所があります。予告無く更新することがありますのでご了承ください。 開発環境 †今回の開発環境の概略は以下のとおりです。
パッケージインストール †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 †tag android-2.2_r1.1 のビルドに必要な sun-java5-jdk は Ubuntu 9.10 以降リポジトリから外されていますので、 $ 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 ソース取得 †repo 設定 †android のソースコードを取得するために repo の設定を行います。 $ cd ~ $ mkdir bin $ curl http://android.git.kernel.org/repo >~/bin/repo $ chmod a+x ~/bin/repo ubuntu を使っていれば、一度ログアウトしてログインし直すと ~/bin への PATH は通っています。 $ export PATH=~/bin:$PATH repo 初期化 †bc10 という作業用ディレクトリを作成し、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 が含まれていません。 $ 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〜3GB のファイルをダウンロードしますので回線速度に応じてそれなりに時間がかかります。 bc10 用ビルド設定ファイルの適用 †android-2.2_r1.1 を bc10 向けに最適化してビルドするための patch および設定ファイルを $ 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 で取得する場所はどこでも構いませんが、 ### 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 この patch で以下の機能を追加しています。
Android ビルド †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 make を実行する際はビルドの環境(CPU のコア数)に応じて -j2 など並列実行を指定すると $ time make showcommands -j2 2>&1 | tee make.log-20101115-01 イメージ作成 †ビルドが終了したらビルドされた userland のバイナリを起動可能な配置に整えます。
$ cd patch_to_android-2.2_r1.1_for_b10 $ ./mkbc10-image.sh 実行すると以下のように ~/bc10/out/target/product/bc10/ に bc10-image/ というディレクトリが作成され、 /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 ビルド †x-loader、u-boot、kernel 部分の主な変更点は本ページ下部にあります 環境変数設定 †boot に必要な x-loader、u-boot、kernel は全て android のソースコードと ビルド時にこの 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- x-loader †$ cd ~/bc10 $ 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や $ ./signGP x-load.bin ビルド後出来た x-loader.bin.ift は MLO という名前で SDカードFATパーティションの先頭に書き込む u-boot †$ cd ~/bc10 $ git clone git://gitorious.org/bc10/u-boot-bc10.git u-boot-bc10 $ cd u-boot-bc10 $ git checkout -t -b build origin/build $ make omap3_bc10_config $ make ビルド後出来た u-boot.bin は SDカードFATパーティションに MLO ファイルコピー後コピーします。 kernel †$ cd ~/bc10 $ git clone git://gitorious.org/~bc-dev/rowboat/bc10-rowboat-kernel.git bc10-rowboat-kernel $ cd bc10-rowboat-kernel $ git checkout -t -b bc10-2.6.32-build origin/bc10-2.6.32-build $ make omap3_bc10_defconfig $ make uImage $ make modules ビルド完了後以下のディレクトリにuImage が作成されます。 $ ls ~/bc10/bc10-rowboat-kernel/arch/arm/boot/ Image Makefile bootp compressed install.sh uImage zImage SGX SDK の導入 †SGX SDK を導入します。 $ cd bc10 $ git clone git://gitorious.org/rowboat/ti_android_sgx_sdk.git TI_Android_SGX_SDK $ cd TI_Android_SGX_SDK $ ./OMAP35x_Android_Graphics_SDK_setuplinux_3_01_00_03.bin インストールディレクトリ位置を聞かれるので今回はデフォルトインストールディレクトリの Rules.make の編集 †Rules.make を以下のように修正したものが ${HOME}/bc10/device/beatcraft/bc10 にありますので、その $ cd ${HOME}/OMAP35x_Android_Graphics_SDK_3_01_00_03 $ mv Rules.make Rules.make.orig $ cp ${HOME}/bc10/device/beatcraft/bc10/Rules.make ${HOME}/OMAP35x_Android_Graphics_SDK_3_01_00_03/ #Rules.make PLATFORM=LinuxOMAP3 ################# FIELDS MODIFIABLE BY THE USER ############################### #set home area HOME (relative location for all SDK operations) # HOME=INVALIDVAL HOME=/home/beat #Current Directory where Graphics SDK is installed GRAPHICS_INSTALL_DIR=$(HOME)/OMAP35x_Android_Graphics_SDK_3_01_00_03 #GRAPHICS_INSTALL_DIR=$(HOME)/bc10/TI_ANDROID #Android Specific #Path of Android Root FS # ANDROID_ROOT=$(HOME)/INVALIDVAL ANDROID_ROOT=$(HOME)/bc10/out/target/product/bc10/bc10-image #set toolchain root path for arm-eabi # CSTOOL_DIR=INVALIDVAL CSTOOL_DIR=$(HOME)/bc10/prebuilt/linux-x86/toolchain/arm-eabi-4.4.0/ 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/kernel-rowboat-bc10 TARGETFS_INSTALL_DIR=$(ANDROID_ROOT) GFX_TARGETFS_KERMOD_PATH=$(TARGETFS_INSTALL_DIR)/lib/modules/2.6.32 #Android ANDROID_DISCIMAGE=$(TARGETFS_INSTALL_DIR)/ コピー完了後、ビルドを実行します。 $ cd ~/OMAP35x_Android_Graphics_SDK_3_01_00_03 $ make $ make OMAPES=3.x install 上記 make install の OMAPES=3.x という option は bc10 に搭載している OMAP3530 の For OMAP3530 ES 1or2 = 2.x For OMAP3530 ES3.0 = 3.x For AM3517 = 3.x For AM37x = 5.x ビルド完了後以下のメッセージがでます。 Installation complete! これで ~/bc10/out/target/product/bc10/bc10-image/ に必要なファイルがコピーされ、 SD カードイメージ作成 †bc10/booting 起動用SDカード作成 の手順に従って作成していきます。
作業環境はLinuxを想定しています。
以下の説明は主にLinuxBootDiskFormat(code.google.com)から引用してアレンジしたものです。 SDカードのアンマウント †このあとパーティション操作やフォーマット作業をおこなうために、SDカードがマウントされている場合には、 $ df -h Filesystem Size Used Avail Use% Mounted on ... /dev/sdc1 400M 94M 307M 24% /media/disk ... アンマウントをおこないます。 $ umount /media/disk パーティションの初期化・設定 †fdiskコマンドを実行します。 $ 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パーティションをそれぞれフォーマットします。
$ sudo mkfs.msdos -F 32 /dev/sdc1 -n LABEL1 mkfs.msdos 2.11 (12 Mar 2005)
$ sudo mkfs.ext3 -L LABEL2 /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カードに配置します。 FAT パーティション †
1段目のブートローダであるX-Loaderは、SDカード上の配置方法に制限があります。
$ cd ~/bc10/x-load-bc10 $ cp x-load.bin.ift /media/LABEL1/MLO
続いて、2段目のブートローダであるU-Bootを配置します。 ファイル名を「u-boot.bin」とします。 $ cd ~/bc10/u-boot-bc10 $ cp u-boot.bin /media/LABEL1/u-boot.bin
bc10-rowboat-kernel でビルドした uImage を配置します。 $ sudo cp ~/bc10/bc10-rowboat-kernel/arch/arm/boot/uImage /media/LABEL1/
bc10/rowboat-eclair-dsp と
同様に 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 omapfb.video_mode=680x480MR-24@60' bootm 84000000 このファイルを引数に指定して、以下のように mkimage を実行します。 $ mkimage -A arm -O linux -T script -C none -a 0 -e 0 -n ./boot.script -d ./boot.script ./boot.scr &> /dev/null 生成された boot.scr をSDカードのFATパーティションにコピーします。 $ sudo cp boot.scr /media/LABEL1/ Linux パーティション †ビルドしたbc10用 android の userland を配置します。 $ cd ~/bc10/out/target/product/bc10/bc10-image $ sudo cp -fr * /media/LABEL2/ 最後にSDカードをアンマウントする前に念のため sync を実行します。 $ sync $ sudo umount /media/LABEL1 $ sudo umount /media/LABEL2 以上で SDカードイメージ作成は完了です。 x-loader、u-boot、kernel の変更点 †bc10 froyo 対応 u-boot、x-loader、kernel に関する項目です。 bc10-rowboat-kernel †派生元 †
主な変更点 †
u-boot-bc10 †派生元 †
主な変更点 †
x-load-bc10 †派生元 †
主な変更点 †
参照URL †
更新記録 †2010/09/06 環境構築、android ソース取得部分まで記載、x-loader、u-boot、kernel調整中 |