Android
Android userland for bc9 (2/2)

Setting up Android userland 1

It is assumed that you get and build open source version of Android source code.

Before you proceed, please install and set up required applications and packages in advance to build Android source code.

Obtaining source

  1. Make an directory:
    $ mkdir mydroid
    $ cd mydroid
  2. Init repo. This time we use master branch. (We are using source code checked out at March 20, 2009)
    $ repo init -u git://android.git.kernel.org/platform/manifest.git
  3. Checkout source code.
    $ repo sync
    Make sure that following directories are exist:
    $ ls
    Makefile  build        external    kernel     system
    bionic    dalvik       frameworks  packages     
    bootable  development  hardware    prebuilt              

Adjustment for gumstix

In order to run Android on gumstix, we add small modifications on some source codes.
(Some of these may be not necessary. Though we add these modification and succeeded.)
On April 2009 a lots of source code are merged from cupcake development branch to master branch. Due to this merging, further modifications may be required when you use current master branch source code.
(reference http://androidzaurus.seesaa.net/article/116995835.html )

  1. Disable pmem
    (reference  http://groups.google.co.jp/group/android-embedded-japan/browse_thread/thread/bc549dab23f6cbac#)
    pmem is a function to allocate a large continuous physical memory region.
    When pmem is enabled, Android won't work on gumstix.

    ~/mydroid/system/core/init/devices.c
    So modify this file as follows:
     diff -u devices.c.original devices.c 
    --- devices.c.original	2009-03-30 19:05:50.000000000 +0900
    +++ devices.c	2009-03-11 19:13:54.000000000 +0900
    @@ -109,9 +109,9 @@
         { "/dev/eac",           0660,   AID_ROOT,       AID_AUDIO,      0 },
         { "/dev/cam",           0660,   AID_ROOT,       AID_CAMERA,     0 },
         { "/dev/pmem",          0660,   AID_SYSTEM,     AID_GRAPHICS,   0 },
    -    { "/dev/pmem_gpu",      0660,   AID_SYSTEM,     AID_GRAPHICS,   1 },
    -    { "/dev/pmem_adsp",     0660,   AID_SYSTEM,     AID_AUDIO,      1 },
    -    { "/dev/pmem_camera",   0660,   AID_SYSTEM,     AID_CAMERA,     1 },
    +    { "/dev/pmem_gpu",      0660,   AID_SYSTEM,     AID_GRAPHICS,   0 },
    +    { "/dev/pmem_adsp",     0660,   AID_SYSTEM,     AID_AUDIO,      0 },
    +    { "/dev/pmem_camera",   0660,   AID_SYSTEM,     AID_CAMERA,     0 },
         { "/dev/oncrpc/",       0660,   AID_ROOT,       AID_SYSTEM,     1 },
         { "/dev/adsp/",         0660,   AID_SYSTEM,     AID_AUDIO,      1 },
         { "/dev/mt9t013",       0660,   AID_SYSTEM,     AID_SYSTEM,     0 },
  2. Fixing drawing position of Boot animation
    To fix position of Android's logo and robot blinking animation on start up, add following modifications.
    (reference https://review.source.android.com/Gerrit#change,1552 )

  • Modifying source code
    ~/mydroid/frameworks/base/libs/surfaceflinger/BootAnimation.cpp
    Modify source code as follows:
    diff -u BootAnimation.cpp.original BootAnimation.cpp 
    --- BootAnimation.cpp.original	2009-03-30 19:53:25.000000000 +0900
    +++ BootAnimation.cpp	2009-03-25 20:59:04.000000000 +0900
    @@ -196,6 +196,7 @@
         return r;
     }
    
    +static const int RIGHT_MARGIN = 112; 
    
     bool BootAnimation::android()
     {
    -    initTexture(&mAndroid[0], mAssets, "images/android_320x480.png");
    +    initTexture(&mAndroid[0], mAssets, "images/android_480x272.png");
         initTexture(&mAndroid[1], mAssets, "images/boot_robot.png");
         initTexture(&mAndroid[2], mAssets, "images/boot_robot_glow.png");
    
    @@ -219,24 +221,28 @@
         glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
         glTexEnvx(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE);
         const int steps = 8;
    +    int x = (mWidth - mAndroid[0].w)/2;
    +    int y = (mHeight - mAndroid[0].h)/2;
    +    x = (x < 0) ? 0 : x;
    +    y = (y < 0) ? 0 : y; 
         for (int i=1 ; i<steps ; i++) {
             float fade = i / float(steps);
             glColor4f(1, 1, 1, fade*fade);
             glClear(GL_COLOR_BUFFER_BIT);
    -        glDrawTexiOES(0, 0, 0, mAndroid[0].w, mAndroid[0].h);
    +        glDrawTexiOES(x, y, 0, mAndroid[0].w, mAndroid[0].h);
             eglSwapBuffers(mDisplay, mSurface);
         }
    
         // draw last frame
         glTexEnvx(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_REPLACE);
         glDisable(GL_BLEND);
    -    glDrawTexiOES(0, 0, 0, mAndroid[0].w, mAndroid[0].h);
    +    glDrawTexiOES(x, y, 0, mAndroid[0].w, mAndroid[0].h);
         eglSwapBuffers(mDisplay, mSurface); 
        
        
         // update rect for the robot
    -    const int x = mWidth - mAndroid[1].w - 33;
    -    const int y = (mHeight - mAndroid[1].h)/2 - 1;
    +    x = mWidth - (mWidth - mAndroid[0].w)/2 - mAndroid[1].w - RIGHT_MARGIN;
    +    y = (mHeight - mAndroid[1].h)/2 - 1; 
         const Rect updateRect(x, y, x+mAndroid[1].w, y+mAndroid[1].h);
    
        // draw and update only what we need
  • Replace image file
    From the image file used in BootAnimation.cpp,
    ~/mydroid/frameworks/base/core/res/assets/images/android_320x480.png
    We made an image file android_480x272.png, fitted to gumstix LCD's resolution.
    Put this android_480x272.png file in same directory as android_320x480.png.
    android_480x272.png
  1. Modifying key event check
    (reference http://ozetchi.cocolog-nifty.com/amerika/2009/02/post-6a82.html )

    ~mydroid/frameworks/base/services/java/com/android/server/KeyInputQueue.java
    Modify this file as follows:
    diff -u KeyInputQueue.java.original KeyInputQueue.java
    --- KeyInputQueue.java.original	2009-03-30 19:23:51.000000000 +0900
    +++ KeyInputQueue.java	2009-03-11 12:31:56.000000000 +0900
    @@ -247,7 +247,7 @@
                         }
                         
                         if (!send) {
    -                        continue;
    +//                        continue;
                         }
                        
                         synchronized (mFirst) {
    This modification is for accepting key input event certainly.

build

After you finish those modifications, move to mydroid directory and build:

$ cd ~/mydroid
$ make

Android userland for bc9 (2/2)


by Satoshi OTSUKA

Attach file: fileandroid_480x272.png 2379 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-13 (Mon) 13:47:45 (5718d)