Android在TQ2440开发板上的移植.docx

上传人:b****5 文档编号:7651345 上传时间:2023-01-25 格式:DOCX 页数:27 大小:29.99KB
下载 相关 举报
Android在TQ2440开发板上的移植.docx_第1页
第1页 / 共27页
Android在TQ2440开发板上的移植.docx_第2页
第2页 / 共27页
Android在TQ2440开发板上的移植.docx_第3页
第3页 / 共27页
Android在TQ2440开发板上的移植.docx_第4页
第4页 / 共27页
Android在TQ2440开发板上的移植.docx_第5页
第5页 / 共27页
点击查看更多>>
下载资源
资源描述

Android在TQ2440开发板上的移植.docx

《Android在TQ2440开发板上的移植.docx》由会员分享,可在线阅读,更多相关《Android在TQ2440开发板上的移植.docx(27页珍藏版)》请在冰豆网上搜索。

Android在TQ2440开发板上的移植.docx

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--

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 高等教育 > 艺术

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1