bootargs : set bootargs noinitrd root=/dev/nfs rw nfsroot=192.168.221.90:/shnfs ip=192.168.221.100 console=ttySAC0,115200 init=/linuxrc mem=128M
平台要求:uname -r 查看RHEL6.1是否为i686版本,如果有x86_64将无法正常编译android
android版本 :android-2.2
android kernel:android-kernel-2.6.35
移植前准备:busybox arm-linux-gcc android-2.2 android-kernel-2.6.35 alsa tslib等
1.安装Sun JDK
a>卸载linux 下OpenJDK 方法:redhat 系统中有卸载软件,直接搜索JDK,卸载相关软件大概有50个左右吧!
b>安装Sun JDK :rpm -ivh jdk-1_5_0_22-linux-i586.rpm
2.修改环境变量
a>vim /etc/bashrc
添加: export JAVA_HOME=/usr/java/jdk1.5.0_22
export JRE_HOME=${JAVA_HOME}/jre
export CLASS_PATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib:$CLASS_PATH
export JAVA_PATH=${JAVA_HOME}/bin:${JRE_HOME}/bin
export PATH=${JAVA_PATH}:$PATH
如果成功:java+TAB 会补全
3.在编译前最好安装gperf包:gperf-3.0.4,如果直接make Android会有错误,由于编译时间太长最好最好这步骤
a> ./configure --build=i386 --host=arm-linux
b> make
c> make install
4.编译Android2.2
a> make //这个将持续三个小时左右,你可以耐心的研究一下java了
5.编译如果成功,直接cd out/target/product/generic/目录下你会发现*.img
a>ramdisk.img --->root
b>system.img---->system
c>userdata.img--->data
//这三个目录将是我们构建nfs的重要目录/root --
/system
/data
再来看看我们的模拟器,cd out/host/linux-x86/bin ---->ls---->就会看到emulator模拟器
那为了放便我们可以把emulator加在环境变量里:echo export PATH=$PATH:<此目录> >>/etc/bashrc
6.惊喜来了,运行模拟器emulator
a>为了少加些环境变量,我们进入到 cd /out/target/product/generic/
b>执行一下ANDROID_PRODUCT_OUT=`pwd` emulator -shell 正确则会进入到emulator。
c>写个小程序测试一番,感觉和手机一样。
d>应用层就在这里开发了。
e>如果觉得这样比较麻烦,那就把该目录叫如环境变量。echo export ANDROID_PRODUCT_OUT=<android>/root/outarget/product/generic
f>生效后emulator 或者emulator -shell
7.Android.mk有一个神奇的功效,在那文件夹里有着个文件,我们都可回到android-2.2目录:执行mmm 文件路径
a>cd <android home>
b>. build/envsetup.h
c>mmm <编译的目录> //该目录下必须有Android.mk ,如果没有则去上级目录
8.eclipse这里不再介绍,因为我们完全不依赖这个我们依然可以做到。
9.这里我们就通过源码创建android应用程序
a>先在命令:local-host#android 查看缺什么东西在相应的目录上添加mkdir + 目录;这里需要添加三个或者四个左右吧,有一个x86,其他的就忘记里
b>如果命令可以用里,这里我们用android list查看一笑target的id。记住
c>android create project -t -k abc.bcd 1 -a example -p ./ 如果不懂就android --help
d>如果创建成功就和eclipse创建的一样的目录结构,仔细研究一番。我们发现只有res src AndroidManifest三个文件有用,其他都是为eclipse使用的
res/layout/main.xml
10.这里说明一下虚拟机是用image三个文件,而不是目录,如果你对其修改后,一定要记得删除system.image
a>重新生成makyaffs2 ststem/system.image
11.烧写bootloader到开发板
12.构建Android nfs文件系统a>/mkdir /nfsroot b>vim /etc/exports /nfsroot *(rw,sync,no_root_squash)
13.构建tftp系统
14.配置内核:a>tar zcf android-kernel-2.6.35.tar.gz
b>cd android-kernel-2.6.35
c>修改一Makefile 交叉编译器选择Android自身的:在目录android-2.2/prebult/linux_x86/toolchain/
或者make menuconfig 修改编译器
d>make
e>cp arch/arm/boot/zImage /tftpboot/
15>cp前面讲的文件到/nfsroot下
a>cp -rf <android home>/out/target/product/generci/root/* /nfsroot
b>cp -rf <android home>/out/target/product/generci/system/* /nfsroot/system/
c>cp -rf <android home>/out/target/product/generci/data/* /nfsroot/data/
16.设置开发版setenv bootargs console=ttySAC0 init=/init root=/dev/nfs nfsroot=192.168.221.90:/nfsroot ip=192.168.221.100:192.168.221.90:255.255.255.0
a>save /saveenv
b>tftp 50008000 zImage
c>bootm 50008000
17.这时是启动不了需要该init.rc 默认权限有问题
同时注释init.rc中的27注释,变为横屏
启动起来发现触摸屏不好用,根本没什么反映,这时我们就需要矫正这个触摸屏
18.矫正触摸屏
a>对于linux来说我们矫正的时候直接删掉一个配置文件pointcal,重启就可以矫正了
b>而对于Android来说,似乎不像我们想的那么容易,我们打开这个配置文件发现里面就是一行数据,而我们要得到这行数据,需要的一个转换公式
c>所以我们需要一个程序讲这些转换为我么所需要的数据
//tslib移植,这个就是Android触摸屏需要的一个库
19.移植tslib 下载tslib库
a>./configure --host=arm-linux --build=i386
b>vim Android.mk //添加生成库之前LOCAL_PERLINK_MODULE:=false
c>. build/envsetup.h
d>mmm <tslib 目录>
e>cp ts.config /sytem/etc/
f>修改内核代码kernel/drivers/input/touchscreen/s3c6410.c x=ts.xp;y=ts.yp
g>make zImage
f>cp zImage /tftpboot
h>启动开发板tftp 50008000 zImage bootm 50008000 我们得到pointcal新数据,再填回内核代码中。make zImage //重复g f h
20.这样触摸屏就能用了。写一个应用程序测试led