Android 到ARM versatile PB板移植主要步骤

来源:互联网 发布:名字 知 日语 编辑:程序博客网 时间:2024/05/21 08:06

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


真实机器要切换到android-2.6.27分支,然后make uImage(用于uboot 直接goto...)