您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 项目/工程管理 > android开源项目向arm2410实验箱上的移植
Android开源项目向博创2410实验箱上的移植——Team972010年05月结题答辩Team97项目小组简介姓名学号项目分工角色赵瑞甲SA092254701、初始化分析2、根文件系统移植组长杨扬SA092252711、总体技术支持2、vivi修改3、Linux内核移植4、网卡驱动移植组员刘晓辉SA092254471、开发环境搭建Linux&&Windows2、应用程序开发组员刘洋SA092253471、驱动移植分析2、LCD移植组员吴秋冬SA092254411、驱动移植分析2、触摸屏驱动移植组员Team97项目小组简介需求分析知识储备开发环境搭建概要设计Linux内核及vivi源码修改应用程序开发定制生成根文件系统移植网卡驱动移植LCD驱动移植触摸屏驱动赵瑞甲FCFCF杨扬CCCCFCF刘晓辉CFFCF刘洋CCCCCFC吴秋冬CCCCCF主要内容♦项目概述♦项目意义♦项目步骤♦项目演示♦项目总结♦参考文献项目概述♦掌握s3c2410开发板及ARM处理器的结构、功能和应用♦理解Linux内核知识♦熟悉Android操作系统,了解其工作原理,掌握操作系统移植工作流程♦熟悉Linux驱动移植相关知识♦熟悉Android操作系统的应用开发项目意义♦Google公司于2007年11月5日推出的基于Linux平台的开源手机操作系统,是首个为移动终端打造的真正开放和完整的移动软件。项目意义♦Android的应用—手机领域项目意义Android的应用—其他领域♦机顶盒♦VOIP电话♦KTV点唱机♦数字相框♦电视机项目步骤——准备♦开发环境:WindowsXP&RadHat9.0♦BootLoader:vivi♦Linux内核:linux-2.6.25-android-1.0_r1.tar.gz♦交叉编译工具:arm-linux-none-gnueabi♦目标开发板:博创S3C2410开发板项目步骤——vivi的修改移植vivi的修改移植及原理NANDFlash分区使用vivi重建NANDFlashMTD分区♦为何重分区?vivi的MTD分区表:分区前:vivipartshowmtdpartinfo.(6partitions)nameoffsetsizeflag-------------------------vivi:0x000000000x000200000128kparam:0x000200000x00010000064kkernel:0x000300000x0040000001Mroot:0x004300000x0030000043Muser:0x007300000x03800000059Mucos:0x03f300000x000cc0000816k项目步骤——vivi的修改移植Linux2.6的内核为何会变大?项目步骤——vivi的修改移植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.ldsarch/arm/kernel/head.oarch/arm/kernel/init_task.oinit/built-in.o--start-groupusr/built-in.oarch/arm/kernel/built-in.oarch/arm/mm/built-in.oarch/arm/common/built-in.oarch/arm/mach-s3c2410/built-in.oarch/arm/mach-s3c2400/built-in.oarch/arm/mach-s3c2412/built-in.oarch/arm/mach-s3c2440/built-in.oarch/arm/mach-s3c2442/built-in.oarch/arm/mach-s3c2443/built-in.oarch/arm/nwfpe/built-in.oarch/arm/plat-s3c24xx/built-in.okernel/built-in.omm/built-in.ofs/built-in.oipc/built-in.osecurity/built-in.ocrypto/built-in.oblock/built-in.oarch/arm/lib/lib.alib/lib.aarch/arm/lib/built-in.olib/built-in.odrivers/built-in.osound/built-in.onet/built-in.o--end-group.tmp_kallsyms2.o项目步骤——vivi的修改移植项目步骤——vivi的修改移植如何使用vivi进行分区?项目步骤——vivi的修改移植修改arch/s3c2410/smdk.c,将结构体数组default_mtd_partitions修改如下:mtd_partition_tdefault_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}};这里还可以修改字符数组charlinux_cmd的初始值,这是vivi传递给linux内核的默认启动参数。为了灵活性,我们选择在vivi命令行中将linux内核的启动参数传递给内核。项目步骤——vivi的修改移植vivi如何使用MTD分区表?项目步骤——vivi的修改移植MTD为rawflash设备提供了一个抽象层,它使我们可以使用同一套API来操作不同的flash设备(NAND,OneNAND,NOR,AG-AND,ECC‘dNOR等)vivi通过其内部的维护的flash分区表来管理flashvivi要求,在烧写flash时,使用分区名来指定烧写的目标地址如:loadflashkernelx表示使用xmodem协议通过串口将数据下载到flash的kernel分区系统启动时,vivi会将kernel分区中的所有内容拷贝到RAM中的指定位置(0x30008000地址处,该地址由vivi中的boot_mem_base+LINUX_KERNEL_OFFSET决定),然后跳转到该位置执行那里的代码Linux内核也维护了一张FlashMTD分区表,我们使Linux内核的分区表与vivi的保持一致,并且使用vivi将linux根文件系统烧写至flash的root分区;这样,在linux内核的启动参数中需使用root=/dev/mtdblock3告诉linux内核在3号mtd分区即root分区寻找根文件系统项目步骤——vivi的修改移植分区后:vivipartshowmtdpartinfo.(6partitions)nameoffsetsizeflag-------------------------vivi:0x000000000x000200000128kparam:0x000200000x00010000064kkernel:0x000300000x0040000004Mroot:0x004300000x0030000043Muser:0x007300000x03800000056Mucos:0x03f300000x000cc0000816k项目步骤——Linux内核移植项目步骤——LCD驱动移植♦Framebuffer框架图项目步骤——LCD驱动移植FrameBuffer框架介绍♦LCD是图形硬件设备,Framebuffer设备是图形硬件设备的抽象层,它描述视频硬件的帧缓冲区,提供一组非常方便的应用软件访问图形硬件的接口。♦在Linux系统下,FrameBuffer的主要的结构如上图所示。Linux为了开发FrameBuffer程序的方便,使用了分层结构。fbmem.c处于Framebuffer设备驱动技术的中心位置。它为上层应用程序提供系统调用,也为下一层的特定硬件驱动提供接口;那些底层硬件驱动需要用到这儿的接口来向系统内核注册它们自己。♦底层的驱动的工作就是对fbmem.c中的结构体fb_info的成员变量等进行填充,并通过register_framebuffer()函数注册到名称为registered_fb[FB_MAX]的全局数组数组中,其中的数组下标为设备的次设备号。项目步骤——LCD驱动移植♦调用过程项目步骤——LCD驱动移植♦调用过程介绍当用户打开一个FrameBuffer设备的时,也就是打开dev目录下的设备文件fb时,将调用这里的fb_open()函数。传进来的inode就是预打开设备的设备号,包括主设备和次设备号。fb_open函数首先通过iminor()函数取得次设备号,然后查全局数组registered_fb[FB_MAX]得到设备的fb_info信息,而这里面存放了设备的操作函数集fb_ops。这样,我们就可以调用具体驱动来实现相关的操作项目步骤——LCD驱动移植♦S3c2410LCD修改步骤修改文件:/kernel.git/arch/arm/mach-s3c2410/mach-smdk2410.c添加头文件:#includeasm/arch/fb.h添加初始化参数:实质是填充结构体s3c2410fb_mach_info调用设置函数使参数生效:实质将上面填充的结构体s3c2410fb_mach_info与platform设备关联起来项目步骤——触摸屏驱动移植♦触摸屏中断响应过程项目步骤——触摸屏驱动移植♦触摸屏函数调用过程项目步骤——触摸屏驱动移植♦触摸屏移植过程♦第一:我们需要修改linux2.6.25/drivers/input/touchscreen目录下的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个文件的实质就是将触摸屏的一些初始化参数赋给platform_device♦第四:配置内核:♦第五:编译内核:makezImage♦第六:测试♦在/dev/input/下生成的event0文件就是触摸屏设备驱动文件♦Catevent0,然后触摸触摸屏,日志上就有触摸点的x和y坐标项目步骤——触摸屏驱动移植项目步骤——根文件系统移植♦Linux内核启动挂载android根文件系统过程分析/arch/arm/boot/compressed/head.SStart://vivi引导bootstraploader(0x30008000)/arch/arm/boot/compressed/misc.cDecompressed_kernel()//解压内核,将内核放到RAM中Call_kernel()//跳转到RAM里
本文标题:android开源项目向arm2410实验箱上的移植
链接地址:https://www.777doc.com/doc-751006 .html