您的位置:首页 > 移动开发 > Android开发

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

2010-03-16 10:50 253 查看
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 “ALL: ALL@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.img、userdata.img、 system、 data、root

> 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...)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: