2010年9月29日 星期三

參考

http://blog.sina.com.cn/u/1580234053

SDK preparation

Set the system to have at least 1.5G RAM & large disk space.

1.      Download the SDK

yum/apt-get install curl
$ curl http://android.git.kernel.org/repo >~/bin/repo
$ chmod a+x ~/bin/repo
$ mkdir working-directory-name
$ cd working-directory-name
$ repo init -u git://android.git.kernel.org/platform/manifest.git (the latest), or
../bin/repo init -u git://android.git.kernel.org/platform/manifest.git -b android-1.5 => get certain branch
$ repo sync

2.      Install JDK and apache
JDK 5 or JDK 6 (JRE alone is not sufficient, download from Java Website)
Apache Ant 1.6.5 or later for Linux and Mac, 1.7 or later for Windows

revise ~/.bashrc
export JAVA_HOME=/home/xxx/Download/jdk1.5.0_14
export ANT_HOME=/home/xxx/ Download /apache-ant-1.7.0
export ANDROID_SDK=/home/xxx/android/xxx
export 
PATH=$ ANDROID_SDK/tools: $JAVA_HOME/bin:$ANT_HOME/bin:$PATH

Note: 1.6.0 JDK not supported in Android SDK compilation

3.      build
> make
The out folder include the output target file system


 Note: Set the Memory big enough. Otherwise, the src could not be compiled.

Kernel Preparation

1.      Get the kernel code

mkdir ~/android-kernel
cd ~/android-kernel
> git clone git://android.git.kernel.org/kernel/common
> cd common
> git branch goldfish origin/android-goldfish-2.6.27
> git checkout goldfish

Note: Goldfish platform emulates ARM926ejs, we only need to revise the .config for versatile purpose.

2.      Set up cross compiler

look into prebuilt folder for toolchain
$export PATH=$PATH:/home/vadmin/android-source/prebuilt/linux-x86/toolchain/arm-eabi-4.2.1/bin
$export CROSS_COMPILE=arm-eabi-
$export ARCH=arm

Note: some suggest arm2007q3 in www.codesourcery.com.

3.      revise .config

> make menuconfig,
enable nfs, device drivers (serial driver, network driver, display etc.), networking for bootable kernel.

Following options are from others' blogs,

Must have:

CONFIG_AEABI=y   
        CONFIG_SHMEM=y   
        CONFIG_ASHMEM=y
        CONFIG_ARM_THUMB=y
        CONFIG_ANDROID_BINDER_IPC=y
        CONFIG_ANDROID_LOGGER=y
       
Options:
        CONFIG_ANDROID_POWER=y
        CONFIG_ANDROID_POWER_STAT=y
        CONFIG_ANDROID_POWER_ALARM=y
        CONFIG_ANDROID_RAM_CONSOLE=y
        CONFIG_ANDROID_TIMED_GPIO=y No such
        CONFIG_ANDROID_PARANOID_NETWORK=y

disable those with Goldfish:

Device Drivers  ---> Character devices  ---> < > Goldfish TTY Driver
Device Drivers  ---> Power supply class support  ---> < >   Goldfish battery driver (NEW)
Device Drivers  ---> Real Time Clock  ---> < >   GOLDFISH (NEW)
Device Drivers  ---> Graphics support  ---> Support for frame buffer devices  ---> < >   Goldfish Framebuffer

Select drivers related:

Device Drivers  ---> Graphics support  ---> Support for frame buffer devices  ---> <*>   LCD framebuffer support (ARM PL011)
Device Drivers  ---> Graphics support  ---> [*] Bootup logo  ---> [*]   Standard black and white Linux logo
Device Drivers  ---> Graphics support  ---> [*] Bootup logo  ---> [*]   Standard 16-color Linux logo
Device Drivers  ---> Graphics support  ---> [*] Bootup logo  ---> [*]   Standard 224-color Linux logo

Select Android Kernel options
Kernel Features  ---> [*] Use the ARM EABI to compile the kernel
General setup  ---> [*] Use full shmem filesystem
General setup  ---> [*] Enable Android's Shared Memory Subsystem
System Type  ---> [*] Support Thumb user binaries
Device Drivers  ---> Android  ---> [*] Android log driver
Device Drivers  ---> Android  ---> <*> Binder IPC Driver

Optionally select:
Device Drivers  ---> Android  ---> [*] RAM buffer console
Device Drivers  ---> Android  ---> [*] Android timed gpio driver
Device Drivers  ---> Android  ---> [*] Only allow certain groups to create sockets
其余CONFIG选项,如系统支持请一并选择
CONFIG_ANDROID_POWER =y
CONFIG_ANDROID_POWER_STAT =y
CONFIG_ANDROID_POWER_ALARM =y
(可以在Kconfig文件中查找ANDROID_POWER等字段进行选择,或者直接修改.config文件)

4.      Compile

- compile uboot
make clean; make versatile_config; make

- compile kernel
make uImage  
File System Preparation


1.      /dev add ‘null’ and ‘console’
mknod –m 660 null c 1 3
mknod –m 660 console c 5 1


2.      setenv bootargs ip=dhcp root=/dev/nfs nfsroot=x.x.x.x:/export/root console=ttyAMA0,115200 init=/init

if you want to get info from ramdisk.img: (no need actually)
#gunzip ramdisk.img.gz
#cpio -i -F ../ramdisk.img //add new folder and jump in
  

3.      删除nfs_root/init.rc,去掉除mount tmpfs tmpfs /sqlite_stmt_journals size=4m之外所有的mount命令

Some Problems:
·         NFS: can not open root device “nfs” or unknown-block(0, 255)
s: menuconfig enable “nfs root”

·         IP-Config: No network device available
enable smc-xxx network device driver

·         rpcbind:server xxx not responding, timed out
Server side: /etc/hosts.allow, > echo “ALLALL@10.6.48.* : ALLOW” >> /etc/hosts.allow
chmod u+x /etc/rc.d/rc.nfsd

0.      拷贝包中的system目录到nfs_root/system, data目录到nfs_root/data, root目录到nfs_root/
out/target/product/generic一些文件:
ramdisk.img
system.imguserdata.img system dataroot


make goldfish_defconfig


编译模拟器内核的时候要切换到gold fish分支
git branch goldfish origin/android-goldfish-2.6.27 
git checkout goldfish
make zImage

沒有留言:

張貼留言