Android
Android kernel for bc9 (2/2)

Setup Android bootable linux kernel and userland for bc9 (gumstix) 1

Setting up gumstix build environment

We use gumstix OpenEmbedded (OE) build system (bitbake).
Bitbake is originally OpenEmbedded build environment and Gumstix,Inc. modified it for their own purposes.

Before you proceed, please understand standard setting up procedure of gumstix.

Check out source

$ mkdir ~/gumstix 
$ cd ~/gumstix 
$ svn co https://gumstix.svn.sourceforge.net/svnroot/gumstix/trunk gumstix-oe

Setting up Environment (shell)

If you prefer setting up Environment via bash profile, do:

$ cat gumstix-oe/extras/profile >> ~/.bashrc

If you prefer setting up Environment temporally, do:

$ . ~/gumstix/gumstix-oe/extras/profile

or

$ source  ~/gumstix/gumstix-oe/extras/profile

Setting up source code caching

Gumstix OE downloads source code during build operation.
So in order to avoid repeating download of every build operation, you had better to set up source code caching directory.
At first, add new group for cache management and add operating user to this group.

$ sudo groupadd oe
$ sudo usermod -a -G oe {your_username}

Next make source code storing directory and set owner and permission appropriately.

$ sudo mkdir /usr/share/sources
$ sudo chgrp oe /usr/share/sources
$ sudo chmod 0775 /usr/share/sources
$ sudo chmod ug+s /usr/share/sources

Adjusting build contents

Current default kernel version of gumstix verdex pro is 2.6.21.
In contrast Android R1 kernel is version 2.6.25 kernel plus some Android unique drivers.
So we upgrade gumstix's kernel to version 2.6.24, which is less different to Android R1 2.6.25 kernel than 2.6.21.
Then we made patch from diff of 2.6.24 gumstix kernel and 2.6.25 android kernel.

With following adjustments, this patch is automatically applied during build operation.

Procedures are as follows:

  1. Changing building kernel version

    ~/gumstix/gumstix-oe/com.gumstix.collection/conf/machine/include/gumstix.inc
    Modify this file as follows:
    diff -u gumstix.inc.original gumstix.inc 
    --- gumstix.inc.original	2009-03-27 21:30:00.000000000 +0900
    +++ gumstix.inc	2009-03-24 22:48:10.000000000 +0900
    @@ -35,7 +35,7 @@
     PREFERRED_PROVIDER_bluez-utils-dbus = "bluez-utils"
     PREFERRED_PROVIDER_gsmd="libgsmd"
    
    -PREFERRED_VERSION_gumstix-kernel = "2.6.21"
    +PREFERRED_VERSION_gumstix-kernel = "2.6.24"
     PREFERRED_VERSION_udev = "118"
     PREFERRED_VERSION_gnuplot = "4.0.0"
     PREFERRED_VERSION_dropbear = "0.47"
  2. Adjusting system image contents

    ~/gumstix-default-2.6.24/gumstix-oe/com.gumstix.collection/conf/machine/gumstix-custom-verdex.conf
    Modify this file as follows:
    diff -u gumstix-custom-verdex.conf.original gumstix-custom-verdex.conf
    --- gumstix-custom-verdex.conf.original	2009-03-30 15:02:26.000000000 +0900
    +++ gumstix-custom-verdex.conf	2009-03-25 13:48:26.000000000 +0900
    @@ -9,8 +9,8 @@
    
     #
     # Your flash size = Total flash (in MB) - 1 (for linux kernel partition)
    -ROOT_FLASH_SIZE = "15"
    -#ROOT_FLASH_SIZE = "31"
    +#ROOT_FLASH_SIZE = "15"
    +ROOT_FLASH_SIZE = "31"
    
     #
     # Enable use of virtual terminal for LCD on tty1 if USE_VT = "1"
  3. Removing unbuildable module
    When you upgrade gumstix's kernel version to 2.6.24, wifistix module can't be built.

    ~/gumstix/gumstix-oe/com.gumstix.collection/packages/tasks/task-base-gumstix.bb
    So remove this module's build difinition from bitbake setting file as follows:
    --- task-base-gumstix.bb.original	2009-03-26 17:09:52.000000000 +0900
    +++ task-base-gumstix.bb	2009-03-30 17:10:04.000000000 +0900
    @@ -201,7 +201,6 @@
      
     RDEPENDS_task-base-gumstix-wifi = "\
         task-base-gumstix-pcmcia \
    -    wifistix-modules \
         wireless-tools \
         wpa-supplicant \
  4. Adding patch during kernel build in bitbake

    ~gumstix/gumstix-oe/com.gumstix.collection/packages/linux/gumstix-kernel_2.6.24.bb
    Modify this bitbake config file as follows:
    diff -u gumstix-kernel_2.6.24.bb.original gumstix-kernel_2.6.24.bb
    --- gumstix-kernel_2.6.24.bb.original	2009-03-26 19:23:32.000000000 +0900
    +++ gumstix-kernel_2.6.24.bb	2009-03-27 22:01:53.000000000 +0900
    @@ -46,7 +46,8 @@
            file://smc911x-fixup.patch;patch=1 \
            file://smc91x-fail-if-no-chip.patch;patch=1 \
            file://one-wire.patch;patch=1 \
    +       file://diff-kernel-original-android.patch;patch=1 \
            ${@base_contains('MACHINE_FEATURES', 'rgb16','file://pxafb-backto16.patch;patch=1', '',d)} \
            "
    Here is patch file added in above procedure.
    filediff-kernel-original-android.patch
    This file applies following modifications to gumstix's original kernel source code.
    ・Adding Android unique drivers required to boot Android userland
    ・Fix of some Kconfig and Makefile
    ・Modification of Framebuffer driver (add panning function to pxafb.c)
    Put it in following directory:
    ~gumstix/gumstix-oe/com.gumstix.collection/packages/linux/gumstix-kernel-2.6.24/
  5. Tochscreen driver adjustment
    filetsc2003.c
    This is modified touchscreen driver (tsc2003.c) for Android.
    Because of execution procedure of gumstix-kernel_2.6.24.bb, this file can't be included in diff-kernel-original-android.patch file.
    Download and replace original tsc2003.c with this file.
    Original tsc2003.c is in following directory:

    ~gumstix/gumstix-oe/com.gumstix.collection/packages/linux/gumstix-kernel-2.6.24/
  6. defconfig adjustment
    When you apply above patch and adjustments, you also require additional item in kernel config for Android drivers.
    filedefconfig
    Download and recplace original gumstix's defconfig with this modified defconfig.
    Original defconfig is in following directory:

    ~gumstix/gumstix-oe/com.gumstix.collection/packages/linux/gumstix-kernel-2.6.24/gumstix-custom-verdex/

building source code

After finish adjustments, proceed the build as follows:

bitbake gumstix-basic-image

Bitbake downloads all source code and build ARM Cross Toolchain during the first build.
When the build is finished, onboard FlashROM installable kernel image file and system image file are generated.

$ ls -1 ~/gumstix/gumstix-oe/tmp/deploy/glibc/images/gumstix-custom-verdex/
Angstrom-gumstix-basic-image-glibc-ipk-2007.9-test-20090330-gumstix-custom-verdex.rootfs.jffs2
gumstix-basic-image-gumstix-custom-verdex.jffs2 (simlink to above Angstrom....jffs2)
modules-2.6.24-r1-gumstix-custom-verdex.tgz
uImage-2.6.24-r1-gumstix-custom-verdex.bin

Additionally do following build:

bitbake gumstix-directfb-image

System image file which include DirectFB library and commands are generated.

Angstrom-gumstix-directfb-image-glibc-ipk-2007.9-test-20090330-gumstix-custom-verdex.rootfs.jffs2
gumstix-directfb-image-gumstix-custom-verdex.jffs2 (simlink to above Angstrom...)

This system image file is convenient to check functions of framebuffer driver.
By using DirectFB test applications such as df_dok or df_neo, you can check framebuffer driver drawing function before you boot Android.

Android kernel for bc9 (2/2)


by Satoshi OTSUKA

Attach file: filedefconfig 2191 download [Information] filetsc2003.c 3442 download [Information] filediff-kernel-original-android.patch 2200 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: 2009-04-11 (Sat) 04:26:35 (5493d)