下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
基于S3C44B0X的Bootloader的设计与实现
成转鹏,张跃,张和君时间:2008年04月11日
字体:大中小
关键词:<"cblue""/search/?q=硬件平台"target='_blank'>硬件平台<"cblue""/search/?q=串口"target='_blank'>串口<"cblue""/search/?q=上电"target='_blank'>上电<"cblue""/search/?q=映象"target='_blank'>映象<"cblue""/search/?q=向量表"target='_blank'>向量表
摘要:介绍一种利用GNU工具链开发基于S3C44B0X<"cblue""/search/?q=硬件平台"title="硬件平台">硬件平台的Bootloader的方法,详细分析了Bootloader的构架、内存分布、异常/中断处理以及编译链接过程,说明了Bootloader需要完成的主要任务和实现方法。
关键词:引导装载程序S3C44B0X嵌入式系统GNU工具
Bootloader是系统<"cblue""/search/?q=上电"title="上电">上电/复位后,内核启动程序之前执行的一段程序,其功能是初始化硬件设备后,将操作系统内核从固态存储器中装载到RAM中并引导其运行,它是嵌入式系统开发的一个难点,在整个开发中占有相当大分量。由于高度依赖CPU体系结构和目标板的硬件配置,并没有一个通用的Bootloader程序可供开发者使用,因此需要自行开发或是移植。GNU组织倡导了一整套著名的自由软件,包括Linux操作系统、编译开发工具(gcc,g++,as,ld)、项目开发管理工具make以及基于不同硬件平台的开发库,是目前嵌入式开发者常用的软件开发平台。本文以三星公司的S3C44B0X为硬件平台,利用GUN开发工具,给出了Bootloader的一种设计和实现方案。
1基于ARM7TDMI内核的S3C44B0X的特点
S3C44B0X是Samsung公司生产的一款16/32位RISC处理器,为手持设备和一般应用提供了高性价比和高性能的微控制器解决方案,使用ARM7TDMI内核,最高工作频率可达66MHz,拥有71个多功能I/O,并提供了丰富的内置部件,包括8KBCache和内部SRAM,LCD控制器,2通道UART,带PWM功能的5通道定时器,8通道10位ADC等。S3C44B0X微处理器不具有MMU,不支持虚拟内存管理和内存保护。
2建立交叉编译环境
交叉编译就是在一个平台上生成可以在另一个平台上执行的代码,由于嵌入式微处理器S3C44B0X上无法安装人们所需要的编译器,只好借助于宿主机,生成可以在目标机S3C44B0X上运行的代码格式。在本课题设计中,将使用嵌入式开发中最普遍的GNU编译工具。
为了生成能在S3C44B0X上允许的代码,需要下载脚本文件arm-elf-tools-20030314.sh,然后在宿主机上安装该工具链。GNU软件包括C编译器、C++编译器G++、汇编器AS、链接器LD等,GNU开发工具都是使用命令行的方式,更贴近编译器和操作系统的底层,提供了更大的灵活性,有助于开发者了解系统设计的基础知识。
3Bootloader的设计与实现
嵌入式设备与环境中的Bootloader类似于PC系统的BIOS,是系统最底层的引导软件。Bootloader固化在CPU的上电/复位的启动地址处(ARM7TDMI的CPU上电后默认从地址0x0处开始执行)。每当硬件设备上电/复位时,CPU总是先执行Bootloader,初始化硬件设备,改变处理器运行模式和重组中断向量,建立内存空间的映射图,将系统的软硬件环境带到一个由用户定制的特定状态,然后从远程主机或者本地非易失存储设备中装载可执行文件或操作系统,为整个嵌入式系统准备运行环境。
3.1硬件平台分析
硬件平台是基于ARM7TDMIRISC内核的samsung公司的S3C44B0X微处理器,整个系统拥有2MB的Flash,其地址从0x00000000-0x001FFFFF,有8MB的SDRAM,其地址从0x0C000000-0x0C7FFFFF,有一个USB1.1接口,及以太网口,还有两个<"cblue""/search/?q=串口"title="串口">串口和一个调试接口。这里将JTAG接口转换为并口连接方式,可直接与计算机的并口相连,避免使用昂贵的JTAG仿真器,串口主要用来输出调试信息和输入用户控制字符。
3.2Bootloader的具体设计
每种不同的CPU体系结构都有不同的Bootloader,除了依赖于CPU的体系结构外,Bootloader还依赖具体的嵌入式设备的配置。本文将BootLoader的设计分为Stage1和Stage2两大部分,依赖于CPU体系结构的代码,例如设备初始化代码等,通常都放在Stage1中,而且通常都用汇编语言来实现,以达到短小精悍的目的,而Stage2则通常用C语言来实现,这样可以实现复杂的功能,而且代码会具有更好的可读性和可移植性。
3.2.1Bootloader的总体构架
针对硬件平台特点和嵌入式开发中的功能需求,设计了丰富的Bootloader管理功能:串口下载、USB下载、网卡的Tftp服务器、Flash烧写程序、Linux启动程序等。Bootloader工程的目录结构如图1所示,共设置为两级。第一级目录下的Makefile和Bootloader.ld是整个工程的编译文件和链接文件;Stage1.s是Stage1的汇编代码文件。第二级目录为Stage2,其中包括编译文件Makefile、链接文件Stage2.ld、主管理程序Stage2.c,以及各个功能模块Xmodem.c、Usb.c、Tftp.c、Flash.c、Linux.c等。
3.2.2Bootloader的内存分布
硬件平台的Flash空间为2MB(0x00000000-0x001FFFFF),SDRAM空间为8MB(0x0c000000-0x0C7FFFFF)。如图2对Bootloader进行内存布局,从零地址处开始存放Bootloader的整体执行<"cblue""/search/?q=映象"title="映象">映象,Stage1部分存放在最开始处,以便系统一上电/复位就能执行Stage1。0x0C700000以上的部分用于放置Stage2的RAM拷贝。0x0C7FFF00以上的255个字节存放中断服务程序的地址,以下部分用作S3C44B0X的5个运行模式(Undef模式、Abort模式、IRQ模式、FIQ模式、SVC模式)的堆栈。
3.2.3异常/中断处理
S3C44B0X总共有8种异常/中断,CPU发生异常/中断时,会自动跳转到从0x00000000地址开始的中断<"cblue""/search/?q=向量表"title="向量表">向量表中的某个表项处读取指令运行,由于Bootloader最终要引导μCLinux运行,而μCLinux要求中断向量表设置在可随机读写的RAM中,为了能够与μCLinux兼容,这里设置了两级中断向量表:第一级为零地址处的中断向量表,第二级向量表放在RAM的开始地址0x0C000000处,第一级仅是简单地向第二级跳转。从0x0C7FFF00地址处开始存放各个异常/中断服务程序的地址。
在异常服务和中断服务处理中,将与中断相关的例行固定不变的任务形成一个“系统函数”,而相应的中断处理任务用C代码编写形成“用户函数”,这样可以提高编程和开发的灵活性,实现了Bootloader良好的接口和封装性能。在其他功能程序中只需要编写“用户函数”,并可以将“用户函数”的地址任意重构到0x0C7FFF00开始的RAM中。异常/中断的整个处理过程如图3所示。
3.2.4Stage1与Stage2的设计分析
Bootloader的Stage1部分是硬件上电/复位开始执行的操作,一般用汇编代码来编写,其目的是为Stage2的执行以及随后kernel的执行初始化硬件环境,主要包括以下步骤:屏蔽所有的中断->设置CPU的速度和时钟频率->关闭CPU的指令/数据Cache->设置CPU的8个bank配置->设置RAM控制器(包括刷新时序)->拷贝Stage2到地址0x0C700000->设置堆栈指针SP。在上述一切都就绪后,就可以跳转到Stage2去执行了,在ARM系统中,可以通过修改PC寄存器为相应的地址来实现。
Stage2继续初始化本阶段用到的硬件设备,包括I/O、Cache、中断控制器和串口等,当所有硬件初始化完毕之后,开中断,打印出提示信息。在Stage2阶段,还有一个重要功能就是建立操作界面,提供各种调试功能,以方便用户的开发。可以利用Windows的超级终端建立与S3C44B0X串口的连接,完成Bootloader的管理和引导功能,包括串口下载、USB下载、网口下载、Flash烧写以及操作系统的引导等。在调试阶段,将整个管理过程设置成一个无限循环,不停地从串口接收和执行用户命令。若执行的是μClinux引导命令,则系统从此进入μClinux,而不再返回Bootloader。
3.3Bootloader的编译和链接
采用针对ARM的GNU工具链来对整个Bootloader工程文件进行编译和链接,具体流程如图4所示。先编译生成Stage2的二进制可执行映象Stage2.bin;然后用二进制文件转换工具bin2c将其转化为只包含一个一维数组的c文件Stage2_bin.c,GNU工具在对工程进行第二次链接的时候可以在其他程序定位到数组首地址,从而得到数组的内容,达到直接调用Stage2.bin的目的;最后将文件Stage2_bin.c和Stage1.s一起编译生成总的Bootloader映象,Stage2_bin.c中的Stage2映象数组最终被编译进Bootloader中的数据段。把Stage1的可执行映象作为代码段,把Stage2的可执行映象作为数据段。Bootloader在Stage1的执行过程中,就可以把自己的数据段(即Stage2)拷贝到RAM中,然后跳转执行。用arm-elf-ld链接各目标文件时需要编写链接脚本文件,指定正确的加载时域和运行时域,对于Stage1,加载时域和运行时域都为0x00000000开始的Flash地址空间,Stage2运行时域被安排到0x0C700000RAM空间。
4μCLinux操作系统的引导
μCLinux的引导共有两种形式:自举模式和加载模式,分别适应于嵌入式系统的开发阶段和产品发布阶段。Bootloader的引导工作主要是为μCLinux操作系统准备启动参数,包括RAM板块的组织、内核启动命令行、ramdisk在RAM中的位置、硬件的版本、图形卡参数等信息。在μCLinux操作系统中,通常需要由Bootloader来设置ATAG_CORE、ATAG_MEM、ATAG_CMDLINE、ATAG_
RAMDISK、ATAG_INITRD等。Bootloader调用μCLinux内核的方法同调用一般应用程序一样,直接跳转到内核的第一条指令处。根据内核启动协议,在跳转时要满足下列几个条件:
(1)CPU寄存器的设置:R0=0、R1=机器类型ID、R2=启动参数标记列表在RAM中起始基地址。
(2)CPU模式:必须关闭所有中断、CPU必须为SVC工作模式。
(3)Cache和MMU的设置:MMU必须关闭、数据Cache必须关闭。
设计和实现一个性能良好的Bootloader,可以大大增强系统的稳定性,提高系统的实时性。目前开发的Bootloader已成功应用于一款心电监护设备中。本文给出的一种利用GNU工具链开发基于S3C44B0X的Bootloader方法,体现了Bootloader的结构和功能,可以举一反三,设计并定制出各种硬件平台的Bootloader,实现
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026贵州黔南州荔波县事业单位引进高层次人才和急需紧缺专业人才18人备考题库附答案详解(突破训练)
- 2026河南黄金叶投资管理有限公司所属企业大学生招聘18人备考题库带答案详解
- 新生儿呼吸窘迫综合征管理的欧洲共识指南要点2026
- 2026云南玉溪市红塔区凤凰街道葫田社区居民委员会社区专职网格员招聘1人备考题库附参考答案详解(满分必刷)
- 2026浙江宁波市镇海区急救中心编外人员招聘1人备考题库附答案详解(精练)
- 2026上半年安徽黄山市休宁城乡建设投资集团有限公司及权属子公司招聘18人备考题库及完整答案详解一套
- 2026江西赣州市托育综合服务中心招聘业务园长1人备考题库含答案详解(模拟题)
- 2026江苏南通如东县岔河镇村卫生室工作人员招聘2人备考题库及答案详解【必刷】
- 吉林银行2026届春季校园招聘备考题库及参考答案详解1套
- 2026广西贵港市桂平市垌心乡卫生院招聘编外人员1人备考题库附答案详解(预热题)
- 家校共育促学生成长课件
- 无机材料科学第四章非晶态结构与性质之玻璃体
- 儿科疾病作业治疗
- 计算机辅助设计教案
- YS/T 885-2013钛及钛合金锻造板坯
- GB/T 34755-2017家庭牧场生产经营技术规范
- GB/T 19274-2003土工合成材料塑料土工格室
- 压力性损伤与失禁性皮炎的鉴别
- GA/T 1202-2014交通技术监控成像补光装置通用技术条件
- “新网工程”专项资金财税管理与专项审计方法课件
- 安全爬梯受力计算正文
评论
0/150
提交评论