




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、Android开源项目向博创2410实验箱上的移植 Team972010年05月结题答辩1Team97项目小组简介姓名学号项目分工角色赵瑞甲SA092254701、初始化分析2、根文件系统移植组长杨扬SA092252711、总体技术支持2、vivi修改3、Linux内核移植4、网卡驱动移植组员刘晓辉SA092254471、开发环境搭建Linux&Windows2、应用程序开发组员刘洋SA092253471、驱动移植分析2、LCD移植组员吴秋冬SA092254411、驱动移植分析2、触摸屏驱动移植组员2Team97项目小组简介需求分析知识储备开发环境搭建概要设计Linux内核及vivi源码修改应
2、用程序开发定制生成根文件系统移植网卡驱动移植LCD驱动移植触摸屏驱动赵瑞甲FCFCF杨扬CCCCFCF刘晓辉CFFCF刘洋CCCCCFC吴秋冬CCCCCF3主要内容项目概述项目意义项目步骤项目演示项目总结参考文献4项目概述掌握s3c2410开发板及ARM处理器的结构、功能和应用理解Linux内核知识熟悉Android操作系统,了解其工作原理,掌握操作系统移植工作流程熟悉Linux驱动移植相关知识熟悉Android操作系统的应用开发5项目意义Google公司于2007年 11月5日推出的基于Linux平台的开源手机操作系统,是首个为移动终端打造的真正开放和完整的移动软件。6项目意义Android
3、的应用手机领域7项目意义 Android的应用其他领域机顶盒VOIP电话KTV点唱机数字相框电视机8项目步骤准备开发环境:WindowsXP & RadHat9.0BootLoader: viviLinux内核:linux-2.6.25-android-1.0_r1.tar.gz 交叉编译工具:arm-linux-none-gnueabi目标开发板:博创S3C2410开发板9项目步骤vivi的修改移植vivi的修改移植及原理10NAND Flash 分区使用vivi重建NAND Flash MTD分区为何重分区?vivi的MTD分区表:分区前:vivi part show mtdpart in
4、fo. (6 partitions) name offset size flag - vivi: 0 x00000000 0 x00020000 0 128kparam: 0 x00020000 0 x00010000 0 64kkernel : 0 x00030000 0 x00400000 0 1Mroot : 0 x00430000 0 x00300000 4 3Muser : 0 x00730000 0 x03800000 0 59Mucos: 0 x03f30000 0 x000cc000 0 816k 11项目步骤vivi的修改移植Linux2.6的内核为何会变大?12项目步骤vi
5、vi的修改移植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
6、-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-s3c24x
7、x/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.o13项目步骤vivi的修改移植14项目步骤vivi
8、的修改移植如何使用vivi进行分区?15项目步骤vivi的修改移植修改arch/s3c2410/smdk.c,将结构体数组default_mtd_partitions修改如下:mtd_partition_t default_mtd_partitions = name: “vivi”, offset: 0, size: 0 x00020000, flag: 0 , name: param, offset: 0 x00020000, size: 0 x00010000, flag: 0 , name: kernel, offset: 0 x00030000, size: 0 x00400000,
9、flag: 0 , name: root, offset: 0 x00430000, size: 0 x00300000, flag: MF_BONFS, name: user, offset: 0 x00730000, size: 0 x03800000, flag: 0 , name: ucos, offset: 0 x03f30000, size: 0 x000cc000, flag:0 ;这里还可以修改字符数组char linux_cmd的初始值,这是vivi传递给linux内核的默认启动参数。为了灵活性,我们选择在vivi命令行中将linux内核的启动参数传递给内核。16项目步骤vi
10、vi的修改移植 vivi如何使用MTD分区表?17项目步骤vivi的修改移植MTD为raw flash设备提供了一个抽象层,它使我们可以使用同一套API来操作不同的flash设备(NAND, OneNAND, NOR, AG-AND, ECCd NOR等)vivi通过其内部的维护的flash分区表来管理flashvivi要求,在烧写flash时,使用分区名来指定烧写的目标地址 如:load flash kernel x 表示使用xmodem协议通过串口将数据下载到flash的kernel分区系统启动时,vivi会将kernel分区中的所有内容拷贝到RAM中的指定位置(0 x30008000地址
11、处,该地址由vivi中的boot_mem_base + LINUX_KERNEL_OFFSET 决定),然后跳转到该位置执行那里的代码Linux内核也维护了一张Flash MTD分区表,我们使Linux内核的分区表与vivi的保持一致,并且使用vivi将linux根文件系统烧写至flash的root分区;这样,在linux内核的启动参数中需使用root=/dev/mtdblock3告诉linux内核在3号mtd分区即root分区寻找根文件系统18项目步骤vivi的修改移植分区后:vivi part show mtdpart info. (6 partitions) name offset si
12、ze flag - vivi: 0 x00000000 0 x00020000 0 128kparam: 0 x00020000 0 x00010000 0 64kkernel : 0 x00030000 0 x00400000 0 4Mroot : 0 x00430000 0 x00300000 4 3Muser : 0 x00730000 0 x03800000 0 56Mucos: 0 x03f30000 0 x000cc000 0 816k 19项目步骤Linux内核移植20项目步骤LCD驱动移植Framebuffer框架图21项目步骤LCD驱动移植FrameBuffer框架介绍LCD
13、是图形硬件设备,Framebuffer 设备是图形硬件设备的抽象层,它描述视频硬件的帧缓冲区,提供一组非常方便的应用软件访问图形硬件的接口。在Linux系统下,FrameBuffer的主要的结构如上图所示。Linux为了开发FrameBuffer程序的方便,使用了分层结构。fbmem.c处于Framebuffer设备驱动技术的中心位置。它为上层应用程序提供系统调用,也为下一层的特定硬件驱动提供接口;那些底层硬件驱动需要用到这儿的接口来向系统内核注册它们自己。 底层的驱动的工作就是对fbmem.c中的结构体fb_info的成员变量等进行填充,并通过register_framebuffer() 函
14、数注册到名称为registered_fbFB_MAX的全局数组数组中 ,其中的数组下标 为设备的次设备号。22项目步骤LCD驱动移植调用过程23项目步骤LCD驱动移植调用过程介绍 当用户打开一个FrameBuffer设备的时,也就是打开dev目录下的设备文件fb时,将调用这里的fb_open()函数。传进来的inode就是预打开设备的设备号,包括主设备和次设备号。fb_open函数首先通过iminor()函数取得次设备号,然后查全局数组registered_fbFB_MAX得到设备的fb_info信息,而这里面存放了设备的操作函数集fb_ops。这样,我们就可以调用具体驱动来实现相关的操作24
15、项目步骤LCD驱动移植S3c2410 LCD修改步骤 修改文件: /kernel.git/arch/arm/mach-s3c2410/mach-smdk2410.c 添加头文件: #include 添加初始化参数: 实质是填充结构体s3c2410fb_mach_info 调用设置函数使参数生效: 实质将上面填充的结构体s3c2410fb_mach_info与platform设备关联起来25项目步骤触摸屏驱动移植触摸屏中断响应过程26项目步骤触摸屏驱动移植触摸屏函数调用过程27项目步骤触摸屏驱动移植触摸屏移植过程第一:我们需要修改 linux2.6.25/drivers/input/touchs
16、creen 目录下的 makefile 文件, 将触摸屏驱动链接进去第二:修改 linux2.6.25/ drivers/input/touchscreen/Kconfig ,在上面添加触摸屏驱动配置信息, 修改完成以后,在我们配置内核的时候,就会增加关系s3c2410的触摸屏配置第三:修改 linux-2.6.25/arch/arm/mach-s3c2410/mach-smdk2410.C文件 修改linux-2.6.25/ arch/arm/mach-s3c2410/devs.h 文件 修改arch/arm/mach-s3c2410/devs.c文件 修改上面3个文件的实质就是将触摸屏的一
17、些初始化参数赋给 platform_device 第四:配置内核:第五:编译内核:make zImage第六:测试在/dev/input/下生成的event0文件就是触摸屏设备驱动文件Cat event0,然后触摸触摸屏,日志上就有触摸点的x和y坐标28项目步骤触摸屏驱动移植29项目步骤根文件系统移植Linux内核启动挂载android根文件系统过程分析/arch/arm/boot/compressed/head.SStart: /vivi引导bootstraploader (0 x30008000)/arch/arm/boot/compressed/misc.cDecompressed_ke
18、rnel()/解压内核,将内核放到RAM中Call_kernel() /跳转到RAM里存放内核的地方/init/main.c Start_kernel ():/启动内核Setup_arch() /Rest_init()Init()Do_basic_setup()Prepare_namespace()/启动加载初始化结束init_post(void) /进入用户模式LINUx内核启动部分30项目步骤根文件系统移植init_post(void) 分析31项目步骤根文件系统移植从GoogleCode上获取Android源码,进入platform下编译Android源码32项目步骤根文件系统移植33项
19、目步骤根文件系统移植Linux内核启动挂载android根文件系统过程分析/zhaoAndroid/out/target/product/generic/root34项目步骤根文件系统移植Init.c分析35项目步骤根文件系统移植init进程是Android启动后系统执行的第一个名称为init的可执行程序。这个程序以一个守护进程的方式运行,它提供了以下功能: 设备管理 解析启动脚本 执行启动脚本中的基本功能 执行启动脚本中的各种功能 36项目步骤根文件系统移植37项目步骤根文件系统移植Init.rc分析38项目步骤根文件系统移植Init.rc是一个脚本文件,这个脚本被直接安装到目标系统的根文件
20、系统中,被init可执行程序解析,有一定的语法规则理解这些语法规则有利于我们很好理解到底init.rc执行了哪些命令。四大类声明组成:行为类(Actions),命令类(Commands),服务类(Services),选项类(Options).如果想要修改启动过程只需要修改init.c或者init.rc里的内容即可 39项目步骤根文件系统移植Init.rc修改40项目步骤应用程序开发功能和架构功能:展示小组内各个成员工作。程序开始运行时首先进入一个开始动画,动画是一个3D立方体不停的旋转,立方体的每面都有一张Android机器人的图片纹理,动画持续时间是10s。动画结束后,进入小组成员展示界面,
21、该界面有小组5位成员的照片,照片依次横向排列,屏幕内一次最多能看到三位成员的照片,通过拖拽图片可以移动,看到其他图片。点击每个小组成员的照片可以进入相应成员工作说明的界面,该界面对各个小组成员的工作进行了简明扼要的说明,通过返回按钮可以返回小组成员展示界面。41项目步骤应用程序开发架构:开头动画:OpenGL实现,由四个程序文件:OpenGL.java、GLView.java、GLRenderer.java、GLCube.java。OpenGL只是将GLView中定义的视图类GLView装配上并用线程控制运行时间。而GLView定义的视图类是装配了GLRenderer中定义的Renderer类
22、,Renderer类是由GLSurfaceView中定义的一个专门用于渲染3D的借口。在GLRenderer构建Renderer类时,我们必须实现3个抽象方法:public vod onDrawFrame(GL10 gl)、public void onSurfaceChanged(GL10 gl, int width, int height)、public void onSurfaceCreated(GL10 gl, EGLConfig config)。当窗口被创建时需要调用onSurfaceCreated,所以要在里面对OpenGL做一些初始化的工作,如立方体模型的初始化,光线的定义,纹理的载入等。当窗口的大小发生改变时调用onSurfaceChanged方法,在该方法中需要设置OpenGL场景的大小。最后所有的绘图操作都在onDrawFrame()方法中进行。而立方体模型的定义是在GLCube中实现的。42项目步骤应用程序开发小组成员展示界面:界面的拖动效果是由Gallery控件实现的,但需要一个容器来存放Gallery显示的图片,这里需要一个继承自BaseAdapter类的派生类来装这些图片,这个容器需要将所有要显示的图片的索引存放在一个int型数组中,然后通过set
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年成都市中考历史试题卷(含答案)
- 2025年钾钠氯电解质分析仪项目市场调查研究报告
- 教育科技在法律教育中的应用及前景
- 2025年金属排气管项目市场调查研究报告
- 2025年重型工作台项目市场调查研究报告
- 2025年酊水项目市场调查研究报告
- 2025年远程探视系统项目市场调查研究报告
- 教育机构如何培养适应数字化的领导者
- 2025年水晶后灯项目市场调查研究报告
- 我国城市居民体育消费行为的多维度解析与策略优化
- 2025年市场营销专业人才考核试题及答案
- 防范恶劣天气安全教育
- 分居协议(模版)
- 经鼻高流量吸氧在五官科麻醉气道管理中应用专家共识(2025版)解读
- 养老护理员考试模拟题与答案(附解析)
- 2025届湖北省新八校协作体高三下学期5月壮行考化学试题及答案
- 2025年武汉铁路局集团招聘(180人)笔试参考题库附带答案详解
- 2025年中考数学模拟考试卷(附带答案)
- 2025-2030年中国医用热敏纸行业市场现状供需分析及投资评估规划分析研究报告
- 梅州市大埔县客家围屋小学-携数同行静待花开-二年级下册数学家长会【课件】
- 北京市通州区2024-2025学年高二下学期期中质量检测数学试卷(原卷版+解析版)
评论
0/150
提交评论