Building Android for Pandaboard - ビルド編

準備編: http://d.hatena.ne.jp/kinneko/20110907/p1、に続いてビルド編。

ビルド環境設定

この前やったけど、マシン再起動したので再度。

kinneko@BuildSV:~/panda/L27.12.1-P2$ export JAVA_HOME=/usr/lib/jvm/java-6-sun
kinneko@BuildSV:~/panda/L27.12.1-P2$ export CROSS_COMPILE=arm-none-linux-gnueabi-
kinneko@BuildSV:~/panda/L27.12.1-P2$ export PATH=/home/kinneko/panda/L27.12.1-P2/build_tools/arm-2010q1/bin:$PATH

u-bootのビルド

Before building u-boot adjust the bootdelay and bootargs in omap4430panda.h
あれ?パッチやっぱ必要か。
あてる。

kinneko@BuildSV:~/panda/L27.12.1-P2$ cd u-boot/
kinneko@BuildSV:~/panda/L27.12.1-P2/u-boot$ wget http://www.omappedia.com/images/e/e4/Uboot-bootargs.patch.gz
kinneko@BuildSV:~/panda/L27.12.1-P2/u-boot$ gzip -d Uboot-bootargs.patch.gz 

中身は、board/omap4430panda/mmc.c, common/cmd_bootm.c, include/configs/omap4430panda.hへのパッチ。
kernelの起動パラメータとubootの起動コマンドは、最後のomap4430panda.hにハードコードされている。

+#define CONFIG_BOOTARGS "console=ttyO2,115200n8 androidboot.console=ttyO2" \
+	" mem=456M@0x80000000 mem=512M@0xA0000000" \
+	" root=/dev/mmcblk0p2 rw rootdelay=2 init=/init" \
+	" vram=32M omapfb.vram=0:16M" \
+	" omapdss.def_disp=hdmi consoleblank=0"
 
 -#define CONFIG_BOOTCOMMAND "booti mmc0"
+#define CONFIG_BOOTCOMMAND "fatload mmc 0 0x82000000 uImage; bootm 0x82000000"

これは無視はできないな。

kinneko@BuildSV:~/panda/L27.12.1-P2/u-boot$ patch -p1 < Uboot-bootargs.patch 
patching file board/omap4430panda/mmc.c
patching file common/cmd_bootm.c
patching file include/configs/omap4430panda.h

終り。
問題なくあたった。


本家では、bootdelayを5秒にするとあるけど、先のパッチで3秒にはなっているのだよね。
でも、これは、このままでいいんじゃない?

vim $YOUR_PATH/L27.12.1-P2/u-boot/include/configs/omap4430panda.h
 - #define CONFIG_BOOTDELAY         0
+ #define CONFIG_BOOTDELAY        5


ビルド。

kinneko@BuildSV:~/panda/L27.12.1-P2/u-boot$ make distclean
find . -type f \
		\( -name 'core' -o -name '*.bak' -o -name '*~' \
		-o -name '*.o'  -o -name '*.a'  \) -print \
		| xargs rm -f
rm -f examples/hello_world examples/timer \
	      examples/eepro100_eeprom examples/sched \
	      examples/mem_to_mem_idma2intr examples/82559_eeprom \
	      examples/smc91111_eeprom \
	      examples/test_burst
rm -f tools/img2srec tools/mkimage tools/envcrc tools/gen_eth_addr
rm -f tools/mpc86x_clk tools/ncb
rm -f tools/easylogo/easylogo tools/bmp_logo
rm -f tools/gdb/astest tools/gdb/gdbcont tools/gdb/gdbsend
rm -f tools/env/fw_printenv tools/env/fw_setenv
rm -f board/cray/L1/bootscript.c board/cray/L1/bootscript.image
rm -f board/netstar/eeprom board/netstar/crcek
rm -f board/netstar/*.srec board/netstar/*.bin
rm -f board/trab/trab_fkt board/voiceblue/eeprom
rm -f board/integratorap/u-boot.lds board/integratorcp/u-boot.lds
rm -f include/bmp_logo.h
find . -type f \( -name .depend \
		-o -name '*.srec' -o -name '*.bin' -o -name u-boot.img \) \
		-print0 \
		| xargs -0 rm -f
rm -f  *.bak tags TAGS include/version_autogenerated.h
rm -fr *.*~
rm -f u-boot u-boot.map u-boot.hex 
rm -f tools/crc32.c tools/environment.c tools/env/crc32.c
rm -f tools/inca-swap-bytes cpu/mpc824x/bedbug_603e.c
rm -f include/asm/proc include/asm/arch include/asm
kinneko@BuildSV:~/panda/L27.12.1-P2/u-boot$ make ARCH=arm omap4430panda_config
Configuring for omap4430panda board...
kinneko@BuildSV:~/panda/L27.12.1-P2/u-boot$ make 2>&1 |tee ../mydroid/logs/u-boot_make20110907.out
(ここはログも取ったので略)
arm-none-linux-gnueabi-objcopy --gap-fill=0xff -O srec u-boot u-boot.srec
arm-none-linux-gnueabi-objcopy --gap-fill=0xff -O binary u-boot u-boot.bin

無事終わったので抜ける。

kinneko@BuildSV:~/panda/L27.12.1-P2/u-boot$ cd ..

x-loaderのビルド

kinneko@BuildSV:~/panda/L27.12.1-P2$ cd x-loader/
kinneko@BuildSV:~/panda/L27.12.1-P2/x-loader$ make distclean 
find . -type f \
		\( -name 'core' -o -name '*.bak' -o -name '*~' \
		-o -name '*.o'  -o -name '*.a'  \) -print \
		| xargs rm -f
find . -type f \
		\( -name .depend -o -name '*.srec' -o -name '*.bin' \) \
		-print \
		| xargs rm -f
rm -f  *.bak tags TAGS
rm -fr *.*~
rm -f x-load x-load.map  x-load.bin.ift signGP MLO
rm -f include/asm/proc include/asm/arch
rm -f include/config.h include/config.mk
kinneko@BuildSV:~/panda/L27.12.1-P2/x-loader$ make ARCH=arm omap4430panda_configrm -f include/config.h include/config.mk
Configuring for omap4430panda board...
echo "/* Generarated file. Do not edit */" >./include/config.h
echo "#include <configs/omap4430panda.h>" >>./include/config.h
MPU at 1GHz revision..
kinneko@BuildSV:~/panda/L27.12.1-P2/x-loader$ make ift 2>&1 |tee $MYDROID/logs/x-loader_make20110907.out
(略)
TEXT_BASE=`grep -w _start System.map|cut -d ' ' -f1`
./signGP x-load.bin 0x40304350
cp x-load.bin.ift MLO

無事終わったので抜ける。

kinneko@BuildSV:~/panda/L27.12.1-P2/x-loader$ cd ..

kernelのビルド

u-boot用のヘッダ付きのuImageを作るには、mkimageが必要。これはu-boot/toolsの下にビルドされているので、そこにPATHを通しておけとのこと。
通して確認。

kinneko@BuildSV:~/panda/L27.12.1-P2$ export PATH=/home/kinneko/panda/L27.12.1-P2/u-boot/tools/:$PATH
kinneko@BuildSV:~/panda/L27.12.1-P2$ which mkimage
/home/kinneko/panda/L27.12.1-P2/u-boot/tools//mkimage
kinneko@BuildSV:~/panda/L27.12.1-P2$ echo $PATH
/home/kinneko/panda/L27.12.1-P2/u-boot/tools/:/home/kinneko/panda/L27.12.1-P2/build_tools/arm-2010q1/bin:/usr/bin:/bin

kernelのビルド。

kinneko@BuildSV:~/panda/L27.12.1-P2$ cd kernel/android-2.6.35/
kinneko@BuildSV:~/panda/L27.12.1-P2/kernel/android-2.6.35$ make ARCH=arm panda_defconfig
  HOSTCC  scripts/basic/fixdep
  HOSTCC  scripts/basic/docproc
  HOSTCC  scripts/basic/hash
  HOSTCC  scripts/kconfig/conf.o
scripts/kconfig/conf.c: In function 'conf_choice':
scripts/kconfig/conf.c:307:9: warning: ignoring return value of 'fgets', declared with attribute warn_unused_result
scripts/kconfig/conf.c: In function 'conf_askvalue':
scripts/kconfig/conf.c:105:8: warning: ignoring return value of 'fgets', declared with attribute warn_unused_result
  HOSTCC  scripts/kconfig/kxgettext.o
  SHIPPED scripts/kconfig/zconf.tab.c
  SHIPPED scripts/kconfig/lex.zconf.c
  SHIPPED scripts/kconfig/zconf.hash.c
  HOSTCC  scripts/kconfig/zconf.tab.o
  HOSTLD  scripts/kconfig/conf
#
# configuration written to .config
#
kinneko@BuildSV:~/panda/L27.12.1-P2/kernel/android-2.6.35$ make ARCH=arm uImage 2>&1 |tee ../../mydroid/logs/kernel_make20110907.out
(略)
  LD      vmlinux.o
  MODPOST vmlinux.o
WARNING: modpost: Found 4 section mismatch(es).
To see full details build your kernel with:
'make CONFIG_DEBUG_SECTION_MISMATCH=y'
  GEN     .version
  CHK     include/generated/compile.h
  UPD     include/generated/compile.h
  CC      init/version.o
  LD      init/built-in.o
  LD      .tmp_vmlinux1
  KSYM    .tmp_kallsyms1.S
  AS      .tmp_kallsyms1.o
  LD      .tmp_vmlinux2
  KSYM    .tmp_kallsyms2.S
  AS      .tmp_kallsyms2.o
  LD      vmlinux
  SYSMAP  System.map
  SYSMAP  .tmp_System.map
  OBJCOPY arch/arm/boot/Image
  Kernel: arch/arm/boot/Image is ready
  AS      arch/arm/boot/compressed/head.o
  GZIP    arch/arm/boot/compressed/piggy.gzip
  AS      arch/arm/boot/compressed/piggy.gzip.o
  CC      arch/arm/boot/compressed/misc.o
  CC      arch/arm/boot/compressed/decompress.o
  SHIPPED arch/arm/boot/compressed/lib1funcs.S
  AS      arch/arm/boot/compressed/lib1funcs.o
  LD      arch/arm/boot/compressed/vmlinux
  OBJCOPY arch/arm/boot/zImage
  Kernel: arch/arm/boot/zImage is ready
  UIMAGE  arch/arm/boot/uImage
Image Name:   Linux-2.6.35.7-00148-gd62271f
Created:      Wed Sep  7 15:05:05 2011
Image Type:   ARM Linux Kernel Image (uncompressed)
Data Size:    3246520 Bytes = 3170.43 kB = 3.10 MB
Load Address: 0x80008000
Entry Point:  0x80008000
  Image arch/arm/boot/uImage is ready

若干ワーニングが出るが、とりあえず通った模様。

kinneko@BuildSV:~/panda/L27.12.1-P2/kernel/android-2.6.35$ file arch/arm/boot/uImage 
arch/arm/boot/uImage: u-boot legacy uImage, Linux-2.6.35.7-00148-gd62271f, Linux/ARM, OS Kernel Image (Not compressed), 3246520 bytes, Wed Sep  7 15:05:05 2011, Load Address: 0x80008000, Entry Point: 0x80008000, Header CRC: 0x0794ADED, Data CRC: 0xDA4EFF13
kinneko@BuildSV:~/panda/L27.12.1-P2/kernel/android-2.6.35$ ls -lh arch/arm/boot/uImage 
-rw-r--r-- 1 kinneko kinneko 3.1M Sep  7 15:05 arch/arm/boot/uImage


モジュールもビルド。

kinneko@BuildSV:~/panda/L27.12.1-P2/kernel/android-2.6.35$ make ARCH=arm modules 2>&1 |tee ../../mydroid/logs/kernel_modules20110907.out
  CHK     include/linux/version.h
  CHK     include/generated/utsrelease.h
make[1]: `include/generated/mach-types.h' is up to date.
  CALL    scripts/checksyscalls.sh
  CC [M]  crypto/ecb.o
  CC [M]  crypto/pcbc.o
  CC [M]  drivers/bluetooth/btwilink.o
  CC [M]  drivers/media/radio/wl128x/fmdrv_common.o
  CC [M]  drivers/media/radio/wl128x/fmdrv_rx.o
  CC [M]  drivers/media/radio/wl128x/fmdrv_tx.o
  CC [M]  drivers/media/radio/wl128x/fmdrv_v4l2.o
  LD [M]  drivers/media/radio/wl128x/fm_v4l2_drv.o
  CC [M]  drivers/media/video/gspca/gspca.o
  LD [M]  drivers/media/video/gspca/gspca_main.o
  CC [M]  drivers/media/video/omapgfx/gfx_init.o
  CC [M]  drivers/media/video/omapgfx/gfx_io.o
  CC [M]  drivers/media/video/omapgfx/gfx_bc.o
  CC [M]  drivers/media/video/omapgfx/gfx_tiler.o
  LD [M]  drivers/media/video/omapgfx/gfx_vout_mod.o
  CC [M]  drivers/staging/omap_hsi/hsi-char.o
  CC [M]  drivers/staging/omap_hsi/hsi-if.o
  LD [M]  drivers/staging/omap_hsi/hsi_char.o
  CC [M]  drivers/staging/ti-st/fmdrv_chr.o
  LD [M]  drivers/staging/ti-st/fm_drv.o
  CC [M]  drivers/staging/ti-st/gps_drv.o
  Building modules, stage 2.
  MODPOST 9 modules
  CC      crypto/ecb.mod.o
  LD [M]  crypto/ecb.ko
  CC      crypto/pcbc.mod.o
  LD [M]  crypto/pcbc.ko
  CC      drivers/bluetooth/btwilink.mod.o
  LD [M]  drivers/bluetooth/btwilink.ko
  CC      drivers/media/radio/wl128x/fm_v4l2_drv.mod.o
  LD [M]  drivers/media/radio/wl128x/fm_v4l2_drv.ko
  CC      drivers/media/video/gspca/gspca_main.mod.o
  LD [M]  drivers/media/video/gspca/gspca_main.ko
  CC      drivers/media/video/omapgfx/gfx_vout_mod.mod.o
  LD [M]  drivers/media/video/omapgfx/gfx_vout_mod.ko
  CC      drivers/staging/omap_hsi/hsi_char.mod.o
  LD [M]  drivers/staging/omap_hsi/hsi_char.ko
  CC      drivers/staging/ti-st/fm_drv.mod.o
  LD [M]  drivers/staging/ti-st/fm_drv.ko
  CC      drivers/staging/ti-st/gps_drv.mod.o
  LD [M]  drivers/staging/ti-st/gps_drv.ko


再度やるときは、make ARCH=arm distcleanしてから。

kinneko@BuildSV:~/panda/L27.12.1-P2/kernel/android-2.6.35$ make ARCH=arm distcan 
  CLEAN   /home/kinneko/panda/L27.12.1-P2/kernel/android-2.6.35
  CLEAN   .tmp_versions
  CLEAN   scripts/basic
  CLEAN   scripts/kconfig
  CLEAN   scripts/mod
  CLEAN   include/config include/generated
  CLEAN   .config include/linux/version.h


戻る。

kinneko@BuildSV:~/panda/L27.12.1-P2/kernel/android-2.6.35$ cd ../..
kinneko@BuildSV:~/panda/L27.12.1-P2$ 

無線LANドライバのビルド

Build 127x stationドライバのビルド。

kinneko@BuildSV:~/panda/L27.12.1-P2$ cd wlan/wl1283/platforms/os/linux
kinneko@BuildSV:~/panda/L27.12.1-P2/wlan/wl1283/platforms/os/linux$ export KERNEL_DIR=/home/kinneko/panda/L27.12.1-P2/kernel/android-2.6.35
kinneko@BuildSV:~/panda/L27.12.1-P2/wlan/wl1283/platforms/os/linux$ make clean
kinneko@BuildSV:~/panda/L27.12.1-P2/wlan/wl1283/platforms/os/linux$ make TNETW=1273
(略)
mv ../../../platforms/os/linux/build/tiwlan_drv_stub.o ../../../platforms/os/linux/tiwlan_drv.ko
stripping...
cd ../../../platforms/os/linux && arm-none-linux-gnueabi-strip -g --strip-unneeded tiwlan_drv.ko
kinneko@BuildSV:~/panda/L27.12.1-P2/wlan/wl1283/platforms/os/linux$ cd ../../../../..

Build 127x softApドライバのビルド。

kinneko@BuildSV:~/panda/L27.12.1-P2$ cd wlan/wl1283_softAP/platforms/os/linux
kinneko@BuildSV:~/panda/L27.12.1-P2/wlan/wl1283_softAP/platforms/os/linux$ make TNETW=1273
(略)
mv ../../../platforms/os/linux/build/tiwlan_drv_stub.o ../../../platforms/os/linux/tiap_drv.ko
stripping...
cd ../../../platforms/os/linux && arm-none-linux-gnueabi-strip -g tiap_drv.ko
kinneko@BuildSV:~/panda/L27.12.1-P2/wlan/wl1283_softAP/platforms/os/linux$ cd ../../../../..

Androidのビルド

先日のパワーのあるマシンでビルドするので、-j12で。RAMが4GB未満であるときや、パワーのないマシンのときは、このへんは-j4くらいまでにしておいたほうが。

kinneko@BuildSV:~/panda/L27.12.1-P2$ cd mydroid/
kinneko@BuildSV:~/panda/L27.12.1-P2/mydroid$ cp -Rfp device/ti/pandaboard/buildspec.mk.default buildspec.mk
kinneko@BuildSV:~/panda/L27.12.1-P2/mydroid$ time make TARGET_PRODUCT=pandaboard -j12 2>&1 |tee logs/android_make20110907.out
============================================
PLATFORM_VERSION_CODENAME=REL
PLATFORM_VERSION=2.3.3
TARGET_PRODUCT=pandaboard
TARGET_BUILD_VARIANT=eng
TARGET_SIMULATOR=
TARGET_BUILD_TYPE=release
TARGET_BUILD_APPS=
TARGET_ARCH=arm
HOST_ARCH=x86
HOST_OS=linux
HOST_BUILD_TYPE=release
BUILD_ID=GINGERBREAD
============================================
Checking build tools versions...
(略)
Target system fs image: out/target/product/pandaboard/obj/PACKAGING/systemimage_intermediates/system.img
in mkuserimg.sh PATH=out/host/linux-x86/bin/:/home/kinneko/panda/L27.12.1-P2/u-boot/tools/:/home/kinneko/panda/L27.12.1-P2/build_tools/arm-2010q1/bin:/usr/bin:/bin
make_ext4fs -s -l 536870912 -a system out/target/product/pandaboard/obj/PACKAGING/systemimage_intermediates/system.img out/target/product/pandaboard/system
Creating filesystem with parameters:
    Size: 536870912
    Block size: 4096
    Blocks per group: 32768
    Inodes per group: 8192
    Inode size: 256
    Journal blocks: 2048
    Label: 
    Blocks: 131072
    Block groups: 4
    Reserved block group size: 31
Created filesystem with 727/32768 inodes and 28947/131072 blocks
Install system fs image: out/target/product/pandaboard/system.img
out/target/product/pandaboard/system.img+out/target/product/pandaboard/obj/PACKAGING/recovery_patch_intermediates/recovery_from_boot.p total size is 112250100
Installed file list: out/target/product/pandaboard/installed-files.txt
DroidDoc took 93 sec. to write docs to out/target/common/docs/doc-comment-check

real	11m15.358s
user	99m58.760s
sys	5m34.080s

最近は、

$ . build/envsetup.sh
$ lunch pandaboard-eng

とかやるのが普通なんだけど、Pandaはそうでもないのかな?
まぁ、ここは、このままで。


次はSDへの書き込みと起動調整へ続く。