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への書き込みと起動調整へ続く。