嵌入式汽车定位系统开发研究-底层研究毕业设计论文.doc_第1页
嵌入式汽车定位系统开发研究-底层研究毕业设计论文.doc_第2页
嵌入式汽车定位系统开发研究-底层研究毕业设计论文.doc_第3页
嵌入式汽车定位系统开发研究-底层研究毕业设计论文.doc_第4页
嵌入式汽车定位系统开发研究-底层研究毕业设计论文.doc_第5页
已阅读5页,还剩60页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

湖湖 南南 科科 技技 大大 学学 毕毕 业业 设设 计(计( 论论 文文 ) 题目题目嵌入式汽车定位系统开发研究嵌入式汽车定位系统开发研究 作者作者 学院学院 专业专业 学号学号 指导教师指导教师 湖南科技大学本科生毕业设计(论文) i 摘摘 要要 linux 操作系统作为自由软件的代表,性能优良,是 pc 服务器和嵌入式系统应用 最广泛的操作系统,近年来,显现了巨大的市场价值和广阔的应用前景。而本文主要 讲述的是在汽车行驶记录仪方面的应用。 本文的工作主要集中在以下方面:首先,进行了移植环境的设计与搭建,安装和配 置了交叉编译器;其次,设计并实现了系统的 bootloader,主要内容是将基于 s3c2410 处理器的 u-boot 移植到移植到 arm9-2440ep 硬件环境下;最后,将 linux 内核进 行编译与移植。 全文详细论述了嵌入式 linux 移植的流程,给出了搭建嵌入式开发环境,基于硬 件平台 arm920t 的 bootloader, linux 内核的移植及根文件系统的实现方案,为整个系 统的后续开发打下坚实的基础。 关键字:关键字:linux federal10 系统,uboot 移植,内核移植。 湖南科技大学本科生毕业设计(论文) ii abstract linux operating system as the representative of free software, excellent performance, is a pc server and embedded systems the most widely used operating system in recent years, revealing a huge market value and broad application prospects.this article is about the vehicle location system in the application. transplantation in the linux system, the first transplant carried out the design and build environment, installation and configuration of the cross-compiler.secondly, a design and implementation of the system bootloader, main contents, including transplantation of open source software u-boot, since the processor s3c2410 in the u-boot only smdk2410 board of standards support in use must be transplanted toarm9-2440ep hardware environment, and finally, in the following steps to achieve the whole process. this is a linux system using the terminal command modified by gcc cross-compiler, and generates a target need uboot, kernel, logo, and file system image file required, and the windows xp system to download and bydnw and super terminal will be programmed into the target image file tq2440 download mode, restart the development board nandflash mode until you see the system interface, you can begin to enter the development stage. embedded linux text discusses in detail the process of transplantation is given to build the embedded development environment, hardware platform based on arm920ts bootloader, linux kernel and root file system migration implementations. keywords: linux federal10 system, uboot transplantation, kernel porting. 湖南科技大学本科生毕业设计(论文) i 目目 录录 第一章第一章 绪绪 论论- 1 - 1.1 嵌入式系统的概述- 1 - 1.1.1 嵌入式系统的组成.- 2 - 1.1.2 嵌入式系统的特点.- 3 - 1.1.3 嵌入式系统的开发.- 4 - 1.2 嵌入式系统的车载定位系统应用- 5 - 1.3 智能导航系统功能框图- 6 - 第二章第二章 基于基于 arm9 微处理器的硬件和软件总体设计概述微处理器的硬件和软件总体设计概述 - 9 - 2.1 导航终端系统硬件设计- 9 - 2.1.1 导航用户终端系统硬件设计框图 - 12 - 2.1.2 基于 arm9 的嵌入式车载导航开发板底板电路原理图 - 13 - 2.1.3 arm920t 开发板核心原理图.- 13 - 2.2 导航终端系统驱动程序的组成框图- 12 - 2.3 开发环境的设计与创建- 15 - 2.3.1 主机系统的硬件配置及操作系统-24- 2.3.2 搭建开发和移植环境.- 15 - 2.3.3 目标系统.- 18 - 第三章第三章 bootloader 设计与实现设计与实现 - 19 - 3.1 bootloader原理与作用 .- 19 - 3.2 u-boot的设计与实现- 20 - 3.2.1 简介 u-boot .- 21 - 3.2.2 u-boot for s3c2440 模块结构分析- 21 - 3.2.3 u-boot 执行流程 .- 21 - 3.2.4 面向目标板的 u-boot 代码修改和移植 - 21 - 3.3 u-boot 烧录和运行- 24 - 第四章第四章 linux 内核移植与烧写内核移植与烧写.- 26 - 4.1 linux内核结构与启动流程图.- 26 - 4.2u-boot引导内核代码的启动过程 .- 28 - 4.3 内核的烧写过程- 28 - 第五章第五章 linux 根文件系统移植与烧写根文件系统移植与烧写.- 26 - 湖南科技大学本科生毕业设计(论文) ii 5.1 linux 文件系统基本概念- 29 - 5.2 嵌入式 linux 根文样系统内容设计与实现.- 31 - 5.3u-boot 对yaff/yaff2 文件系统下载的支持- 35 - 5.4linux 根文件系统和 logo 的烧录过程- 35 - 第六章第六章 结束语结束语- 38 - 参参 考考 文文 献献- 39 - 致致 谢谢.- 40 - 湖南科技大学本科生毕业设计(论文) - 1 - 第第 1 章章:绪论:绪论 嵌入式系统是热门的 it 应用领域之一。嵌入式系统用在一些特定专用设备上,通 常这些设备的硬件资源(如处理器、存储器等)非常有限,并且对成本很敏感,有时 对实时响应要求很高等。特别是随着消费家电的智能化,嵌入式更显重要。像我们平 常常见到的手机、pda、电子字典、网络等应用的功能也进行了优化。 1.1 嵌入式系统概述嵌入式系统概述 1.1.1 嵌入式系统的组成嵌入式系统的组成 嵌入式系统一般可以分成四个部分:嵌入式处理器、嵌入式外围设备、嵌入式操作 系统和嵌入式应用软件,如图 1-1 所示。 图 1.1 嵌入式系统的组成 (1)嵌入式处理器 嵌入式系统的核心部件是各种类型的嵌入式处理器,嵌入式处理器具有面向用户, 面向产品,面向应用的特点,因此,嵌入式处理器与通用处理器最大的区别在于,嵌 入式 cpu 大多工作在为特定用户群所专门设计的系统中。 针对不同应用和不同半导体工艺,目前各类嵌入式处理器的变种计有 1000 余种, 大致可分为: 嵌入式微处理器:arm,powerpc,68000,mips,386ex; 嵌入式微控制器:8051,mc68hc05,mc68hc11,68300 等; 嵌入式 dsp 处理器:tms320 系列,dsp56000 系列; 嵌入式 soc(片上系统):omap,m-core; 目前嵌入式处理器有向高度集成的嵌入式片上系统system on chip,soc)发展的 趋势。 (2)嵌入式外围设备 在嵌入系统硬件系统中,除了嵌入式处理器以外,用于完成存储、通信、调试、 湖南科技大学本科生毕业设计(论文) - 2 - 显示等辅助功能的其他部件,事实上都可以算作嵌入式外围设备。目前常用的嵌入式 外围设备按功能可以分为存储设备、通信设备和显示设备三类。 目前存在的绝大多数通信设备都可以直接在嵌入式系统中应用,包括 rs-232 接 口(串行通信接口)、usb(通用串行总线接口), ethernet 以太网接口)、工 ic(现场总线)等 等。存储设备主要用于各类数据的存储,分易失型存储和非易失型存储器两种,同步 动态存储器(synchronous dram)和 flash 是两者的代表。flash 凭借其可擦写次数 多、存储速度快、存储容量大、价格便宜等优点,在嵌入式领域内得到了广泛应用。 目前存在的绝大多数通信设备都可以直接在嵌入式系统中应用,包括 rs-232 接 口(串行通信接口)、usb(通用串行总线接口), ethernet 以太网接口)、工 ic(现场总线)等 等。 由于嵌入式应用场合的特殊性,通常使用的是液晶显示器(lcd)和触摸板(touch panel)等外围显示设备。也有很多嵌入式系统没有显示设备。 (3)嵌入式操作系统 嵌入式操作系统是专门负责管理存储器分配、中断处理、任务调度等功能的软件 模块,是用来支持嵌入式应用的系统软件,是嵌入式系统极为重要的组成部分,通常 包括与硬件相关的底层驱动程序、系统内核、设备驱动接口、通信协议、图形用户界 面(gui)等。 从 20 世纪 80 年代开始,市场上出现各种各样的商用嵌入式操作系统,这些操作 系统大部分都是为专用系统开发的,现在逐步演化成了多种形式的商用嵌入式操作系 统百家争鸣的局面。这些操作系统有 vxworks,neculeus,psos,qnx,linux 和 windowsce 等。 1.1.2 嵌入式系统的特点嵌入式系统的特点 根据前面对嵌入式系统的描述可以看出嵌入式系统的几个重要特征: (1)嵌入式系统通常是面向特定应用的,嵌入式 cpu 与通用型的 cpu 最大不同就 是嵌入式 cpu 大多工作在为特定用户群设计的系统中,它通常都具有低功耗、体积小、 集成度高等特点,能够把通用 cpu 中许多由板卡完成的任务集成在芯片内部,从而有 利于嵌入式系统设计趋子小型化,移动能力大大增强,跟网络的祸合也越来越紧密。 (2)嵌入式系统是将先进的计算机技术、半导体技术和电子技术与各个行业的具体 应用相结合后的产物。这一点就决定了官必然是一个技术密集、资金密集、高度分散、 不断创新的知识集成系统。 (3)嵌入式系统的硬件和软件都必须高效率地设计,量体裁衣、去除冗余,力争在 同样的硅片面积上实现更高的性能,这样才能在具体应用中对处理器的选择更具有竞 争力。嵌入式系统和具体应用有机地结合在一起,它的升级换代也是和具体产品同步 进行,因此嵌入式系统产品一旦进入市场,具有较长的生命周期。为了提高执行速度 湖南科技大学本科生毕业设计(论文) - 3 - 和系统可靠性,嵌入式系统中的软件一般都固化在存储器芯片或单片机本身中,而不 是存贮于磁盘等载体中。 (4)嵌入式系统本身不具备自举开发能力,即使设计完成以后用户通常也是不能对 其中的程序功能进行修改的,必须有一套开发工具和环境才能进行开发。 1.1.3 嵌入式系统的开发嵌入式系统的开发 由于嵌入式系统是一种根据特定用途所专门开发的系统,它只完成预期要完成的 功能,所以其开发过程和开发环境同传统的软件开发相比有着显著的不同。 (1)开发流程 在嵌入式系统的应用开发中,整个系统的开发过程如图 1-2 所示。嵌入式系统发 展到今天,对应于各种微处理器的硬件平台一般都是通用的、固定的、成熟的,这就 大大减少了由硬件系统引入错误的机会。此外,由于嵌入式操作系统屏蔽了底层硬件 的复杂性,使得开发者通过操作系统提供的 api 函数就可以完成大部分工作,因此大 大简化了开发过程,提高了系统的稳定性。嵌入式系统的开发者现在已经从反复进行 硬件平台设计的过程中解脱出来,从而可以将主要精力放在满足特定的需求上。 图 1.2 嵌入式系统的开发流程 (2)开发环境 采用交叉开发环境(cross development environment)是嵌入式应用软件开发时的一 个显著特点,首先在通用计算机上编写程序,然后通过交叉编译生成目标平台上可以 运行的二进制代码格式,最后再下载到目标平台上的特定位置运行。交叉开发环境是 指编译、链接和调试嵌入式应用软件的环境.,它与运行嵌入式应用软件的环境有所不 同,通常采用宿主机/目标机模式,如图 1-3 所示。 湖南科技大学本科生毕业设计(论文) - 4 - 图 1.3 交叉开发模式 宿主机是一台通用计算机(如 pc 机或者工作站),它通过串口或者以太网接口与目 标机通信。宿主机的软硬件资源比较丰富,不但包括功能强大的操作系统(如 linux), 而且还有各种各样优秀的开发工具(如 windriver 的 tornado, gnu 的开源软件 gdb 等), 能够大大提高嵌入式应用软件的开发速度和效率。目标机一般在驱动开发和应用软件 开发期间使用,它可以是嵌入式应用软件的实际运行环境,也可以是能够替代实际运 行环境的仿真系统,但软硬件资源通常都比较有限。嵌入式系统的交叉开发环境一般 包括交叉编译器、交叉调试器和系统仿真器,其中交叉编译器用于在宿主机上生成能 在目标机上运行的代码,而交叉调试器和系统仿真器则用于在宿主机与目标机间完成 嵌入式软件的调试。在采用宿主机/目标机模式开发嵌入式应用软件时,首先利用宿主 机上丰富的资源和良好的开发环境开发和仿真调试目标机上的软件,然后通过串口或 者网络将交叉编译生成的目标代码下载到目标机的存储单元上,并在监控程序或者操 作系统的支持下利用交叉调试器进行分析和调试,最后目标机在特定环境下脱离宿主 机运行。 目前常用的交叉开发环境主要有开放和商业两种类型。开放的交叉开发环境的典 型代表是 gnu 工具链,目前己经能够支持 x86,arm,mips, powerpc 等多种处理器。 商业的交叉开发环境则主要有 metrowerks codewarrior,arm software,development toolkit,windver tornado 等等。 1.2 嵌入式系统在车载定位系统中的应用嵌入式系统在车载定位系统中的应用 全球定位系统(gps)是本世纪70年代由美国陆海空三军联合研制的新一代空间卫星 导航定位系统。其主要目的是为陆、海、空三大领域提供实时、 全天候和全球性的导 航服务,并用于情报收集、核爆监测和应急通讯等一些军事目的,是美国独霸全球战 略的重要组成。经过20余年的研究实验,耗资300亿美元,到1994年3月,全球覆盖率 高达98%的24颗 gps 卫星星座己布设完成。gps 监控(以上海市连图信息科技 gps 车 载终端设备为例)是结合了 gps 技术、无线通信技术(gsm/gprs/cdma)、图像处理 技术及 gis 技术,用于对移动的人、宠物、车及设备进行远程实时监控的一门技术。 全球定位系统在车辆管理上的应用,被称作车辆定位系统。 gps 车辆管理系 统功能简单描述 (1)实时监控: gps 车辆管理系统应用了移动 gprs 为监控数据的载体,真正 湖南科技大学本科生毕业设计(论文) - 5 - 的实现了对车辆的全天候实时监控(速度、方向等) ,监控频率可达到1秒级。 (2)行驶信息管理: 系统可对车辆以往的行驶数据信息进行下载、回放、保存 等。 (3)车辆超速报警: 管理员可单独或是设定全部车辆的行驶上下限速度,当车 辆行驶速度超过该限制时,系统即会提示车辆超速报警,并伴有声音和窗口弹出窗口 提示。 (4)自建图层:管理员可以通过文字和图象在地图上自行标注公司的以及工地的 方位;也可以自行构建道路上没有的路线,更好的完善地图来管理车辆。 (5)文字调度管理:管理可通过文字方式向某一辆车或是某一群车辆发送文字调 度信息。发送的信息将保存下来,以供日后查证。 (6)超速报警统计:通过系统提供的行驶数据保存功能,在事后可将某车的在某 天某日某一段时间的行车数据进行回放,并可生成报表供打应,该功能可作考核用。 (7)行车线路跟踪:可对单独一辆或是全部车辆进行实时记录行驶路线功能,当 车辆驶过后就会在地图上划出一条黑线,管理员可直观的看到车辆的行驶路线情况。 (8)区域报警功能:可以设定禁区,当车进入禁区监控处发出警报提醒。定制行 驶路线,当驾驶员驶离预定的驾驶路线发出报警。 (9)里程油耗统计:通过系统提供的行驶数据保存功能,可将某车的在某天某日 某一段时间的行车公里数及所耗油量,可生成报表供打印,该功能可作参考。 1.3智能导航系统功能框图智能导航系统功能框图 湖南科技大学本科生毕业设计(论文) - 6 - 目标板 arm9 3g 模块 gps 模块 uboot 移 植 kernel 移 植 应用程 序 p c 卫星 监 控 中 心 图1.4 系统功能图 第第 2 章章基于基于 arm9 微处理器的硬件和软件设计概述微处理器的硬件和软件设计概述 2.1 导航终端系统硬件设计导航终端系统硬件设计 2.1.1 导航用户终端系统硬件设计图导航用户终端系统硬件设计图 用户终端主要是实现了提供给监控中心的各种数据,包括地理位置,速度,耗油量 等等,因此其包括了以下的几个模块。 图 2.1 用户终端图 2.1.2 基于基于 arm9 的嵌入式车载导航开发板底板电路原理图的嵌入式车载导航开发板底板电路原理图 湖南科技大学本科生毕业设计(论文) - 7 - 图 2.2 2.1.3 arm920t 开发板核心板电路原理图开发板核心板电路原理图 湖南科技大学本科生毕业设计(论文) - 8 - 图 2.3 2.2 导航系统驱动程序的组成框图导航系统驱动程序的组成框图 以下是运行目标板所需要的驱动程序,在此次试验中,使用的 tq2440 开发班层 也是由一下图示组成。 gps 驱动程序,3g 驱动程序 文件系统 logo 内核程序 湖南科技大学本科生毕业设计(论文) - 9 - 图 2.4 2.3 开发环境的设计与创建开发环境的设计与创建 2.3.1 主机系统的硬件配置和操作系统主机系统的硬件配置和操作系统 cpu:intel 奔腾双核/双线程 内存容量:2gb 硬盘容量:320gb 显存容量:513mb 操作系统:windows federal10 2.3.2 搭建开发和移植环境搭建开发和移植环境 (1)开发环境配置如下:)开发环境配置如下: 1 本次设计开发环境:linux federal 10 系统 2 所用的代码是使用 smdk2410 代码修改成 u-boot 3 所用的编译和烧写工具:gnu gcc,dnw (2)移植环境移植环境 1 主 机:fedora 10 windows xp 2 开发板:mini2440-64mb nand,kernel:2.6.30.4 3 编译器:arm-linux-gcc-4.3.2.tgz 4 u-boot:u-boot-2009.08.tar.bz2 2.3.3 目标系统目标系统 本次实验使用的是 arm920t 开发板其完型后如下图: bootloader 湖南科技大学本科生毕业设计(论文) - 10 - 图 2.5 第三章:第三章:bootloader 设计与实现设计与实现 湖南科技大学本科生毕业设计(论文) - 11 - 3.1 bootloader 原理与作用原理与作用 (1)bootloader 原理:原理:一般 bootloader 开发分两种模式:启动加载模式和下载模式, 启动加载模式只是负责加载系统信息,而下载模式则可以从指定的地方下载系统信息 (这样比较有利于系统升级)。bootloader 的实现依赖于 cpu 的体系结构,因此大多数 bootloader 的开发都分为 stage1 和 stage2 两个阶段,依赖体系结构的代码都放在 stage1(用汇编实现),而 stage2 通常用 c 来实现。 bootloader 的 stage1 通常包括以下步骤: 1 硬件设备初始化。其中包括屏蔽所有中断、设置 cpu 的速度和时钟频率、 ram 初始化、初始化 ied、关闭 cpu 内部指令/数据 cache。 2 为加载 bootloader 的 stage2 准备 ram 空间。空间可以任意安排,其中 ramend-1mb 是一种很值得推荐的方法(ramend-1mb 指末尾的 1m 空间);而且必须 进行范围测试,这里推荐一个叫做 test_mempage 的内存检测算法测试每个 memory page 开始两个字是否是可读写的。 3 拷贝 bootloader 的 stage2 到 ram 空间。这里只要注意地址范围就可以了。 4 设置好堆栈。通常可以把 sp 的值设置为 stage2_end(栈向低地址空间发展) 5 跳转到 stage2 的 c 入口点。stage2 的代码通常用 c 来实现。 第二阶段,stage2 通常步骤: 1 初始化本阶段要使用的硬件设备。至少一个串口,以便向终端用户进行 i/o 输 出信息;初始化计时器等。 2 检测系统内存映像。即整个空间中有哪些 ram 单元。 3 将 kernel 影响和根文件系统映像从 flash 上读到 ram 空间。主要考虑基地址和 映像的大小两个方面;对于内核映像,一般将其拷贝到从 mem_start+0x8000 这个 基地址开始的大约 1mb 大小的内存范围内,这里要把从 mem_start 到 mem_start+0x8000 这段 32kb 大小的内存空出来是因为要放置 linux 内存中的一些 全局数据结构。如,启动参数和内核页表等信息。而对于跟文件系统映像,则一般将 其拷贝到从 mem_start+0x00100000 开始的地方。 4 为内核设置启动参数。linux 2.4.x 以后的内核都期望以标记列表的形式来传递启 动参数。每个标记由标识被传递参数的 tag_header 结构以及随后的参数值数据结构来 组成(在 include/ams/setup.h 中定义)。包括: atag_coreatag_mematag_cmdlineatag_ramdiskatag_initrd。 湖南科技大学本科生毕业设计(论文) - 12 - (2)bootloader 的作用:的作用:bootloader 就是在操作系统内核运行之前运行的一段小 程序。通过这段小程序,我们可以初始化硬件设备、建立内存空间映射图,从而将系 统的软硬件环境带到一个合适状态,以便为最终调用操作系统内核准备好正确的环境。 在嵌入式系统中,通常并没有像 bios 那样的固件程序(注,有的嵌入式 cpu 也会内 嵌一段短小的启动程序),因此整个系统的加载启动任务就完全由 bootloader 来完成。 比如在一个基于 arm7tdmi core 的嵌入式系统中,系统在上电或复位时通常都从地 址 0x00000000 处开始执行,而在这个地址处安排的通常就是系统的 bootloader 程序。 3.2u-boot 的设计与实现的设计与实现 u-boot,全称 universal boot loader,是遵循 gpl 条款的开放源码项目。从 fadsrom、8xxrom、ppcboot 逐步发展演化而来。其源码目录、编译形式与 linux 内核很相似,事实上,不少 u-boot 源码就是相应的 linux 内核源程序的简化, 尤其是一些设备的驱动程序,这从 u-boot 源码的注释中能体现这一点。 图 1 u-boot 存储器映射 3.1.1 u-boot 简介简介 u-boot 不仅仅支持嵌入式 linux 系统的引导,当前,它还支持 netbsd, vxworks, qnx, rtems, artos, lynxos 嵌入式操作系统。其目前要支持的目标操作系统是 openbsd, netbsd, freebsd,4.4bsd, linux, svr4, esix, solaris, irix, sco, dell, ncr, vxworks, lynxos, psos, qnx, rtems, artos。这是 u-boot 中 universal 的一层含义, 另外一层含义则是 u-boot 除了支持 powerpc 系列的处理器外,还能支持 mips、 x86、arm、nios、xscale 等诸多常用系列的处理器。这两个特点正是 u-boot 项目的 开发目标,即支持尽可能多的嵌入式处理器和嵌入式操作系统。就目前来看,u-boot 对 powerpc 系列处理器支持最为丰富,对 linux 的支持最完善。其它系列的处理器和 操作系统基本是在 2002 年 11 月 ppcboot 改名为 u-boot 后逐步扩充的。从 ppcboot 向 u-boot 的顺利过渡,很大程度上归功于 u-boot 的维护人德国 denx 软 湖南科技大学本科生毕业设计(论文) - 13 - 件工程中心 wolfgang denk以下简称 w.d本人精湛专业水平和持着不懈的努力。当前, u-boot 项目正在他的领军之下,众多有志于开放源码 boot loader 移植工作的嵌入 式开发人员正如火如荼地将各个不同系列嵌入式处理器的移植工作不断展开和深入, 以支持更多的嵌入式操作系统的装载与引导。 选择 u-boot 的理由: 开放源码; 支持多种嵌入式操作系统内核,如 linux、netbsd, vxworks, qnx, rtems, artos, lynxos; 支持多个处理器系列,如 powerpc、arm、x86、mips、xscale; 较高的可靠性和稳定性; 高度灵活的功能设置,适合 u-boot 调试、操作系统不同引导要求、产品发布 等; 丰富的设备驱动源码,如串口、以太网、 sdram、flash、lcd、nvram、eeprom、rtc、键盘等; 较为丰富的开发调试文档与强大的网络技术支持; (1)主要功能 u-boot 可支持的主要功能列表 * 系统引导;* 支持 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 内核引导; 3.2.2uboot for s3c2440 的的模模块块结结构构分分析析: 此次使用的 uboot 为 u-boot-2009.08,其中包括的主要目录及说明如下图: 湖南科技大学本科生毕业设计(论文) - 14 - 3.2.3u-boot 执行流程执行流程 u-boot 的 stage1 代码通常放在 cpu/xxxx/start.s 文件中,他用汇编语言写成; u-boot 的 stage2 代码通常放在 lib_xxxx/board.c 文件中,他用 c 语言写成。 各个部分的流程图如下: 湖南科技大学本科生毕业设计(论文) - 15 - 3.2.4u-boot 面向目标板的代码修改面向目标板的代码修改 (1)uboot 代码修改前提 搭建了一个 my2440 开发板 u-boot 的框架,要使其功能实现, 1 因 2440 和 2410 的资源差不多,主频和外设有点差别,所以我们就在 board/samsung/下建立自己开发板的项目,取名叫 my2440 2 因 2440 和 2410 的资源差不多,所以就以 2410 项目的代码作为模板,以后再修 改,将 2410 下所有的代码复制到 2440 下,进入 my2440 目录,将 my2440 下的 smdk2410.c 改名为 my2440.c,修改 makefile 文件,命令如下: #gedit board/samsung/my2440/makefile cobjs := my2440.o flash.o 回到 u-boot 根目录,建立 2440 头文件, 3 修改 u-boot 跟目录下的 makefile 文件。查找到 smdk2410_config 的地方,在他 下面按照 smdk2410_config 的格式建立 my2440_config 的编译选项,另外还要指定交叉 编译器为 arm-linux-gcc,并配置 2440 编译选项的格式。 4 测试编译新建的 my2440 开发板项目,如果出现 configuring for my2440 board. 则表示设置正确,编译后在根目录下会出现 u-boot.bin 文件,则 u-boot 移植的第一步就 算完成了 (2)my2440 开发板 u-boot 的 stage1 入口点分析。 一般在嵌入式系统软件开发中,在所有源码文件编译完成之后,链接器要读取一 个链接分配文件,在该文件中定义了程序的入口点,代码段、数据段等分配情况等。 那么我们的 my2440 开发板 u-boot 的这个链接文件就 cpu/arm920t/u-boot.lds,打开该文 件部分代码,可以看到定义生成文件的目标平台是 arm,定义程序的人口点是_start。 知道了程序的入口点是_start,那么我们就打开 my2440 开发板 u-boot 第一个要运行的 程序 cpu/arm920t/start.s(即 u-boot 的 stage1 部分),查找到_start 的位置, 从汇编代码可以看到程序又跳转到 start_code 处开始执行,那么再查找到 start_code 处的代码,可知 start_code 处才是 u-boot 启动代码的真正开始处。以上就是 u-boot 的 stage1 入口的过程。 (3)my2440 开发板 u-boot 的 stage1 阶段的硬件设备初始化。 由于在 u-boot 启动代码处有两行是 at91rm9200dk 的 led 初始代码,但我们 湖南科技大学本科生毕业设计(论文) - 16 - my2440 上的 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/my2440.h 头文件中添加 config_s3c2440 宏 #gedit include/configs/my2440.h #define config_s3c2440 1 /* in a samsung s3c2440 soc */ 现在编译 u-boot,在根目录下会生成一个 u-boot.bin 文件。然后我们利用 mini2440 原 有的 supervivi 把 u-boot.bin 下载到 ram 中运行测试(注意:我们使用 supervivi 进行下 载时已经对 cpu、ram 进行了初始化,所以我们在 u-boot 中要屏蔽掉对 cpu、ram 的初始化),如下: /*#ifndef config_skip_lowlevel_init bl cpu_init_crit #endif*/ #make my2440_config #make 下载运行后可以看到开发板上的 led 灯第一了亮了,其他三个熄灭,测试结果符合上 面的要求。 湖南科技大学本科生毕业设计(论文) - 17 - (4)在 u-boot 中添加对 s3c2440 一些寄存器的支持、添加中断禁止部分和时钟设置 部分。 由于 2410 和 2440 的寄存器及地址大部分是一致的,所以这里就直接在 2410 的基 础上再加上对 2440 的支持即可,在 cpu/arm920t/start.s 中添加如下代码: #if defined(config_s3c2400) | defined(config_s3c2410) | defined(config_s3c2440) # if defined(config_s3c2440)/添加 s3c2440 的中断禁止部分 ldr r1, =0x7fff /根据 2440 芯片手册,intsubmsk 寄存器有 15 位可用 ldr r0, =intsubmsk str r1, r0 # endif # if defined(config_s3c2440) /添加 s3c2440 的时钟部分 #define mpllcon 0x4c000004 /系统主频配置寄存器基地址 #define upllcon 0x4c000008 /usb 时钟频率配置寄存器基地址 ldr r0, =clkdivn /设置分频系数 fclk:hclk:pclk = 1:4:8 mov r1, #5 str r1, r0 ldr r0, =mpllcon /设置系统主频为 405mhz ldr r1, =0x7f021 str r1, r0 ldr r0, =upllcon /设置 usb 时钟频率为 48mhz ldr r1, =0x38022 str r1, r0 # else /其他开发板的时钟部分,这里就不用管了,我们现在是做 2440 的 /* fclk:hclk:pclk = 1:2:4 */ /* default fclk is 120 mhz ! */ 湖南科技大学本科生毕业设计(论文) - 18 - # endif #endif /* config_s3c2400 | config_s3c2410 | config_s3c2440 */ s3c2440 的时钟部分除了在 start.s 中添加外,还要分别在 board/samsung/my2440/my2440.c 和 cpu/arm920t/s3c24x0/speed.c 中修改或添加部分代码, 如下: #elif fclk_speed=2 /* fout = 405mhz */ #define m_mdiv 0x7f #define m_pdiv 0x2 #define m_sdiv 0x1 #elif usb_clock=2 /* fout = 48mhz */ #define u_m_mdiv 0x38 #define u_m_pdiv 0x2 #define u_m_sdiv 0x2 #endif #gedit cpu/arm920t/s3c24x0/speed.c static ulong get_pllclk(int pllreg) #if defined(config_s3c2440) if(pllreg = mpll) /参考 s3c2440 芯片手册上的公式:pll=(2 * m * fin)/(p * 2s) return(config_sys_clk_freq * m * 2) / (p clkdivn 修改完毕后我们再重新编译 u-boot,然后再下载到 ram 中运行测试。结果终端有输出 信息并且出现类似 shell 的命令行,这说明这一部分移植完成。 (5)准备进入 u-boot 的第二阶段, 通常,在嵌入式 bootloader 中,有两种方式来引导启动内核:从 nor flash 启动和从 nand flash 启动。u-boot 中默认是从 nor flash 启动,让 u-boot 完全对我们 nor flash 的 支持。 1 我们修改命令行前的名字和 nor flash 参数部分的定义如下: #define config_sys_prompt “my2440#“ #if 0 #define config_amd_lv400 1 #define config_amd_lv800 1 #endif #define config_sys_max_flash_banks 1 #ifdef config_amd_lv800 #define phys_flash_size 0x00100000 #define config_sys_max_flash_sect (19) #define config_env_addr(config_sys_flash_base + 0x0f0000) #endif #ifdef config_amd_lv400 #define phys_flash_size 0x00080000 #define config_sys_max_flash_sect (11) #define config_env_addr(config_sys_flash_base + 0x070000) #endif #define config_sst_39vf1601 1 #define phys_flash_size 0x200000 #define config_sys_max_flash_sect (512) #define config_env_addr(config_sys_flash_base + 0x040000) 2 添加对我们 mini2440 开发板上 2m 的 nor flash(型号为 sst39vf1601)的支持。 在 u-boot 中对 nor flash 的操作分别有初始化、擦除和写入,所以我们主要修改与硬件 密切相关的三个函数 flash_init、flash_erase、write_hword,修改代码如下: #gedit board/samsung/my2440/flash.c 湖南科技大学本科生毕业设计(论文) - 20 - /#define main_sect_size 0x10000 #define main_sect_size 0x1000 /#definemem_flash_addr1(*(volatileu16 *)(config_sys_flash_base + (0x00000555 flash_id / if (info-flash_id /* wait until flash is ready */ /chip = 0; /do / result = *addr; / /* check timeout */ / if (get_timer_masked () / config_sys_flash_erase_tout) / mem_flash_addr1 = cmd_read_array; / chip = tmo; 湖南科技大学本科生毕业设计(论文) - 22 - / break; / / if (!chip / / if (!chip / / while (!chip); /mem_flash_addr1 = cmd_read_array; /if (chip = err) / rc = err_prog_error; / goto outahere; / /if (chip = tmo) / rc = err_timout; / goto outahere; / 6 修改 write_hword 函数如下: mem_flash_addr1 = cmd_unlock1; mem_flash_addr2 = cmd_unlock2; /mem_flash_addr1 = cmd_unlock_bypass; mem_flash_addr1 = cmd_program; /*addr = cmd_program; *addr = data; /* wait until flash is ready */ /chip = 0; /do / result = *addr; / /* check timeout */ / if (get_timer_masked () config_sys_flash_erase_tout) / chip = err | tmo; / break; / 湖南科技大学本科生毕业设计(论文) - 23 - / if (!chip / if (!

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论