Android在TQ2440开发板上的移植.docx
《Android在TQ2440开发板上的移植.docx》由会员分享,可在线阅读,更多相关《Android在TQ2440开发板上的移植.docx(27页珍藏版)》请在冰豆网上搜索。
Android在TQ2440开发板上的移植
Android在TQ2440开发板上的移植
Android在TQ2440开发板上的移植
一、目前进展
1.Android已经可以通过NFS在TQ2440开发板上运行
2010.03.12update:
最近自己编译了android的文件系统,并在TQ上运行了,比熊猫版的bin程序多些,基本功能已经实现,大家可以从:
下载文件系统试试,改天整理一下,发个详细的移植过程和注意事项。
2010.04.09update:
网络设置:
routeadddefaultgw192.168.1.1deveth0
setpropnet.dns1202.120.223.5
2010.05.08update:
1.使用ADB
Ubuntu:
exportADBHOST=192.168.1.101
adbkill-server
adbstart-server
adbshell
2.启动时battery导致关闭
修改:
frameworks/base/services/jni/com_android_server_BatteryService.cpp,补丁见附件。
在init.rc文件中添加
setpropbattery.fake_ac1
1.#include
2.#include
3.
4.+#include
5.+
6.+
7.#ifHAVE_ANDROID_OS
8.#include
9.#endif
10.@@-173,6+176,29@@
11.
12.staticvoidandroid_server_BatteryService_update(JNIEnv*env,jobjectobj)
13.{
14.+ staticintenable_fake_ac=-1;
15.+ if(enable_fake_ac==-1){
16.+ charvalue[PROPERTY_VALUE_MAX];
17.+ enable_fake_ac=0;
18.+ if(property_get("battery.fake_ac",value,0)){
19.+ if(0==strcmp(value,"true")||0==strcmp(value,"1")){
20.+ enable_fake_ac=1;
21.+ }
22.+ }
23.+ }
24.+if(enable_fake_ac==1){
25.+ env->SetBooleanField(obj,gFieldIds.mAcOnline,true);
26.+ env->SetBooleanField(obj,gFieldIds.mUsbOnline,false);
27.+ env->SetBooleanField(obj,gFieldIds.mBatteryPresent,true);
28.+ env->SetIntField(obj,gFieldIds.mBatteryStatus,gConstants.statusCharging);
29.+ env->SetIntField(obj,gFieldIds.mBatteryLevel,50);
30.+ env->SetIntField(obj,gFieldIds.mBatteryVoltage,4000);
31.+ env->SetIntField(obj,gFieldIds.mBatteryTemperature,20);
32.+ env->SetIntField(obj,gFieldIds.mBatteryHealth,gConstants.healthGood);
33.+ env->SetObjectField(obj,gFieldIds.mBatteryTechnology,env->NewStringUTF("Fake"));
34.+ return;
35.+}
36.+
37. setBooleanField(env,obj,AC_ONLINE_PATH,gFieldIds.mAcOnline);
38. setBooleanField(env,obj,USB_ONLINE_PATH,gFieldIds.mUsbOnline);
39. setBooleanField(env,obj,BATTERY_PRESENT_PATH,gFieldIds.mBatteryPresent);
复制代码
二、目前缺陷
1.触摸屏没有校准
2.Android中时钟停止,结束zygote进程,系统重启,时钟更新,但再次停止不动
三、移植步骤
1、移植Android内核到TQ2440开发板上
1、从上下载linux-2.6.25-android-1.0_r1.tar.gz
2、将内核解压到用户目录,如/root/kernel.git
3、进入kernel.git文件夹,如cd~/kernel.git/
4、修改arch/arm/plat-s3c24xx/common-smdk.c文件中的nandflash分区设置,如geditarch/arm/plat-s3c24xx/common-smdk.c
修改staticstructmtd_partitionsmdk_default_nand_part[]结构体为:
staticstructmtd_partitionsmdk_default_nand_part[]={
[0]={
.name ="TQ2440_uboot",
.size =0x00040000,
.offset =0x00000000,
},
[1]={
.name ="TQ2440_kernel",
.offset =0x0004C000,
.size =0x00200000,
},
[2]={
.name ="TQ2440_yaffs2",
.offset =0x0024C000,
.size =0x03DB0000,
}
};
5、在网站上下载IA32GNU/LinuxTAR。
6、将文件解压到用户目录,如/usr/local/arm/arm-2008q3
7、进入arm-2008q3/bin文件夹,如cd~/arm-2008q3/bin/
8、添加当前路径进入环境变量,如exportPATH=$PWD:
$PATH,或修改~/.bashrc文件并重新登录
9、进入内核文件夹,如cd~/kernel.git/
10、修改Makefile文件,如geditMakefile
更改ARCH和CROSS_COMPILE
#ARCH ?
=$(SUBARCH)
ARCH ?
=arm
#CROSS_COMPILE ?
=arm-eabi-
CROSS_COMPILE ?
=arm-none-gnueabi-
11、使用makes3c2410_defconfig,默认配置2410内核
12、运行makemenuconfig
(1)确保SystemType--->ARMsystemtype()中的内容为SamsungS3C2410,S3C2412,S3C2413,S3C2440,S3C2442,S3C2443
(2)确保SystemType--->S3C2410Machines--->
SMDK2410/A9M2410被勾选
(3)取消选择与Goldfish相关的内容
DeviceDrivers--->Characterdevices---><>GoldfishTTYDriver
DeviceDrivers--->Powersupplyclasssupport---><> Goldfishbatterydriver(NEW)
DeviceDrivers--->RealTimeClock---><> GOLDFISH(NEW)
DeviceDrivers--->Graphicssupport--->Supportforframebufferdevices---><> GoldfishFramebuffer
(4)选择S3C2410LCD相关的内容
DeviceDrivers--->Graphicssupport--->Supportforframebufferdevices---><*> S3C2410LCDframebuffersupport
DeviceDrivers--->Graphicssupport--->
Bootuplogo--->
StandardblackandwhiteLinuxlogo
DeviceDrivers--->Graphicssupport--->
Bootuplogo--->
Standard16-colorLinuxlogo
DeviceDrivers--->Graphicssupport--->
Bootuplogo--->
Standard224-colorLinuxlogo
(5)选中Android内核必须选项
KernelFeatures--->
UsetheARMEABItocompilethekernel
Generalsetup--->
Usefullshmemfilesystem
Generalsetup--->
EnableAndroid'sSharedMemorySubsystem
SystemType--->
SupportThumbuserbinaries
DeviceDrivers--->Android--->
Androidlogdriver
DeviceDrivers--->Android---><*>BinderIPCDriver
(6)尽量选中Android内核可选选项
DeviceDrivers--->Android--->
RAMbufferconsole
DeviceDrivers--->Android--->
Androidtimedgpiodriver
DeviceDrivers--->Android--->
Onlyallowcertaingroupstocreatesockets
(7)其余CONFIG选项,如系统支持请一并选择
CONFIG_ANDROID_POWER=y
CONFIG_ANDROID_POWER_STAT=y
CONFIG_ANDROID_POWER_ALARM=y
(可以在Kconfig文件中查找ANDROID_POWER等字段进行选择,或者直接修改.config文件)
13、退出并保存.config
二、移植LCD驱动到Linux-2.6.25内核(骤二、三、四可以参照手册,也可以参照我的其他文章)
TQ2440的LCD移植可参照本人的另外的文章:
http:
//www.arm9.org.ru/viewthread.php?
tid=3&extra=page%3D1
三、移植触摸屏驱动到Linux-2.6.25内核
TQ2440的触摸屏移植可参照本人的另外的文章:
http:
//www.arm9.org.ru/viewthread.php?
tid=4&extra=page%3D1
将256行
ts.dev->evbit[0]=BIT(EV_SYN)|BIT(EV_KEY)|BIT(EV_ABS);
ts.dev->keybit[BIT_WORD(BTN_TOUCH)]=BIT(BTN_TOUCH);
改为:
ts.dev->evbit[0]=BIT_MASK(EV_SYN)|BIT_MASK(EV_KEY)|BIT_MASK(EV_ABS);
ts.dev->keybit[BIT_WORD(BTN_TOUCH)]=BIT_MASK(BTN_TOUCH);
四、移植网卡驱动到Linux-2.6.25内核
TQ2440的网卡移植可参照本人的另外的文章:
http:
//www.arm9.org.ru/viewthread.php?
tid=5&extra=page%3D1
五、制作支持ARMv4的Android根文件系统
1、从
或
下载Android的ARMv4版本根文件
2、在/dev下增加null和console两个设备节点
mknod-m660nullc13
mknod-m660consolec51
3、在U-boot中修改启动参数init为/init,完整的命令行如:
a,开机按住空格键
b,选[0]Setthebootparameters
c,[1]SetNFSbootparameter
d,输入192.168.1.3(这个是你的pc的ip,我的是这个),回车
e,输入192.168.1.6(这个是板子ip,默认是这个),回车,输入255.255.255.0
f,再选[3]Setparameter,这个很重要,输入bootargs,回车,输入console=ttySAC0root=/dev/nfsinit=/initnfsroot=192.168.1.3:
/root_nfsip=192.168.1.6:
192.168.1.3:
192.168.1.6:
255.255.255.0:
www.arm9.org.ru:
eth0:
off
g,保存重启
注:
TQ2440自带的内核文件似乎在nfs启动上有问题,建议参照第五步驱动网卡;/root_nfs这个是你的nfs目录,设置成你自己的
4、修改/init.rc文件,去除除mounttmpfstmpfs/sqlite_stmt_journalssize=4m之外的所有mount命令
系统制作完成,现在应该可以看到漂亮的大表了。
首次启动需要创建文件,TQ2440启动还是比较快的,大约5分钟。
然后每次启动只需要1分钟。
后记:
至此,android能够驱动了,由于文件系统太大,做成文件系统有70多兆,2440只有64m空间,因此只能用nfs方式。
哪天有时间将文件系统精简一下或许能到64m一下,以后再专门写吧!
注意:
关于触摸屏,lcd,网卡的驱动上面的连接均是基于2.6.29的,而android内核目前是2.6.25,关于2.6.25的驱动可以参考TQ2440官方文档。
------------------------------------------
前面大部分是从别人的贴修改来的,最近重新修改了一下源码,键盘基本上驱动了,发几个补丁包,kernel20091022_all.patch为补丁文件,kernel20091022.tar.gz为源码文件(这个压缩包是以源码文件的形象发出的,主要是为了便于对比),andorid在tq2440上内核移植.doc为说明文件,zImage20091022为天嵌TQ2440能直接使用的kernel文件。
谢谢大家关注,最近正在整理armv4的文件系统的编译(目前使用的是网上别人做好的文件系统),整理好了再发出来,与大家共同学习!
android在天嵌2440上的移植:
1(转自中国移动开发者论坛)
2010-09-2110:
00
1.移植基本环境:
我用的还是win的平台,所以使用了虚拟机:
Vmwareworkstation6.5.0+ubuntu9.10;
交叉编译工具包EABI——4.3.3;
做好的镜像都是在win平台上使用串口烧录的用到软件DNM;
启动之类的都用超级终端进行控制。
提示:
TQ2440所附带的光盘中有很多有用的东西,建议大家看一下,所用的工具除了虚拟机及平台几乎都可以找到。
在进行正式的android系统移植时可以按照光盘中附带的“linux系统移植stepbystep”这个pdf来做一下linux的移植,基本上的步骤都差不多,了解一下我们要做什么。
接下来找一些文件了解一下android的系统架构、内核构成。
以上就是前期工作。
2.具体移植步骤:
经过分析我们知道所需完成的步骤共有三步:
内核移植、驱动移植、文件系统移植。
1.移植Android内核:
(1)、解压内核代码androidkernel.rar到虚拟机的目录下,比/opt/Embedsky/androidkernel.git
(2)、进入androidkernel.git文件夹,如cd
/opt/Embedsky/androidkernel.git/
(3)、修改arch/arm/plat-s3c24xx/common-smdk.c文件中的nandflash分区设置,如geditarch/arm/plat-s3c24xx/common-smdk.c
修改staticstructmtd_partitionsmdk_default_nand_part[]结构体为:
staticstructmtd_partitionsmdk_default_nand_part[]={
[0]={
.name
="EmbedSky_Board_uboot",
.offset
=0x00000000,
.size
=0x00040000,
},
[1]={
.name
="EmbedSky_Board_kernel",
.offset
=0x00200000,
.size
=0x00200000,
},
[2]={
.name
="EmbedSky_Board_yaffs2",
.offset
=0x00400000,
.size
=0x0FB80000,
}
};
(4)、将交叉编译工具链的压缩文件EABI_4.3.3_Embedsky_20090807.tar.bz2文件解压
(5)、进入/opt/EmbedSky/4.3.4/文件夹
(6)、添加当前路径进入环境变量,如exportPATH=$PWD:
$PATH,或修改~/.bashrc文件并重新登录
(7)、进入内核文件夹,如cd
/opt/Embedsky/androidkernel.git/
(8)、修改Makefile文件,如geditMakefile
更改ARCH和CROSS_COMPILE
ARCH
?
=arm
CROSS_COMPILE
?
=arm-linux-
(9)、使用makes3c2410_defconfig,默认配置2410内核
(10)、运行makemenuconfig
a、确保SystemType--->ARMsystemtype()中的内容为SamsungS3C2410,S3C2412,S3C2413,S3C2440,S3C2442,S3C2443
b、
确保SystemType--->S3C2410Machines--->
SMDK2410/A9M2410被勾选
c、
取消选择与Goldfish相关的内容
DeviceDrivers--->Characterdevices---><>GoldfishTTYDriver
DeviceDrivers--->Powersupplyclasssupport---><> Goldfishbatterydriver(NEW)
DeviceDrivers--->RealTimeClock---><> GOLDFISH(NEW)
DeviceDrivers--->Graphicssupport--->Supportforframebufferdevices---><> GoldfishFramebuffer
d、选择S3C2410LCD相关的内容
DeviceDrivers--->Graphicssupport--->Supportforframebufferdevices---><*> S3C2410LCDframebuffersupport
DeviceDrivers--->Graphicssupport--->
Bootuplogo--->
StandardblackandwhiteLinuxlogo
DeviceDrivers--->Graphicssupport--->
Bootuplogo--->
Standard16-colorLinuxlogo
DeviceDrivers--->Graphicssupport--->
Bootuplogo--->
Standard224-colorLinuxlogo
e、选中Android内核必须选项
KernelFeatures--