




免费预览已结束,剩余10页可下载查看
下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
ARM架构的Android操作系统开发概述Android是一种以Linux为基础的开放源代码操作系统,主要使用于便携设备。随着近几年智能手机的流行,Android系统越来越受到欢迎。Android操作系统以其开放性和良好的移植性自其诞生以来就受到广大嵌入式爱好者的关注。ARM公司于1991年在英国剑桥成立,主要出售芯片设计技术的授权。目前,采用ARM技术知识产权(IP)核的微处理器,即我们通常所说的ARM微处理器,已遍及工业控制、消费类电子产品、通信系统、网络系统、无线系统等各类产品市场,基于ARM技术的微处理器应用约占据了32位RISC微处理器75以上的市场份额,ARM技术正在逐步渗入到我们生活的各个方面。本文介绍嵌入式系统 1.Bootloader移植、 2.Android Linux内核移植 和 驱动移植ARM平台介绍2.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.1 UP-NETARM2410-S硬件配置2.2 Linux操作系统嵌入式Linux是标准Linux经过小型化裁剪处理之后的专用Linux操作系统,能够固化于容量只有几KB或者几MB的存储器芯片或单片机中,适合于特定嵌入式应用场合。目前已经开发成功的嵌入式系统大约有一半使用的都是嵌入式Linux。Linux系统具有鲜明的层次结构且内核完全开放,Linux有许多体积小性能高的微内核和系统组成,这样用户就可以根据自己的应用需要容易地对内核进行裁剪,在低成本的前提下,设计和开发满足自己需求的嵌入式系统。Linux还具有强大的网络功能,可以利用Linux的网络协议栈开发出嵌入式TCP/IP网络协议栈。Linux还具有一套完整的工具链,容易自行建立嵌入式系统的开发环境和交叉运行环境,还可已使用内核调试器来进行操作系统内核调试。Linux内核有五个主要的子系统构成。图2.3 所示。他们分别是进程调度、内存管理、虚拟文件系统、网络接口、进程间通信。下面做简单介绍。(1) 进程调度:控制着进程对CPU的访问,当需要选择下一个进程运行时,由调度程序选择最值得运行的进程。(2) 内存管理:许多个进程安全地共享主内存区域。内存管理从逻辑上可以分为硬件无关的部分和硬件相关的部分。硬件无关的部分提供了进程的映射和虚拟内存的对换:硬件相关的部分为内存管理硬件提供了虚拟接口。(3) 虚拟文件系统:藏了各种不同硬件的具体细节,为所有的设备提供了统一的接口。虚拟文件系统可分为逻辑文件系统和设备驱动程序。(4) 网络接口:供了对各种网络标准协议的存取和各种网络硬件的支持。(5) )进程间的通信:持进程间的各种通信机制。图2.1 Linux内核结构开发过程本移植项目选用Bootloader vivi , 使用 Android Linux 内核,版本号是.1Bootloader移植移植vivi并使用vivi对Nand Flash进行分区。2.1.1 重分区vivi的MTD分区表:分区前:vivi part show mtdpart info. (6 partitions) name offset size flag - vivi: 0x00000000 0x00020000 0 128kparam: 0x00020000 0x00010000 0 64kkernel: 0x00030000 0x00400000 0 1Mroot: 0x00430000 0x00300000 4 3Muser : 0x00730000 0x03800000 0 59Mucos: 0x03f30000 0x000cc000 0 816k开发板自带的vivi的kernel分区只有1M,而我们的内核有1.7M,从而必须将Nand Flash重分区以适应我们的内核。2.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 -o vmlinux -T arch/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.o mm/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.1 vmlinux构成上图还显示了vmlinux中个功能模块的相对大小。2.6的内核比2.4的增加了许多内核特性,从而kernel大小增加;保留了内核对多文件系统类型的支持,fs大小增加;增加了Android相关驱动,drivers大小增加;内核未进行适当剪裁,链接了一些无用模块和驱动。2.1.3 使用vivi进行分区 修改arch/s3c2410/smdk.c,将结构体数组default_mtd_partitions修改如下: mtd_partition_t default_mtd_partitions = name: vivi, offset: 0, size: 0x00020000, flag: 0 , name: param, offset: 0x00020000, size: 0x00010000, flag: 0 , name: kernel, offset: 0x00030000, size: 0x00400000, flag: 0 , name: root, offset: 0x00430000, size: 0x00300000, flag: MF_BONFS, name: user, offset: 0x00730000, size: 0x03800000, flag: 0 , name: ucos, offset: 0x03f30000, size: 0x000cc000, flag:0 ;2.1.4 vivi的烧写以上是对vivi源代码的修改。接下来的工作是把编译vivi并把vivi烧写到博创开发板。烧写的基本步骤如下所示:在烧写vivi的过程中要确定并口于JTAG相连接,也要保证开发板的电源打开。/烧写vivi或者uboot使用的是Jtag,烧写到Nor flash。在此后出现的要求三次输入参数,第一次是让选择Flash,选0,然后回车。第二次是选择JTAG对flash的两种功能,也选0,然后回车。第三次是让选择起始地址,选0,然后回车,等待大约35分钟的烧写时间。烧写vivi完成后的界面如下图5.2所示:图4.2 烧写vivi界面然后选择2退出烧写界面。2.2 Android Linux内核移植2.2.1 添加MTD分区表信息修改arch/arm/plat-s3c2410xx/common-smdk.c,静结构体数组smdk_default_part修改如下: /这个是kernel下的arch目录static struct mtd_partition smdk_default_nand_part = 0 = .name=vivi, .size=0x00020000, .offset=0, 1 = .name=param, .size=0x00010000, .offset=0x00020000, , 2 = .name=kernel, .size=0x00400000, .offset=0x00030000, ,3 = .name=root, .size=0x00300000, offset: 0x00430000, ,4 = .name=user, .size=0x03800000, .offset=0x00730000, ,5 = .name=ucos, .size=0x000cc000, .offset=0x03f30000, ; 2.2.2 配置内核在终端输入:make menuconfig。 在配置内核前,先拷贝s3c2410开发板的默认配置到内核根目录下,以简化配置过程。/把开发板的config拷贝到内核的根目录下,名称为.config.#pwd/home/tekkaman/working/kernel/linux-# cp arch/arm/configs/s3c2410_defconfig .config# make menuconfig以下是在 s3c2410_defconfig 基础上要配置的选项General setup - * Configure standard kernel features (for small systems) - System Type - S3C2410 Machines - * SMDK2410/A9M2410 只留下这项“N”掉 S3C2412 Machines - S3C2440 Machines - 和 S3C2443 Machines - 里的所有选项。Device Drivers -“N”掉 Parallel port support - 里的所有选项。Plug and Play support -“N”掉里所有选项Network device support - Ethernet (10 or 100Mbit) -“N”掉 DM9000 support和 Generic Media Independent Interface device support * Other ISA cards NE2000/NE1000 support“N”掉 Ethernet (1000 Mbit) -和 Ethernet (10000 Mbit) -USB Network Adapters - Multi-purpose USB Networking Framework MMC/SD card support -Real Time Clock -“N”掉 Set system time from RTC on startup and resumeNetwork File Systems - NFS file system support选上以下选项,因为在挂载NFS时可能出现protocol不支持的情况 *Provide NFSv3 client support *Provide client support for the NFSv3 ACL protocol extension *Provide NFSv4 client support (EXPERIMENTAL) * Allow direct I/O on NFS files NFS server support *Provide NFSv3 server support *Provide server support for the NFSv3 ACL protocol extension *Provide NFSv4 server support (EXPERIMENTAL) Provide NFS server over TCP support * Root file system on NFS2.3 移植触摸屏驱动2.3.1 触摸屏中断响应过程2.3.2 S3C2410 模数转换器(ADC)及触摸屏控制器3C2410内置1个8信道的10bit模数转换器(ADC),该ADC能以500KSPS的采样资料将外部的模拟信号转换为10bit分辩率的数字量。同时ADC部分能与CPU的触摸屏控制器协同工作,完成对触摸屏绝对地址的测量。下图是ADC及触摸屏控制器部分的逻辑示意图(图1)在S3C2410的ADC以及触摸屏控制器的基础上外接触摸屏的示意图(图2)2.3.3 ADC及触摸屏控制器的工作模式:1. ADC普通转换模式(Normal Converson Mode) 普通转换模式(AUTO_PST=0,XY_PST=0)是用来进行一般的ADC转换之用的,例如通过ADC测量电池电压等等。2. 独立X/Y轴坐标转换模式(Separate X/Y Position Conversion Mode)独立X/Y轴坐标转换模式其实包含了X轴模式和Y轴模式2种模式。首先进行X轴的坐标转换(AUTO_PST=0,XY_PST=1),X轴的转换资料会写到ADCDAT0寄存器的XPDAT中,等待转换完成后,触摸屏控制器会产生相应的中断。然后进行Y轴的坐标转换(AUTO_PST=0,XY_PST=2),Y轴的转换资料会写到ADCDAT1寄存器的YPDAT中,等待转换完成后,触摸屏控制器会产生相应的中断。3. 自动X/Y轴坐标转换模式(Auto X/Y Position Conversion Mode) 自动X/Y轴坐标转换模式(AUTO_PST=1,XY_PST=0)将会自动地进行X轴和Y轴的转换操作,随后产生相应的中断。 4. 中断等待模式(Wait for InterruptMode) 在系统等待“Pen Down”,即触摸屏按下的时候,其实是处于中断等待模式。一旦被按下,实时产生“INT_TC”中断信号。每次发生此中断都,X轴和Y轴坐标转换资料都可以从相应的资料寄存器中读出。 5. 闲置模式(Standby Mode) 在该模式下转换资料寄存器中的值都被保留为上次转换时的资料。2.3.4 几个重要的存储器:1. ADC控制寄存器(ADCCON):配置选择的模拟通道,启动A/D转换,A/D转换器欲分频因子的设置;2. ADC触摸屏控制寄存器(ADCTSC):用来配置自动X/Y位置转换模式和等待中断模式,(配置XP,XM,YP,YM来实现X位置转换和Y位置转换)3. ADC转换数据寄存器(ADCDAT0,ADCDAT1):用来存取A/D转换后的数据。2.3.5 触摸屏移植步骤:将s3c2410_ts.c 文件拷到 linux2.6.25/drivers/input/touchscreen 目录下,头文件则拷到源码包的include/asm/arch下, 第一:我们需要修改 linux2.6.25/drivers/input/touchscreen 目录下的 makefile 文件,在文件的最后添加 : obj-$(CONFIG_TOUCHSCREEN_S3C2410) += s3c2410_ts.o 第二:我们需要修改 linux2.6.25/ drivers/input/touchscreen/Kconfig 中添加: config TOUCHSCREEN_S3C2410 tristate Samsung S3C2410 touchscreen input driver depends on ARCH_SMDK2410 & INPUT & INPUT_TOUCHSCREEN select SERIO help Say Y here if you have the s3c2410 touchscreen. If unsure, say N. To compile this driver as a module, choose M here: the module will be called s3c2410_ts. config TOUCHSCREEN_S3C2410_DEBUG boolean Samsung S3C2410 touchscreen debug messages depends on TOUCHSCREEN_S3C2410 help Select this if you want debug messages 修改完成以后,在我们配置内核的时候,就会增加关系s3c2410的触摸屏配置,我们选择上这些配置就可以把驱动增加进去了 Device drivers - Input device support - Touchscreens - Samsung S3C2410 touchscreen input driver Samsung s3c2410 touchscreen debug message 第三:在 /linux-2.6.25/arch/arm/mach-s3c2410/mach-smdk2410.c, 中增加如下内容: #include static struct s3c2410_ts_mach_info s3c2410_ts_cfg _initdata = .delay = 10000, .presc = 49, .oversampling_shift = 2, ; 在smdk2410_devices结构中,添加: &s3c_device_ts, 在smdk2410_map_io函数中添加: set_s3c2410ts_info(&s3c2410_ts_cfg); 第四:在 /linux-2.6.25/ arch/arm/mach-s3c2410/devs.h 文件中添加: extern struct platform_device s3c_device_ts; 第五:在arch/arm/mach-s3c2410/devs.c文件中添加如下几行: /* Touchscreen */ #include static struct s3c2410_ts_mach_info s3c2410ts_info; void _init set_s3c2410ts_info(struct s3c2410_ts_mach_info *hard_s3c2410ts_info) memcpy(&s3c2410ts_info,hard_s3c2410ts_info,sizeof(struct s3c2410_ts_mach_info); EXPORT_SYMBOL(set_s3c2410ts_info); struct platform_device s3c_device_ts = .name = s3c2410-ts, .id = -1, .dev = .
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 离婚协议解除后赡养费支付及财产分配执行协议
- 离婚协议签订前夫妻共同债务确认谈话笔录
- 创业孵化器租赁合同含中介及创业辅导服务范本
- 绿色金融公私转账借款及环境保护责任合同
- 离婚协议书:财产分割、债务承担及子女抚养权协议
- 养殖场土地租赁与农业科技园区建设合同
- 生物医药研发特殊劳动关系科研人员合作协议
- 矿山生态修复治理手册
- 职业教育专业实训教学标准制定
- 养殖业合作社运作制度
- 2025年职业卫生标准试题及答案
- 创新社区治理新路径
- 2025-2030中国智慧城市建设项目投资规模与运营效益评估报告
- 校园常见传染病防控知识课件
- 2025部编版八年级历史上册 第二单元 早期现代化的初步探索和民族危机加剧(大单元教学设计)
- 药械知识培训计划课件
- 2025-2026学年人教版(2024)初中数学七年级上册教学计划及进度表
- 2023年度中国人民抗日战争纪念馆招聘4人笔试备考题库及答案解析
- T∕CSBME 002-2017 医用非血管内导管弯曲性能试验方法
- 面试求职表登记表
- 化工厂拆除施工方案
评论
0/150
提交评论