280 likes | 482 Views
Android 开源项目向博创 2410 实验箱上的移植. 结题答辩. 指导老师:孟宁. 小组成员. 责任矩阵. 报告内容. 项目概述 设计目标 设计思路 移植过程 重点和难点 项目总结 参考文献. 项目概述.
E N D
Android开源项目向博创2410实验箱上的移植 结题答辩 指导老师:孟宁
报告内容 • 项目概述 • 设计目标 • 设计思路 • 移植过程 • 重点和难点 • 项目总结 • 参考文献
项目概述 Android是基于Linux内核的软件平台和操作系统,早期由Google开发,后由开放手机联盟(Open Handset Alliance)开发。它采用了软件堆层(software stack,又名为软件叠层)的架构,主要分为三部分:底层以Linux核心为基础,由c语言开发,只提供基本功能。中间层包括函数库Library和虚拟机Virtual Machine,由C++开发。最上层是各种应用软件,包括通话程序,短信程序等,应用软件则由各公司自行开发,以java编写。 我们移植的Android系统其内核版本为linux-2.6.25。
设计目标 • 将Android成功移植到博创的2410试验箱上; • 添加和修改最基本的驱动程序; • 系统运行后能进行最基本的操作; • 编写一简单应用程序,使之能在系统中成功运行
设计思路 该设计思路遵循嵌入式系统移植的基本思路:
移植过程 • 搭建交叉编译环境 将交叉编译工具arm-linux-none-gnu解压到工作目录,然后设置环境变量: 打开用户主目录下的.bashrc,在这个文件中加入export PATH=$PATH:/.../ arm-linux-none-gnu/bin • 修改内核根目录下的Makefile文件,设置交叉编译工具的路径: ARCH = arm CROSS_COMPILE=…/ arm-linux-none-gnueabi-
移植过程 • 修改VIVI bootloader,因为博创2410自带的VIVI的MTD分区表默认如下。可以看只给内核分1M空间和根文件系统3M空间,而实际Android内核编译后大于1M,根文件系统也大于3M,所以修改要修改VIVI
移植过程 找到VIIV的arch/s3c2410/smdk.c ,修改NAND flash分区如下:
移植过程 • 修改后分区的大小要跟arch\arm\plat-s3c24xx\common-smdk.c中分区相同,如下:
移植过程 • 添加和修改驱动程序 本小组所完善的驱动程序主要有LCD驱动、USB接口驱动、网卡驱动、触摸屏驱动。 • LCD驱动 1)修改arch/arm/mach-s3c2410/mach-smdk2410.c文件,添加头文件#include <asm/arch/fb.h> 2)添加初始化s3c2410的LCD控制器时所需的参数 3)添加LCD控制器的寄存器参数设置函数 ,查找smdk2410_init,添加如下代码: static void __init smdk2410_init(void) { s3c24xx_fb_set_platdata(&qt2410_lcd_info);//设置LCD控制 器的寄存器参数 }
移植过程 • USB驱动 因Linux2.6版本的内核已有完善的usb驱动程序,因此只需在arch/arm/mach-s3c2410/mach-smdk2410.c中添加 usb接口相关的初始化信息: 1)添加Usb接口相关的结构体: struct s3c2410_hcd_info usb_s3c2410_info = { .port[0] = { .flags = S3C_HCDFLG_USED }}; 2)
移植过程 3)在smdk2410_map_io函数最后添加: smdk2410_usb_init(); • 博创2410-S所配网卡AX88796(NE2000兼容网卡)驱动 1)修改arch/arm/目录下的Kconfig文件,增加ISA总线支持,使其在make menuconfig 时出现NE2000的网卡配置选项 2)修改include/asm-arm/arch-s3c2410文件夹下的map.h文件。加入AX88796的地址映射 3)修改arch/arm/mach-s3c2410文件夹下的mach-smdk2410.c文件。在smdk2410_iodesc 中加入AX88796的地址信息。 4)修改网卡驱动的主要文件drivers/net/ne.c
移植过程 触摸屏驱动 1)首先打一个补丁:s3c2410_touchscreen.patch,该补丁主要是在设备文件、配置文件已经驱动程序中添加与触摸屏相关的数据、参数和方法。 2) arch/arm/mach-s3c2410/mach-smdk2410.c中添加与触摸屏相关的结构体: static struct s3c2410_ts_mach_info smdk2410_ts_cfg __initdata = { .delay = 20000, .presc = 49, .oversampling_shift = 2, };并添加支持触摸屏平台代码的信息,这个找到一个名为*smdk2410_devices[]的结构体指针数组里添加:&s3c_device_ts,然后在smdk2410_map_io函数里添加:set_s3c2410ts_info(&smdk2410_ts_cfg);
移植过程 3)修改driver/input/touchscreen/Makefile,添加如下内容:obj-$(CONFIG_TOUCHSCREEN_S3C2410) += s3c2410_ts.o 4)将驱动s3c2410_ts.c放置在driver/input/touchscreen/下面 • 编译内核 在make menuconfig配置界面中将上面所述的驱动模块以及与android相关的模块选中,保存配置后make zImage • 制作根文件系统 下载内核源码,用busybox工具制作根文件系统 • 编写一小应用程序,将其放在根文件系统/data/app目录下 • 烧写VIVI、内核、根文件系统
重点和难点 • Android内核十分庞大,要想搞明白需要花费大量精力。 • 必须对博创2410的系统组成架构非常清楚,不然就无法根据它来修改内核代码,来配置各个模块的取舍。 • 没有编写驱动程序的经验,对于驱动程序的编写与移植感到比较艰难。 • 由于Android根文件系统比较庞大,制作根文件系统遇到很大困难
项目总结 通过此个项目,使我对android系统架构较深入的了解,对我们将来在该领域的发展积累了很多前期经验。 该项目的设计目标接近完成,但距离一个完善的手机操作系统还有一定的差距,仍需改进。尚需要完善的驱动有:音频驱动、键盘驱动、Flash内存驱动、照相机驱动、蓝牙驱动等。
参考资料 • Linux设备驱动程序学习 • 嵌入式Android_Linux开发_博客 • 嵌入式Linux系统移植 • Android系统及根文件目录分析 • Android源码编译的几个问题 • Android根文件系统启动过程 • NANDFlash Partition • Android根文件系统制作方法 • Android 中文论坛
非常感谢孟宁老师的悉心指导!!! 谢谢!