RM+Linux嵌入式系统的BootLoader分析与开发.doc
《RM+Linux嵌入式系统的BootLoader分析与开发.doc》由会员分享,可在线阅读,更多相关《RM+Linux嵌入式系统的BootLoader分析与开发.doc(68页珍藏版)》请在三一办公上搜索。
1、 毕业论文ARM+Linux嵌入式系统的BootLoader分析与开发系 别电子信息系专业名称通信工程班级学号学生姓名指导教师2010年 06 月 10 日ARM+Linux嵌入式系统的BootLoader分析与开发摘 要在计算机、互联网和通信技术高速发展的同时,嵌入式系统开发技术也取得迅速发展,嵌入式技术应用范围的急剧扩大,但是在嵌入式系统设计中,针对嵌入式处理器和操作系统的BootLoader代码的设计是一个难点,在基于ARM9核的嵌入式处理器芯片的mini2440开发板上进行设计,总结出嵌入式处理器芯片的BootLoader设计的一般模式和其中的一些关键技术,并给出了BootLoader
2、的详细设计流程。关键词:嵌入式系统,ARM,BootLoader,Linux,S3C2440The Analysics and Expoite of BootLoader base on ARM and Linux Embedded System AbstractWhen computer,Internet and telecom technology developing quickly,embedded system is also developing fast,Application of embedded system is more and more,But in embedded
3、 system design,it is difficult to design a BootLoader for embedded CPU and operation system,In this paper,a design and realization of BootLoader of embedded processor chip called mini2440 based on ARM9,It gives the main framework of BootLoader and explains the key technology.Furthernore ,it shows fl
4、ow chart in detail.Key Words: Embedded system, ARM, BootLoader,Linux, S3C2440目录1 绪论11.1 研究背景和研究意义11.2 主要研究内容和技术问题11.3 研究方法、论文构成和创新之处22嵌入式LINUX+ARM开发环境介绍32.1 硬件环境构建32.1.1 嵌入式Linux操作系统介绍32.1.2 Linux作为嵌入式操作系统的优势32.1.2 ARM处理器介绍42.1.2.1 ARM处理器工作状态42.1.2.2 ARM处理器模式42.1.3 ARM处理器寄存器介绍52.2 交叉编译工具的基本使用62.2.1
5、GCC的编译流程62.3 Makefile编写62.3.1 Makefile介绍62.3.2 Makefile的规则72.3.3 Makefile的变量82.3.4 Make命令的使用92.4 ARM常用汇编指令和数据结构92.5构建嵌入式交叉编译环境103.BOOTLOADER分析部分123.1 常用的BootLoader介绍123.1.1rrload介绍143.1.2U-Boot介绍153.1.3 Blob介绍163.1.4 Vivi介绍173.2 ARM9嵌入式系统193.2.1 GPIO接口193.2.1.2 GPIO接口介绍193.2.1.2 GPIO硬件接口控制寄存器设置193.2
6、.2 存储控制器203.2.2.1 存储控制器的寄存器的设置203.2.3 内存管理单元MMU233.2.3.1 S3C2440内存管理单元MMU介绍233.2.3.2 存储管理单元的功能233.2.4 NAND Flash控制器233.2.4.1 NAND Flash访问方法231.2.4.2S3C2440 NAND Flash控制器设置243.2.5 系统时钟和定时器253.2.5.1 S3C2440时钟体系253.2.5.2 PWM定时器263.2.6 通用异步收发器UART283.2.6.1 UART工作原理283.2.6.2 S3C2440 UART的操作和寄存器设置293.3 Xm
7、odem串口传输协议分析303.4 堆初始化和实现机制313.5 内核参数传递分析324.BOOTLOADER分析部分364.1 阶段1:/M-boot/head.S364.1.1 关闭Watch Dog364.1.2 禁止所有中断364.1.3 初始化系统时钟364.1.4 初始化内存控制寄存器374.1.5 点亮所有的LED,开启蜂鸣器显示程序进度384.1.6 初始化UART0394.1.7 复制代码到SDRAM404.1.8 跳到BootLoader的阶段2(main)函数中运行424.2 阶段2:424.2.1 打印开发板及其相关信息434.2.1 初始化开发板434.2.3 建立页
8、表和启动MMU454.2.4 初始化堆栈,heap_init()464.2.5 初始化私有数据474.2.6 启动内核或进入菜单选择界面474.3 程序调试与运行484.3.1 单元模块化调试494.3.2 集成和功能调试495.结论52致 谢53参考资料54附 录55附 录A55英语原文55中文译文60附 录B63附 录C641 绪论1.1 研究背景和研究意义随着微电子技术和计算机技术的发展,微处理器芯片的功能越来越强大,嵌入式技术也越来越受到人们的关注。嵌入式系统是以应用为中心,以计算机技术为基础,软硬件均可裁剪来适应系统对功能、可靠性、成本、体积、功耗要求严格的专用计算机系统。随着各种微
9、处理器功能越来越强大以及软件商操作系统的支持,使得整个嵌入式系统拥有了完整构架。近年来各种嵌入式操作系统也是层出不穷以适应各种不同功能处理器。然而如何加载操作系统成了嵌入式系统首要技术难点。启动加载程序-BootLoader,把嵌入式硬件和嵌入式操作系统衔接起来,对于嵌入式系统后续软件的开发十分重要,在整个开发中也占有相当大的比例。嵌入式系统中目前比较流行的BootLoader有以下几种类型:德国DENX小组开发的U-boot,是一种通用的引导程序,功能非常强大,支持X86、ARM和PowerPC等体系处理器;韩国mizi公司开发的vivi,适用于ARM9处理器,主要用于三星S3C2410处理
10、器即SMDK2410开发板的引导Linux;Red Hat公司开发的以eCosw为基础的RedBoot,几乎能够支持所有的体系结构,如X86、ARM、PowerPC 和MIPS等;来自LART计划的引导程序blob,仅支持ARM系列处理器,但其代码短小精悍;以上这些BootLoader几乎都是开放源代码的;而国内除了大公司如北京中科红旗等自己开发针对相应平台的BootLoader外,其他的国内嵌入式系统是在功能强大且成熟的BootLoader如U-boot或vivi等基础上,修改或移植到相应的开发板上作为引导程序。1.2 主要研究内容和技术问题1、本文介绍了嵌入式系统的开发流程以及构建嵌入式开
11、发环境,掌握Makefile的阅读、编写和使用,掌握ARM下汇编指令和C语言常用的数据结构和算法。2、立足于国外几款优秀的开放源代码的BootLoader程序,掌握BootLoader开发的一般流程和开发过程中的一些关键技术,如串口、网络下载传输协议,掌握tag list内核参数传递技术。1.3 研究方法、论文构成和创新之处1、研究方法:通过书店 、图书馆、网络等途径进行资料的收集和整理,特别是网站的相关嵌入式论坛,这里是查找资料和学习嵌入式的一条重要的途径,这里聚集了很多嵌入式爱好者,能够提供很多的资料和他们自身的学习经验,通过借鉴他们的经验和失败的教训,可以让自己避免走很多弯路。2、创新点
12、:本文是在通过对U-boot和vivi这两款优秀的BootLoader的源代码进行分析,透彻的理解BootLoader开发原理的基础上,结合嵌入式系统硬件特点,综合了U-boot和vivi各自的优点和功能,开发自己的BootLoader程序;本文避免空谈理论, 在大量的理论分析的基础上,最后在实际的开发板上实践操作。3、论文构成:本文主要由两部分构成,第一部分是理论分析部分,主要是构建嵌入式开发环境、ARM9的硬件基础操作以及BootLoader下的各个模块的分析;第二部分是具体代码实现部分,在第一部分的分析基础上,针对各个模块功能的代码实现和在具体硬件开发班上的调试运行。2嵌入式Linux+
13、ARM开发环境介绍2.1 硬件环境构建2.1.1 嵌入式Linux操作系统介绍 Linux是一个成熟而稳定的网络操作系统。将Linux植入嵌入式设备具有众多的优点。首先,Linux的源代码是开放的,任何人都可以获取并修改,用之开发自己的产品。其次,Lirmx是可以定制的,其系统内核最小只有约134kB。一个带有中文系统和图形用户界面的核心程序也可以做到不足1MB,并且同样稳定。另外,它和多数Unix系统兼容,应用程序的开发和移植相当容易。同时,由于具有良好的可移植性,人们已成功使Linux运行于数百种硬件平台之上。 2.1.2 Linux作为嵌入式操作系统的优势Linux作为嵌入式操作系统的优
14、势主要有以下几点: 1、 可应用于多种硬件平台。Linux已经被移植到多种硬件平台,这对于经费,时间受限制的研究与开发项目是很有吸引力的。原型可以在标准平台上开发后移植到具体的硬件上,加快了软件与硬件的开发过程。Linux采用一个统一的框架对硬件进行管理,从一个硬件平台到另一个硬件平台的改动与上层应用无关。Linux可以随意地配置,不需要任何的许可证或商家的合作关系,源代码可以免费得到。这使得采用Linux作为操作系统不会遇到任何关于版权的纠纷。毫无疑问,这会节省大量的开发费用。本身内置网络支持,而目前嵌入式系统对网络支持要求越来越高。Linux的高度模块化使添加部件非常容易。 2、 Linu
15、x是一个和Unix相似、以内核为基础的、具有完全的内存访问控制,支持大量硬件(包括X86,Alpha、ARM和Motorola等现有的大部分芯片)等特性的一种通用操作系统。其程序源码全部公开,任何人可以修改并在GUN通用公共许可证(GNU General Public License)下发行。这样,开发人员可以对操作系统进行定制,适应其特殊需要。 3、 Linux带有Unix用户熟悉的完善的开发工具,几乎所有的Unix系统的应用软件都已移植到了Linux上。Linux还提供了强大的网络功能,有多种可选择窗口管理器(X Windows)。其强大的语言编译器GCC,C+等也可以很容易得到,不但成熟
16、完善,而且使用方便。 由于Linux是一个内核源代码开放、具备一整套工具链、有强大的网络支持及成本低廉的操作系统,因此嵌入式Linux自诞生起就秉承了这众多独特优势,这使它正在并越来越多地受到人们的关注。可以预见,嵌入式Linux将在未来的通信用嵌入式操作系统中占据强有力的地位。2.1.2 ARM处理器介绍ARM是Advanced RISC Machines的缩写,顾名思义,ARM处理器是一种典型的精简指令集处理器。ARM9处理器采用ARMV4T(哈佛)体系结构。这种体系结构是一种将程序指令存储器和数据存储器分开的存储器结构,是一种并行体系结构。其主要特点是程序和数据存储在不同的存储空间中,即
17、程序存储器和数据存储器。它们是两个相互独立的存储器,每个存储器独立编址、独立访问。2.1.2.1 ARM处理器工作状态ARM处理器的工作状态:ARM微处理器的工作状态一般有两种,并可在两种状态之间切换:第一种为ARM状态,此时处理器执行32位的字对齐的ARM指令;第二种为Thumb状态,此时处理器执行16位的、半字对齐的Thumb指令。在程序的执行过程中,微处理器可以随时在两种工作状态之间切换,并且,处理器工作状态的转变并不影响处理器的工作模式和相应寄存器中的内容。但ARM微处理器在开始执行代码时,应该处于ARM状态。 2.1.2.2 ARM处理器模式ARM微处理器支持7种运行模式,分别为:用
18、户模式(usr):ARM处理器正常的程序执行状态。快速中断模式(fiq):用于高速数据传输或通道处理。外部中断模式(irq):用于通用的中断处理。管理模式(svc):操作系统使用的保护模式。数据访问终止模式(abt):当数据或指令预取终止时进入该模式,可用于虚拟存储及存储保护。系统模式(sys):运行具有特权的操作系统任务。定义指令中止模式(und):当未定义的指令执行时进入该模式,可用于支持硬件协处理器的软件仿真。ARM微处理器的运行模式可以通过软件改变,也可以通过外部中断或异常处理改变。大多数的应用程序运行在用户模式下,当处理器运行在用户模式下时,某些被保护的系统资源是不能被访问的。除用户
19、模式以外,其余的所有6种模式称之为非用户模式,或特权模式;其中除去用户模式和系统模式以外的5种又称为异常模式,常用于处理中断或异常,以及需要访问受保护的系统资源等情况。2.1.3 ARM处理器寄存器介绍ARM处理器共有37个寄存器。其中包括:31个通用寄存器,包括程序计数器(PC)在内。这些寄存器都是32位寄存器。以及6个32位状态寄存器。 关于寄存器这里就不详细介绍了,有兴趣的人可以上网找找,很多这方面的资料。异常处理当正常的程序执行流程发生暂时的停止时,称之为异常,例如处理一个外部的中断请求。在处理异常之前,当前处理器的状态必须保留,这样当异常处理完成之后,当前程序可以继续执行。处理器允许
20、多个异常同时发生,它们将会按固定的优先级进行处理。当一个异常出现以后,ARM微处理器会执行以下几步操作:进入异常处理的基本步骤:将下一条指令的地址存入相应连接寄存器LR,以便程序在处理异常返回时能从正确的位置重新开始执行。将CPSR复制到相应的SPSR中。根据异常类型,强制设置CPSR的运行模式位。强制PC从相关的异常向量地址取下一条指令执行,从而跳转到相应的异常处理程序处。如果异常发生时,处理器处于Thumb状态,则当异常向量地址加载入PC时,处理器自动切换到ARM状态。 2.2 交叉编译工具的基本使用2.2.1 GCC的编译流程通常情况下,在嵌入式程序编译中,产生一个可执行文件程序需要经过
21、以下4个阶段:预处理、编译、汇编和链接。其中预处理和编译阶段使用arm-linux-gcc工具来完成;汇编阶段使用arm-linux-as工具完成;链接阶段使用arm-linux-ld工具完成,具体的细节流程如下图所示。C处理器cpp主要完成三个方面的任务:头文件包含、宏替换和条件编译的处理,并将处理后的结果交给编译器进行处理。arm-linux-gcc主要功能是将源程序编译成汇编代码,此外它还具有非常丰富的命令选项,可以隐含地调用cpp、arm-linux-as或者arm-linux-ld完成程序预处理、编译、汇编和链接等各个阶段的工作,可以通过这些命令选项的使用,是程序编译执行到不同的阶段
22、停下来,从而产生相应的目标文件。arm-linux-as汇编器的主要目的就是将编译程序的输出结果汇总成目标代码格式,用于连接程序。arm-linux-ld将多个目标文件连接成一个可执行文件。2.3 Makefile编写2.3.1 Makefile介绍在Linux环境下,工程管理器make是一个功能强大的工程管理工具,用于自动编译、连接程序的使用工具,通过Make工具能够比较容易地构建一个工程,整个工程的编译只需要一个命令就可以完成编译、连接和最后的执行。它大大提高了实际项目的工作效率,几乎所有的Linux下的项目(包括Linux内核本身)均涉及它。make程序的执行,需要一个配置文件-make
23、file,makefile文件主要描述程序文件之间的依赖关系,并提供跟新文件的命令,它规定了Make执行的动作和一切规则。一个makefile文件包含五个方面的内容:具体规则、隐含规则、定义变量、指令和注释。* 具体规则:用于阐述什么时间或怎样重新生成称为规则目标的一个或多个文件。它列举了目标所依赖的文件,这些文件称为该目标的依赖。具体规则可能同时提供了创建或更新该目标的命令;* 隐含规则:用于阐述什么时间或怎样重新生成同一文件名的一系列文件。它描述的目标是根据和它名字相同的文件进行创建或更新的一系列文件,同时提供了创建或更新该目标的命令;* 定义变量:是为一个变量赋一个固定的字符串值,从而在
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- RM Linux 嵌入式 系统 BootLoader 分析 开发
链接地址:https://www.31ppt.com/p-4144256.html