嵌入式汽车定位系统开发研究-底层研究毕业设计论文(编辑修改稿)内容摘要:

el 奔腾双核 /双线程 内存容量: 2GB 硬盘容量: 320GB 显存容量: 513MB 操作系统 :Windows Federal10 搭建开发和移植环境 ( 1)开发环境配置如下: ① 本次设计开发环境 :linux federal 10 系统 ② 所用的代码是使用 smdk2410 代码修改成 uboot ③ 所用的编译和烧写工具: GNU gcc, DNW ( 2) 移植环境 ① 主 机: Fedora 10 windows XP ② 开发板 : Mini244064MB Nand,Kernel: ③ 编译器: ④ uboot: GPS 驱动程序, 3G 驱动程序 文件系统 logo 内核程序 bootloader 湖南科技大学本科生毕业设计(论文) 9 目标系统 本次实验使用的是 ARM920T开发板其完型后如下图: 图 湖南科技大学本科生毕业设计(论文) 10 第三章: BOOTLOADER 设计与实现 Bootloader 原理与作用 ( 1) Bootloader原理: 一般 bootloader 开发分两种模式:启动加载模式和下载模式,启动加载模式只是负责加载系统信息,而下载模式则可以从指定的地方下载系统信息(这样比较有利于系统升级 )。 bootloader 的实现依赖于 CPU 的体系结构,因此大多数bootloader的开发都分为 stage1和 stage2两个阶段,依赖体系结构的代码都放在 stage1(用汇编实现 ),而 stage2 通常用 C 来实现。 bootloader 的 stage1 通常包括以下步骤: ① 硬件设备初始化。 其中包括屏蔽所有中断、设置 CPU 的速度和时钟频率、 RAM初始化、初始化 IED、关闭 CPU 内部指令 /数据 cache。 ② 为加载 bootloader 的 stage2 准备 RAM 空间。 空间可以任意安排,其中RamEnd1MB是一种很值得推荐的方法 (RamEnd1MB指末尾的 1M 空间 );而且必须进行范围测试,这里推荐一个叫做 test_mempage 的内存检测算法 ——测试每个 memory page 开始两个字是否是可读写的。 ③ 拷贝 bootloader 的 stage2 到 RAM 空间。 这里只要注意地址范围就可以了。 ④ 设置好堆栈。 通常可以把 sp 的值设置为 stage2_end(栈向低地址空间发展 ) ⑤ 跳转到 stage2 的 C 入口点。 stage2 的代码通常用 C 来实现。 第二阶段, stage2 通常步骤: ① 初始化本阶段要使用的硬件设备。 至少一个串口,以便向终端用户进行 I/O 输出信息;初始化计时器等。 ② 检测系统内存映像。 即整个空间中有哪些 RAM 单元。 ③ 将 kernel影响和根文件系统映像从 flash上读到 RAM 空间。 主要考虑基地址和映像的大小两个方面;对于内核映像,一般将其拷贝到从 MEM_START+0x8000 这个基地址开始的大约 1MB大小的内存范围内,这里要把从 MEM_START到MEM_START+0x8000 这段 32kb 大小的内存空出来是因为要放置 linux内存中的一些全局数据结构。 如,启动参数和内核页表等信息。 而对于跟文件系统映像,则一般将其拷贝到从 MEM_START+0x00100000 开始的地方。 ④ 为内核设置启动参数。 linux 动参数。 每个标记由标识被传递参数的 tag_header 结构以及随后的参数值数据结构来组湖南科技大学本科生毕业设计(论文) 11 成(在 include/ams/)。 包括:ATAG_CORE\ATAG_MEM\ATAG_CMDLINE\ATAG_RAMDISK\ATAG_INITRD。 ( 2) bootloader的作用: BootLoader 就是在操作系统内核运行之前运行的一段小程序。 通过这段小程序,我们可以初始化硬件设备、建立内存空间映射图,从而将系统的软硬件环境带到一个合适状态,以便为最终调用操作系统内核准备好正确的环境。 在嵌入式系统中,通常并没有像 BIOS 那样的固件程序(注,有的嵌入式 CPU 也会内嵌一段短小的启动程序),因此整个系统的加载启动任务就完全由 BootLoader 来完成。 比如在一个基于 ARM7TDMI core 的嵌入式系统中,系统在上电或复位时通常都从地址0x00000000 处开始执行,而在这个地址处安排的通常就是系统的 BootLoader 程序。 的设计与实现 UBoot,全称 Universal Boot Loader,是遵循 GPL 条款的开放源码项目。 从FADSROM、 8xxROM、 PPCBOOT逐步发展演化而来。 其源码目录、编译形式与 Linux内核 很相似,事实上,不少 UBoot 源码就是相应的 Linux 内核源程序的简化,尤其是一些 设备的驱动程序,这从 UBoot 源码的注释中能体现这一点。 图 1 UBoot 存储器映射 UBoot 简介 UBoot 不仅仅支持嵌入式 Linux 系统的引导,当前,它还支持 NetBSD, VxWorks, QNX, RTEMS, ARTOS, LynxOS 嵌入式 操作系统。 其目前要支持的目标操作系统是OpenBSD, NetBSD, FreeBSD, Linux, SVR4, Esix, Solaris, Irix, SCO, Dell, NCR, VxWorks, LynxOS, pSOS, QNX, RTEMS, ARTOS。 这是 UBoot 中 Universal 的一层含义,另外一层含义则是 UBoot 除了支持 PowerPC 系列的处理器外,还能支持 MIPS、 x8ARM、 NIOS、 XScale 等诸多常用系列的处理器。 这两个特点正是 UBoot 项目的开发目标,即支持尽可能多的 嵌入式处理器 和嵌入式操作系统。 就目前来看, UBoot 对 PowerPC湖南科技大学本科生毕业设计(论文) 12 系列处理器支持最为丰富,对 Linux 的支持最完善。 其它系列的处理器和操作系统基本是在 20xx 年 11 月 PPCBOOT 改名为 UBoot 后逐步扩充的。 从 PPCBOOT 向 UBoot的顺利过渡,很大程度上归功于 UBoot 的维护人德国 DENX 软件工程中心 Wolfgang Denk[以下简称 ]本人精湛专业水平和持着不懈的努力。 当前, UBoot 项目正在他的领军之下,众多有志于开放源码 BOOT LOADER 移植工作的嵌入式开发人员正如火 如荼地将各个不同系列嵌入式处理器的移植工作不断展开和深入,以支持更多的嵌入式操作系统的装载与引导。 选择 UBoot 的理由: ① 开放源码; ② 支持多种嵌入式操作系统内核,如 Linux、 NetBSD, VxWorks, QNX, RTEMS, ARTOS, LynxOS; ③ 支持多个处理器系列,如 PowerPC、 ARM、 x8 MIPS、 XScale; ④ 较高的可靠性和稳定性; ⑤ 高度灵活的功能设置,适合 UBoot 调试、操作系统不同引导要求、产品发布等; ⑥ 丰富的 设备驱动 源码,如串口、以太网、 SDRAM、 FLASH、 LCD、 NVRAM、EEPROM、 RTC、键盘等; ⑦ 较为丰富的开发调试文档与强大的网络技术支持; ( 1)主要功能 UBoot 可支持的主要功能列表 * 系统引导; * 支持 NFS 挂载、 RAMDISK(压缩或非压缩 )形式的根文件系统; * 支持 NFS 挂载、从 FLASH 中引导压缩或非压缩系统内核; * 基本辅助功能 强大的 操作系统接口 功能;可灵活设置、传递多个关键参数给操作系统,适合系统在不同开发阶段的调试要求与产品发布,尤对 Linux支持最为强劲; * 支持目标板环境参数多种存储方式,如 FLASH、 NVRAM、 EEPROM; * CRC32校验,可校验 FLASH 中内核、 RAMDISK 镜像文件是否完好; * 设备驱动 串口、 SDRAM、 FLASH、以太网、 LCD、 NVRAM、 EEPROM、键盘、USB、 PCMCIA、 PCI、 RTC 等驱动支持; * 上电自检功能 SDRAM、 FLASH 大小自动检测; SDRAM 故障检测; CPU 型号;* 特殊功能 XIP 内核引导; for s3c2440 的模块结构分析: 此次使用的 uboot 为 ,其中包括的主要目录及说明如下图: 湖南科技大学本科生毕业设计(论文) 13 uboot 的 stage1 代码通常放在 cpu/xxxx/ 文件中,他用汇编语言写成; uboot 的 stage2 代码通常放在 lib_xxxx/ 文件中,他用 C 语言写成。 各个部分的流程图如下: 湖南科技大学本科生毕业设计(论文) 14 ( 1) Uboot 代码修改前提 搭建了一个 my2440 开发板 uboot 的框架,要使其功能实现, ① 因 2440 和 2410 的资源差不多,主频和外设有点差别,所以我们就在board/samsung/下建立自己开发板的项 目,取名叫 my2440 ② 因 2440 和 2410 的资源差不多,所以就以 2410 项目的代码作为模板,以后再修改,将 2410下所有的代码复制到 2440下,进入 my2440目录,将 my2440下的 改名为 ,修改 Makefile 文件,命令如下: gedit board/samsung/my2440/Makefile COBJS := 回到 uboot 根目录,建立 2440 头文件, ③ 修改 uboot 跟目录下的 Makefile 文件。 查找到 smdk2410_config的地方,在他下面按照 smdk2410_config的格式建立 my2440_config的编译选项,另外还要指定交叉编译器为 armlinuxgcc,并配置 2440 编译选项的格式。 ④ 测试编译新建的 my2440 开发板项目,如果出现 Configuring for my2440 board...则表示设置正确,编译后在根目录下会出现 ,则 uboot 移植的第一步就算完成了 ( 2) my2440 开发板 uboot 的 stage1 入口点分析。 一般在嵌入式系统软 件开发中,在所有源码文件编译完成之后,链接器要读取一个链接分配文件,在该文件中定义了程序的入口点,代码段、数据段等分配情况等。 那么我们的 my2440 开发板 uboot 的这个链接文件就 cpu/arm920t/,打开该文件部分代码,可以看到定义生成文件的目标平台是 arm,定义程序的人口点是 _start。 知道了程序的入口点是 _start,那么我们就打开 my2440 开发板 uboot 第一个要运行的程序cpu/arm920t/(即 uboot 的 stage1 部分),查找到 _start 的 位置, 从汇编代码可以看到程序又跳转到 start_code 处开始执行,那么再查找到 start_code处的代码,可知 start_code 处才是 uboot 启动代码的真正开始处。 以上就是 uboot 的stage1 入口的过程。 ( 3) my2440 开发板 uboot 的 stage1 阶段的硬件设备初始化。 由于在 uboot 启动代码处有两行是 AT91RM9200DK 的 LED 初始代码,但我们 my2440湖南科技大学本科生毕业设计(论文) 15 上的 LED 资源与该开发板的不一致,所以我们要删除或屏蔽该处代码,再加上 my2440的 LED 驱动代码,代码如下 : if defined(CONFIG_S3C2440) define GPBCON 0x56000010 define GPBDAT 0x56000014 define GPBUP 0x56000018 ldr r0, =GPBUP ldr r1, =0x7FF //即:二进制 11111111111,关闭 PB口上拉 str r1, [r0] ldr r0, =GPBCON ldr r1, =0x154FD //即:二进制 010101010011111101 str r1, [r0] ldr r0, =GPBDAT ldr r1, =0x1C0 str r1, [r0] endif 在 include/configs/ CONFIG_S3C2440 宏 gedit include/configs/ define CONFIG_S3C2440 1 /* in a SAMSUNG S3C2440 SoC。
阅读剩余 0%
本站所有文章资讯、展示的图片素材等内容均为注册用户上传(部分报媒/平媒内容转载自网络合作媒体),仅供学习参考。 用户通过本站上传、发布的任何内容的知识产权归属用户或原始著作权人所有。如有侵犯您的版权,请联系我们反馈本站将在三个工作日内改正。