Android开源项目向ARM2410实验箱上的移植论文.docx
《Android开源项目向ARM2410实验箱上的移植论文.docx》由会员分享,可在线阅读,更多相关《Android开源项目向ARM2410实验箱上的移植论文.docx(60页珍藏版)》请在冰豆网上搜索。
Android开源项目向ARM2410实验箱上的移植论文
Android开源项目向ARM2410实验箱上的移植
学 校:
中国科学技术大学
院系:
软件学院
专 业:
软件工程
姓 名:
赵瑞甲杨扬刘晓辉刘洋吴秋冬
学 号:
SA09225SA09225271
指导教师:
孟宁
摘要
1991年ARM公司成立于英国剑桥,主要出售芯片设计技术的授权。
目前,采用ARM技术知识产权(IP)核的微处理器,即我们通常所说的ARM微处理器,已遍及工业控制、消费类电子产品、通信系统、网络系统、无线系统等各类产品市场,基于ARM技术的微处理器应用约占据了32位RISC微处理器75%以上的市场份额,ARM技术正在逐步渗入到我们生活的各个方面。
Google公司于2007年11月5日推出的基于Linux平台的开源手机操作系统Android,是首个为移动终端打造的真正开放和完整的移动软件。
由于Android的开放性和自由性,其在未来的应用必定会十分广泛。
本文介绍嵌入式系统1.Bootloader移植、2.AndroidLinux内核移植、3.Android文件系统裁剪移植和4.Android应用程序开发。
关键词:
AndroidLinux嵌入式Android应用程序
ABSTRACT
ARMwasfoundedin1991inCambridge,England.Itprimarilysellsthelicensingofchipdesigntechnology.Atpresent,theuseofARMtechnologyintellectualproperty(IP)coremicroprocessor,whichweusuallyrefertotheARMmicroprocessor,hascontrolovertheindustry,consumerelectronics,communicationsystems,networksystems,wirelesssystemsandotherkindsofMarket,ARM-basedmicroprocessortechnologyapplicationsaccountedforabout32-bitRISCmicroprocessor,accordingtomorethan75%marketshare,ARMtechnologyisgraduallyinfiltratedintoeveryaspectofourlives.
GoogleInc.onNovember5,2007launchoftheopensourceLinux-basedmobileoperatingsystemAndroid,isthefirstmobileterminaltocreateatrulyopenandcompletemobilesoftware.AstheAndroid'sopennessandfreedom,itsapplicationinthefuturewillbeveryextensive.
ThisarticledescribestheembeddedsystemBootloadertransplantation,AndroidLinuxkernelporting,AndroidandtheAndroidfilesystem,cuttingtransplantationapplicationdevelopment.
KeyWords:
Android,Linux,Embedded,AndroidApplication
第一章绪论
1.1立题背景与意义
1991年ARM公司成立于英国剑桥,主要出售芯片设计技术的授权。
目前,采用ARM技术知识产权(IP)核的微处理器,即我们通常所说的ARM微处理器,已遍及工业控制、消费类电子产品、通信系统、网络系统、无线系统等各类产品市场,基于ARM技术的微处理器应用约占据了32位RISC微处理器75%以上的市场份额,ARM技术正在逐步渗入到我们生活的各个方面。
Google公司于2007年11月5日推出的基于Linux平台的开源手机操作系统Android,是首个为移动终端打造的真正开放和完整的移动软件。
由于Android的开放性和自由性,其在未来的应用必定会十分广泛。
1.2本文的研究目的和主要工作
本文介绍嵌入式系统Bootloader移植、AndroidLinux内核移植、Android文件系统裁剪移植和Android应用程序开发。
本项目完成了Android开源项目向基于S3C2410开发板上的移植。
主要完成了以下工作:
(1)构建了以ARM平台为核心,嵌入式Linux操作系统的开发平台;
(2)完成了Bootloader移植;
(3)完成了AndroidLinux内核移植;
(4)完成了Android文件系统移植;
(5)完成了一个简单Android应用程序开发。
第二章嵌入式系统介绍
本项目基于嵌入式Linux系统,涉及到嵌入式Linux技术。
本章将介绍嵌入式系统的发展、定义及其特点。
2.1嵌入式系统概述
近年来,PC已经从高速增长时期进入平稳发展时期,其年增长率由20世纪90年代中期的35%逐年下降,单纯的PC机时代已经成为历史。
“后PC时代”,即嵌入式系统所带领的时代已经到来。
进入21世纪以来,嵌入式系统已经广泛地渗透到科学研究、工程设计、军事技术各类产业及人们日常生活的方方面面。
随着国内外各种嵌入式产品的进一步开发和推广,嵌入式技术越来越与人们生活紧密结合。
2.1.1嵌入式系统的发展
电子计算机诞生于1946年,此后计算机始终是供应在特殊的机房中、实现数值计算的大型昂贵设备。
知道20世纪70年代微处理器出现后,计算机才出现了历史性的变革。
以微处理器为核心的微型计算机凭借其体积小、价格低、可靠性高的优势,迅速走出了机房,走进了千家万户。
微型机表现出来的智能化特性备受关注,人们将微型机嵌入到对象体系中,实现了对其智能化控制,如此计算机便失去了原来的形态和通用的计算机功能。
于是把嵌入到对象体系中、实现对象体系智能化控制的计算机称作嵌入式计算机系统。
因此,嵌入式系统诞生于微型机时代,其本质是将一个计算机嵌入到一个对象体系中,这是理解嵌入式系统的根本所在。
嵌入系统的发展经历了以单片机为核心的可编程控制器形式的第一代嵌入式系统、以嵌入式CPU为基础和简单操作系统为核心的第二代嵌入式系统、以嵌入式操作系统为核心的第三代嵌入式系统以及今天的以Internet为标志的第四代嵌入式系统。
随着各行各业的应用需求不断扩大,加之计算机技术的进一步提高,未来嵌入式系统的发展有如下趋势:
(1)随着微电子技术的高速发展,芯片功能将更加强调,在体积、成本、可靠性、功耗方面必会有突破行进展。
(2)嵌入式无线通信设备的不断普及,已成为嵌入式系统应用的一个重要领域,无线技术与嵌入式系统一定会紧密结合,飞速发展。
(3)随着以太网协议应用到嵌入式领域,嵌入式系统网络与以太网之间接口,是嵌入式系统发展又一方向。
(4)随着嵌入式系统周边设备的不断增多,嵌入式应用软件的开发需求也快速递增,这使得嵌入式应用软件功能和数量也变得丰富多彩。
2.1.2嵌入式系统的定义
如果我们了解了嵌入式(计算机)系统的由来与发展,对嵌入式系统就不会产生过多的误解,而能历史地、本质地、普遍适用地定义嵌入式系统。
按照历史性、本质性、普遍性要求,嵌入式系统应定义为:
“嵌入到对象体系中的专用计算机系统”。
“嵌入性”、“专用性”与“计算机系统”是嵌入式系统的三个基本要素。
对象系统则是指嵌入式系统所嵌入的宿主系统。
根据IEEE(国际电气和电子工程师协会)的定义:
嵌入式系统是“用于控制、监视或者辅助操作机器和设备的装置”。
国内普遍认同的嵌入式系统定义为:
以应用为中心、以计算机技术为基础、软硬件可裁剪、适应应用系统对功能、可靠性、成本、体积、功耗严格要求的专用计算机系统。
由此可知,人们平常广泛使用的手机、PDA、MP3、机顶盒都属于嵌入式系统设备;而车载GPS系统、机器人也属于嵌入式系统。
嵌入式系统已经出现在人们生活的方方面面。
2.1.3嵌入式系统的特点
嵌入式系统是应用于特定环境下、面对专业领域的应用系统,一般具有以下特点:
(1)通常面向特定应用,一般都有实时要求,具有功耗低、体积小、集成度高、成本低等特点;
(2)系统内核小。
由于嵌入式系统一般是应用于小型电子装置的,系统资源相对有限,所以内核较之传统的操作系统要小得多。
(3)系统精简。
嵌入式系统一般没有系统软件和应用软件的明显区分,不要求其功能设计及实现上过于复杂,这样一方面利于控制系统成本,同时也利于实现系统安全。
(4)高实时性的系统软件(OS)是嵌入式软件的基本要求。
而且软件要求固态存储,以提高速度;软件代码要求高质量和高可靠性。
(5)可靠性与稳定性对于嵌入式系统有着重要的意义。
(6)嵌入式系统开发需要开发工具和环境。
由于其本身不具备自举开发能力,即使设计完成以后用户通常也是不能对其中的程序功能进行修改的,必须有一套开发工具和环境才能进行开发。
2.2基于ARM和Linux的嵌入式开发平台
2.3.1开发平台的选择
选择开发平台主要依据就是系统的需求,本项目的主要目的是实现无线传感器网络和嵌入式系统相结合,来实现家庭的环境等监测,在最大限度满足嵌入式家庭健康安全系统实时性、安全性、可靠性要求的同时,低成本也是本项目的主要目的之一。
今年来,以ARM为核心的嵌入式系统应用越来越广泛,技术日趋成熟,被越来越多的应用与工业、服务业等领域。
低功耗、体积小、价格低等特点,使得ARM系列处理器更适合做家庭的控制平台。
在这里我们选用基于ARM9内核的处理器和LINUX操作系统作为本项目的嵌入式开发平台。
ARM9处理器包括ARM920T、ARM922T和ARM940T,主要用于手持设备、视频电话、PDA、机顶盒、家用网关等产品中。
与ARM7处理器相比,ARM9处理器具有以下特点:
5级流水线、采用哈佛结构、引入高速缓存和写缓存、支持MMU等显著优点。
操作系统方面,LINUX是应用最广泛的操作系统,集成了很多网络协议,更重要的是在2.6.X后的内核中配置了FTDI的USB转串口驱动,这对于我们的ARM平台和网关通信提供很大的便利。
综上考虑,本项目中我们选用了博创公司的开发板UP-NETARM2410-S,该开发板的硬件配置如表2.1所示。
采用了三星公司的基于ARM920T结构的处理器,该处理器完全能够满足本系统的各项需求。
该平台还配有JTAG仿真器和串口通信线等部件,这就大大节省了开发时间。
表2.1UP-NETARM2410-S硬件配置
2.3.2Linux操作系统
嵌入式Linux是标准Linux经过小型化裁剪处理之后的专用Linux操作系统,能够固化于容量只有几KB或者几MB的存储器芯片或单片机中,适合于特定嵌入式应用场合。
目前已经开发成功的嵌入式系统大约有一半使用的都是嵌入式Linux。
Linux系统具有鲜明的层次结构且内核完全开放,Linux有许多体积小性能高的微内核和系统组成,这样用户就可以根据自己的应用需要容易地对内核进行裁剪,在低成本的前提下,设计和开发满足自己需求的嵌入式系统。
Linux还具有强大的网络功能,可以利用Linux的网络协议栈开发出嵌入式TCP/IP网络协议栈。
Linux还具有一套完整的工具链,容易自行建立嵌入式系统的开发环境和交叉运行环境,还可已使用内核调试器来进行操作系统内核调试。
Linux内核有五个主要的子系统构成。
图2.3所示。
他们分别是进程调度、内存管理、虚拟文件系统、网络接口、进程间通信。
下面做简单介绍。
(1)进程调度:
控制着进程对CPU的访问,当需要选择下一个进程运行时,由调度程序选择最值得运行的进程。
(2)内存管理:
许多个进程安全地共享主内存区域。
内存管理从逻辑上可
以分为硬件无关的部分和硬件相关的部分。
硬件无关的部分提供了进程的映射和虚拟内存的对换:
硬件相关的部分为内存管理硬件提供了虚拟接口。
(3)虚拟文件系统:
藏了各种不同硬件的具体细节,为所有的设备提供了统一的接口。
虚拟文件系统可分为逻辑文件系统和设备驱动程序。
(4)网络接口:
供了对各种网络标准协议的存取和各种网络硬件的支持。
(5))进程间的通信:
持进程间的各种通信机制。
图2.1Linux内核结构
2.3本章小结
本章首先简单的介绍了嵌入式系统的概念及其特点,然后根据本项目对硬件和软件的需求,确定了基于S3C2410处理器的UP-NETARM2410-S开发板和Linux操作系统的嵌入式平台,并对Linux内核的体系结构进行了简单介绍。
第三章嵌入式硬件系统及其工作原理
3.1处理器主控模块
本项目中使用的硬件平台是博创公司开发的UP-NETARM2410-S开发板,UP-NETARM2410-S的CPU为ARM920T内核的三星S3C2410芯片,由于有MMU可以运行标准的ARM-Linux内核。
3.1.1开发板的硬件参数
S3C2410X芯片集成了大量的功能单元,包括以下特性:
·内部1.8V,存储器3.3V,外部IO3.3V,16KB数据CACH,16KB指令CACH,MMU;
·内置外部存储器控制器(SDRAM控制和芯片选择逻辑);
·LCD控制器(最高4K色STN和256K彩色TFT),一个LCD专用DMA;
·4路带外部请求线的DMA;
·三个通用异步串行端口(IrDA1.0,16-ByteTxFIFO,and16-ByteRxFIFO),2通道SPI;
·一个多主IIC总线,一个IIS总线控制器;
·SD主接口版本1.0和多媒体卡协议版本2.11兼容;
·2个USBHOST,一个USBDEVICE(VER1.1);
·4个PWM定时器和一个内部定时器;
·看门狗定时器;
·117个通用IO;
·24个外部中断;
·电源控制模式:
标准、慢速、休眠、掉电;
·8通道10位ADC和触摸屏接口;
·带日历功能的实时时钟;
·芯片内置PLL;
·设计用于手持设备和通用嵌入式系统;
·16/32位RISC体系结构,使用ARM920TCPU核的强大指令集;
·ARM带MMU的先进的体系结构支持WINCE、EPOC32、LINUX;
·指令缓存(Cache)、数据缓存、写缓冲和物理地址TAGRAM,减小了对主存储器带宽
·和性能的影响;
·ARM920TCPU核支持ARM调试的体系结构;
·内部先进的位控制器总线(AMBA2.0,AHB/APB).
S3C2410X芯片结构图如图4.1所示:
图3.1S3C2410X芯片结构图
3.1.2开发板的地址资源映射
下面分别介绍开发板的内存空间映射:
(1)NANDFLASH
系统的NANDFLASH选用SAMSUNG公司的K9F5608UOB,64M。
(3)SDRAM
系统配置两片32MB的HY57V561620芯片,地址空间为:
Ox30000000—0x34000000。
开发板采用两片半字(half-word)SDRAM器件共同组成一个32位数据宽度的SDRAM系统,提高了其与CPU的通信效率。
(4)以太网卡
采用AX88796片,工作方式为I/O模式。
3.2Linux下串口通信原理
串口是计算机上一种非常通用设备通信的协议(不要与通用串行总线UniversalSerialBus或者USB混淆)。
大多数计算机包含两个基于RS232的串口。
串口同时也是仪器仪表设备通用的通信协议;很多GPIB兼容的设备也带有RS-232口。
同时,串口通信协议也可以用于获取远程采集设备的数据。
串口通信的概念非常简单,串口按位(bit)发送和接收字节。
尽管比按字节(byte)的并行通信慢,但是串口可以在使用一根线发送数据的同时用另一根线接收数据。
它很简单并且能够实现远距离通信。
典型地,串口用于ASCII码字符的传输。
通信使用3根线完成:
(1)地线,
(2)发送,(3)接收。
由于串口通信是异步的,端口能够在一根线上发送数据同时在另一根线上接收数据。
其他线用于握手,但是不是必须的。
串口通信最重要的参数是波特率、数据位、停止位和奇偶校验。
3.2.1异步串行通信及其协议
异步通信以一个字符为传输单位,通信中两个字符间的时间间隔是不固定的,然而在同一个字符中的两个相邻位代码间的时间间隔是固定的。
通信协议:
是指通信双方约定的一些规则。
在使用异步串口传送一个字符的信息时,对资料格式有如下约定:
规定有空闲位、起始位、资料位、奇偶校验位、停止位。
异步串行通讯的时序,如图4.7所示。
图3.2异步串行通信时序
其中各位的意义如下:
起始位:
先发出一个逻辑”0”信号,表示传输字符的开始。
资料位:
紧接着起始位之后。
资料位的个数可以是4、5、6、7、8等,构成一个字符。
通常采用ASCII码。
从最低位开始传送,靠时钟定位。
奇偶校验位:
资料位加上这一位后,使得“1”的位数应为偶数(偶校验)或奇数(奇校验),以此来校验资料传送的正确性。
停止位:
它是一个字符数据的结束标志。
可以是1位、1.5位、2位的高电平。
空闲位:
处于逻辑“1”状态,表示当前线路上没有资料传送。
波特率:
是衡量资料传送速率的指针。
表示每秒钟传送的二进制位数。
例如资料传送速率为120字符/秒,而每一个字符为10位,则其传送的波特率为10×120=1200字符/秒=1200波特。
3.2.2串行接口标准
串行接口标准:
指的是计算机或终端(资料终端设备DTE)的串行接口电路与调制解调器MODEM等(数据通信设备DCE)之间的连接标准。
RS-232C是一种标准接口,D型插座,采用25芯引脚或9芯引脚的连接器,如图4.8所示。
图3.325引脚串行接口图
3.3.3S3C2410内置的UART控制器
S3C2410内部具有3个独立的UART控制器,每个控制器都可以工作在Interrupt(中断)模式或DMA(直接内存访问)模式,也就是说UART控制器可以CPU与UART控制器传送资料的时候产生中断或DMA请求。
并且每个UART均具有16字节的FIFO(先入先出寄存器),支持的最高波特率可达到230.4Kbps
图4.9是S3C2410内部UART控制器的结构图.
图3.4S3C2410内部UART控制器的结构图
3.2.4Linux下串口操作
Linux操作系统从一开始就对串行口提供了很好的支持。
在Linux中,所有的设备文件一般都位于/dev下,其中串口一、串口二对应的设备名称依次为/dev/ttyS0、/dev/ttyS1,可以通过查看/dev下的文件得以确认。
在Linux下对设备的操作方法与对文件的操作方法是一样的,因为Linux系统把所有的设备都看作文件。
所以对串口的操作就可以使用简单的open、read、write等函数完成。
唯一不同的是要在串口操作之前,首先要对串口其他参数进行配置。
3.2本章小结
本章详细介绍了系统的硬件设计,然后详细介绍了串口通信的一般原理和标准,以及Linux下对串口的操作方法。
第四章Android开源项目移植
在介绍了硬件资源后,就开始软件移植了。
本项目选用Bootloadervivi,使用AndroidLinux内核,版本是2.6.25。
4.1Bootloader移植
这里移植vivi并使用vivi对NandFlash进行分区。
4.1.1为何重分区
vivi的MTD分区表:
分区前:
vivi>partshow
mtdpartinfo.(6partitions)
nameoffsetsizeflag
-------------------------
vivi:
0x000000000x000200000128k
param:
0x000200000x00010000064k
kernel:
0x000300000x0040000001M
root:
0x004300000x0030000043M
user:
0x007300000x03800000059M
ucos:
0x03f300000x000cc0000816k
开发板自带的vivi的kernel分区只有1M,而我们的内核有1.7M,从而必须将NandFlash重分区以适应我们的内核。
4.1.2内核为何会变大
make时加上V=1参数,可得vmlinux的链接命令如下:
/home/yang/yangdroid/prebuilt/linux-x86/toolchain/arm-eabi-4.2.1/bin/arm-eabi-ld
-EL-p--no-undefined-X-ovmlinux-Tarch/arm/kernel/vmlinux.lds
arch/arm/kernel/head.o
arch/arm/kernel/init_task.o
init/built-in.o
--start-group
usr/built-in.o
arch/arm/kernel/built-in.o
arch/arm/mm/built-in.o
arch/arm/common/built-in.o
arch/arm/mach-s3c2410/built-in.o
arch/arm/mach-s3c2400/built-in.o
arch/arm/mach-s3c2412/built-in.o
arch/arm/mach-s3c2440/built-in.o
arch/arm/mach-s3c2442/built-in.o
arch/arm/mach-s3c2443/built-in.o
arch/arm/nwfpe/built-in.o
arch/arm/plat-s3c24xx/built-in.o
kernel/built-in.omm/built-in.o
fs/built-in.o
ipc/built-in.o
security/built-in.o
crypto/built-in.o
block/built-in.o
arch/arm/lib/lib.a
lib/lib.a
arch/arm/lib/built-in.o
lib/built-in.o
drivers/built-in.o
sound/built-in.o
net/built-in.o
--end-group
.tmp_kallsyms2.o
将上述命令转换为图形可得内核源码根目录下vmlinux的构成:
图4.1vmlinux构成
上图还显示了vmlinux中个功能模块的相对大小。
2.6的内核比2.4的增加了许多内核特性,从而kernel大小增加;保留