PXA272启动引导程序的实现和功能扩展

发布者:bobojrt最新更新时间:2012-03-26 来源: 微计算机信息关键字:启动引导  PXA272  嵌入式系统 手机看文章 扫描二维码
随时随地手机看文章

嵌入式系统是以应用为中心,以计算机技术为基础,软硬件可裁减、适应应用系统对功能、可靠性、成本、体积、功耗等有严格要求的专用计算机系统。嵌入式系统是一个层次性结构,从底层到应用分别是:硬件、启动引导程序、嵌入式操作系统(Linux)、文件系统、应用系统。系统上电或硬件复位后,CPU执行的第一段代码就是启动引导程序,启动引导程序在嵌入式Linux系统的设计与实现的过程中起着重要的作用。

1、Bootloader的工作原理与功能

1.1 工作原理

Bootloader是系统内核运行之前运行的代码,BootLoader完成内核加载启动。嵌入式系统开发过程,常涉及底层BOOT LOADER移植,操作系统引导、应用程序运行都与Bootloader有关,所以说Bootloader移植是嵌入式系统开发基础。不同CPU体系结构对应不同Bootloader,另外Bootloader的实现也依赖于具体板级硬件。

嵌入式开发首先根据目标板特性开发Bootloader,依次完成下面任务:初始化底层硬件(CPU、存储器);设置堆栈、Cache;代码重定向;加载内核、文件系统映像;设置内核启动参数;启动内核,控制权转交给操作系统。

1.2 Bootloader主要功能

    设计一个Bootloader,须具备以下基本功能:

l    正确初始化硬件,使系统平台正常启动。

l    提供映像文件加载接口,通过串口、网口下载映像到Flash,为内核启动作准备。

l    加载Linux内核到RAM中,启动内核和文件系统,并进一步启动应用程序。

而完备的Bootloader,还可以扩展测试功能:

l    开发板设计开发调试过程,Bootloader通过交互界面与系统平台交互,测试平台器件。

l    开发阶段,可以用于调试内核。系统内核能正常启动是Bootloader的最终目标。

l    提供串口交互的命令控制台。支持配置功能:设置IP,MAC,系统时间等。

Bootloader有两种操作模式:启动加载模式和下载模式;启动加载模式是开发板发布后提供的稳定工作模式;下载模式一般是在开发阶段的工作模式,提供串口交互界面。

2、PXA272硬件平台

Pxa272是最新推出的32位XScale RISC核心微处理器,兼容ARMv5TE指令;工作频率可达520MHz;采用7级超流水线结构;支持Intel Wireless MMXTM指令集增强多媒体处理功能;动态电源管理实现低功耗;提供32KB D/I Cache;集成64M Flash和265K SRAM;

硬件平台是基于Pxa272微处理器的自研发的开发板Uranium V0.90。硬件结构中的主要器件:AC97、SDRAM、TFT LCD、触摸屏、网络LAN、PCMCIA插槽等外设。

3、Bootloader映像文件结构设计

Bootloader结构由链接脚本决定,链接脚本用于控制目标文件格式。决定如何将各目标文件合并起来并安排数据和符号的位置。通常在编译的最后一步完成。脚本主要目的描述如何将输入文件的各段映射到输出文件中,控制目标文件的布局。脚本文件Uranium.lds的结构:

OUTPUT_ARCH(arm)//指定ARM目标板体系结构

ENTRY(_start)        //_start为程序入口

SECTIONS {   . = 0x00000000;

__boot_start = .;    //汇编中指定的boot起址

.start       ALIGN(4) : { *(.text.start)} //文件text段

.text ALIGN(4) : { *(.text) }

.rodata ALIGN(4) : {*(.rodata)}    //只读data段

.data       ALIGN(4) : {*(.data) }              //可读写data段

.got ALIGN(4) : {*(.got) }           //全局偏移量表

__boot_end = .;                           //bootloader终址

.bss ALIGN(16) :{*(.bss) }         //未初始化data段

……}[page]

ARM体系结构微处理器在复位后PC指向0x00000000,PXA272片载Flash连接在nCS0上,将Flash映射到0x00000000作为启动存储器。

4、Bootloader的实现与扩展

启动引导程序分成硬件初始化(Boot)和内核加载两个部分(Loader);Boot部分与处理器体系结构紧密相关,通常用汇编语言实现;Loader部分在完成硬件初始化后,将加载映像文件并启动内核,这部分一般用C语言实现。

4.1硬件初始化(Boot)

可执行Boot映像必须且只有一个全局入口。在汇编文件Start.S中指定入口:

_start : b start

Bootloader由多个文件组成。首先是汇编语言实现的Start.S,完成底层硬件初始化:

start: bl   define_gpio     //设置gpio

       bl    enable_cpu            //设置CPU时钟

       bl    setup_memory       //初始化静动态存储器

       bl    relocate_boot  //复制boot代码

       bl    setup_stack           //建立堆栈

       bl    clear_bss              //清除bss段

       ldr   pc, =main              //跳转到C代码

切换CPU工作模式、屏蔽中断。启动引导程序不需要处理中断,所以要屏蔽所有中断。

设置CPU:PXA272提供动态时钟和电源管理,可以根据应用负荷,选择CPU的工作模式;PXA272电源管理提供四种工作模式:Turbo模式、运行模式、空闲模式、睡眠模式。

建立堆栈和清除数据区:堆栈、DATA、BSS段初始化是运行C代码前必要条件。C语言函数编译必须提供堆栈存放临时变量、调用位置、寄存器信息。除堆栈外,需DATA段和BSS段存放C代码中有初始值的全局或静态变量以及没有指定初始值的全局变量。

系统存储器初始化:通过配置功能寄存器来实现;在Pxa272上电后,SDRAM处于睡眠无时钟状态,初始化必须完成SDRAM状态机转化过程,相关的寄存器:MDREFR、MDCNFG等。SDRAM的状态转换通过配置存储器的相应位,产生对应的命令实现状态机转换[1]。

 

4.2内核加载(Loader)

为加载内核,需初始化必要设备:网络接口、串行接口、Flash等;PXA272支持BTUART(蓝牙)、FFUART(全功能串口)、 STUART(标准串口)。可以通过串口实现与终端用户的交互,终端打印信息是非常重要的调试手段。片载的Flash遵循CFI规范(Common Flash Interface)。

内核加载前规划好内存空间:设置内存大小和起始地址,BootLoader、内核、ramdisk、root镜像在flash和SDRAM中的存放区域、大小。在这里确定好下载各个镜像文件存放的地址以及镜像加载后释放的位置。内存地址的安排关系到操作系统能否正常的启动、运行。

Parts[i].name = "XXXX";   //镜像名(Boot/Kernal/Ramdisk)

Parts[i].sramb = XXXX_SRAM_BASE;//在flash中的基地址

Parts[i].srams = XXXX_MAX_SIZE;  //在flash中镜像大小

Parts[i].dramb = XXXX_DRAM_BASE; //在DRAM中的基地址

Parts[i].drams = 0;

Parts[i].maxs = XXXX_MAX_SIZE;  //镜像大小

这里基本确定flash和DRAM的地址映射。[page]

图2 地址映射图

加载内核、文件系统映像,设置启动参数:读取映像大小和格式,将映像从Flash定向到RAM。定向后,就可启动 Linux 内核。启动内核前,要作些准备工作:设置启动参数。Linux 2.4.x 以后的内核以标记列表(tagged list)形式传递启动参数。由Boot Loader设置常见启动参数:ATAG_CORE、ATAG_MEM、ATAG_CMDLINE、ATAG_RAMDISK、ATAG_INITRD 等。启动参数列表以标记 ATAG_CORE 开始,以标记 ATAG_NONE 结束。

……

tags = (struct tag *)BOOT_PARAMS;

tags->hdr.tag = ATAG_CORE; //以CORE开始

tags->hdr.size = tag_size(tag_core);

……

tags = tag_next(tags);    

tags->hdr.tag = ATAG_NONE; //以NONE结束

tags->hdr.size = 0;

……

Boot Loader 调用 Linux 内核的方法是直接跳转到内核的第一条指令处:

theKernel = (void *)mp->dramb;//Linux内核基址

theKernel (0, ARCH_URANIUM, 0xa0008000);

至此,Bootloader完成该作的工作,跳转到内核入口点,内核接管控制权,开始启动Linux。

4.3 启动程序的扩展

在开发板的硬件测试阶段,扩展命令接口,以协助硬件测试工作。

1.内存测试(MEM_TEST)[5]

测试存储器有3个部分:数据总线测试、地址总线测试和器件测试;优化通用的测试程序,能测试出错误,还对错误进行分析诊断,给出错误原因,并定位错误。

数据线测试(走1法):选择有代表性的写入值(0x01(单位),0x03(两个相邻位), 0x07(三个相连位),0x0F(四个相连位))。分别将值写入内存地址,写入后立刻读出与写入前的值比较,相等则将写入值逻辑左移一位作为下一次写入值。如此。直到所有值被测试完。如有不等,则报错将写入前后的值显示出来。

地址线测试:取测试值0xaaaaaaaa,选择测试地址,分别写入测试值,比较写入前后值。然后取其反值为测试值写入测试地址。改换测试地址,按从低向高的顺序依次写入1的递增值,比较写入前后的值;再按上一步的地址顺序写入1递增值反值,比较写入前后值;在每步写入前后值的比较中如果不一致,就输出出错的地址和写入前后的值。

器件测试:用来测试器件完成性,确定器件每一位正确。选择一组随地址变化的值写入内存,再读出比较。然后取这些值的反写入内存验证。

如测试内存代码放在SDRAM上,测试时会修改内存,这样会造成系统崩溃。所以测试内存时,把代码放在PXA272片载SRAM上。

2.液晶屏测试(LCD_TEST):启动引导程序没用到LCD,为确定目标板的LCD正常工作,提供LCD_TEST命令测试LCD。点亮LCD前,初始化 LCD控制器寄存器,划出一块内存作为LCD显示缓冲区。通过参数来控制写入显示缓冲区中的数据以显示不同图形。

3.触摸屏测试(TS_TEST):ADS7843触摸屏芯片具备12位A/D转换和低导通电阻模拟开关,通过控制GPIO模拟ADS7843传输时序,将控制字送入ADS7843,再串行读取坐标值。最后,将读取的x和y坐标送串口显示。

除上述器件测试命令,还有SPI、RTC等命令。扩展命令对于处于硬件调试阶段的开发板非常重要,可以方便调试工作。同时也能体现Bootloader在嵌入式系统开发中的地位。

结束语

本文总结了设计和实现基于PXA272处理器开发板的Bootloader工作,对其功能进行扩展,扩展了一些硬件测试接口以方便硬件测试。在开发过程中,体会到要编写开发板的Bootloader,需要详细了解目标板平台结构、器件工作原理以及微处理器的体系结构,先从实现基本功能入手,再不断扩展。

本文作者创新点:对基于Pxa272的嵌入式系统的Bootloader的实现作了详细分析;对关键步骤SDRAM初始化工作详细说明;并将Bootloader的功能扩展应用于硬件平台的测试工作,给硬件工程师调试硬件提供一个良好的软件平台。

参考文献

[1]Intel PXA27X Processor Family Developer’s Manual[Z].Intel. October 2004

[2]Common Flash Memory Interface Specification Release2.0[Z].AMD. Dec 2001

[3]刘军芳,李众立.基于s3c2410开发板的Boot Loader的启动分析[J].微计算机信息,2006,6-2:201-203

[4]杜春雷.ARM 体系结构与编程[M].北京:清华大学出版社,

[5]马学文.嵌入式系统中Bootloader的设计和实现[J].计算机工程,2005,31-7:96-97

[6]张大波.嵌入式系统原理、设计与应用[M].北京:机械工业出版社.2005.01

关键字:启动引导  PXA272  嵌入式系统 引用地址:PXA272启动引导程序的实现和功能扩展

上一篇:Linux嵌入式视频直播监控系统
下一篇:基于J2ME的防汛信息系统的研究

推荐阅读最新更新时间:2024-03-16 12:56

uClinux在Nios II嵌入式平台上的移植研究
1. Nios II嵌入式处理器       Nios II是运行在FPGA上的五级流水线、单指令的RISC处理器,它专门针对Altera的可编程逻辑器件及片上可编程的设计思想做了相应的优化。作为一种可配置的精减的RISC处理器,它可以与用户自定义逻辑结合构成SOPC系统,并下载到Altera的可编程器件中。32位的Nios II软核,结合外部闪存以及大容量存储器,可以构成一个功能强大的32位嵌入式处理器系统。此外,利用Altera提供的IDE(Integrated development environment)开发工具 可以方便的在调试模式下调试处理器,提高开发的速度。       作者使用Cyclone II版Nio
[嵌入式]
基于ARM9的嵌入式Linux代码移植
0 引言 随着计算机技术、通信技术以及Internet的飞速发展。嵌入式系统已得到越来越广泛的应用。与此同时,嵌入式系统的复杂性也在不断增加,嵌入式操作系统已经成为其中最重要的组成部分。目前,市场上存在着众多的嵌入式操作系统,而在这些系统之中,兼有Linux和嵌入式优点的嵌入式Linux操作系统,凭借其在结构清晰、源代码开放性、裁剪性好,开发与使用均易实现等方面的优势,拥有巨大的市场前景和商业机会。当前嵌入式Linux的一个热点应用就是将Linux内核移植到一些典型的微控制器和微处理器上,提供操作系统层面支持,以实现嵌入式系统用软件的开发。 此研究基于Linux 2.6内核的嵌入式Linux系统,分析了所面临的理论问题、关
[单片机]
基于ARM9的嵌入式Linux代码移植
SoPC与嵌入式系统软硬件协同设计
摘要 软硬件协同设计是电子系统复杂化后的一种设计新趋势,其中SoC和SoPC是这一趋势的典型代表。SoPC技术为系统芯片设计提供了一种更为方便、灵活和可靠的实现方式。在介绍系统级芯片设计技术的发展由来后,重点介绍SoPC设计系统芯片中的软硬件协同设计方法,并指出它比SoC实现方式所具有的优势。 关键词 嵌入式系统软硬件协同设计片上可编程系统(SoPC) 1 概述 20世纪90年代初,电子产品的开发出现两个显著的特点:产品深度复杂化和上市时限缩短。基于门级描述的电路级设计方法已经赶不上新形势的发展需要,于是基于系统级的设计方法开始进入人们的视野。随着半导体工艺技术的发展,特别是超深亚微米(VDSM,0.25μm)工艺
[应用]
基于龙芯车载和便携设备嵌入式系统设计
1.龙芯2F 措置器的功能与特点 本系统采用的龙芯2F(LOONGSON-2F )措置器,是中国科学院计较手艺研究所最新发布的一款64 位MIPSⅢ指令集的通用RISC 微措置器。该措置器在国内首个采用了90nmCMOS 设计工艺,面积为35nm2,典型工作频率800MHz 下实测功耗为4~5W ,最高工作频率可达1G;最高浮点运算速度为每秒40/80 亿次双/单精度浮点运算,片内集成了PCI/PCIX 等IO 节制器,并集成片上二级CACHE、DDR2 内存节制器,很是适合高端嵌入式规模。 2.系统硬件结构设计系统的结构框架 龙芯2F(LOONGSON-2F )措置器为整个系统的节制中心,并承担所稀有据的措置使命。系
[嵌入式]
基于ARM嵌入式系统的SPI驱动程序设计
嵌入式系统已被广泛应用于国防电子、数字家庭、工业自动化、汽车电子等多种领域。在嵌入式开发过程中,许多系统通常使用串口驱动来满足通信要求,但在实际应用中,使用SPI通信方式会更加高效和快捷。SPI接口是一种高速、高效的串行接口技术,因而SPI设备在数据通信应用中十分方便。本文基于ARM9芯片的S3C2440和Linux操作系统,设计了一种SPI驱动程序,该驱动程序功能可靠灵活、易于移植,可应用于多种嵌入式平台,实现arm与设备之间的通信。 1 硬件说明 1.1 S3C2440开发平台 采用三星公司的SoC芯片S3C2440 作为核心处理器,主频为400 MHz,并与64 MB SDRAM和64 MB NAND Flash共同组成
[单片机]
实时嵌入式系统软件调试问题分析
本文将讨论常见的调试问题以及预防和检查这些故障问题的一些方法。 从历史角度上来看, 嵌入式 应用代码的调试流程可以分为两类。第一类调试流程是回答 我的代码现在执行到哪里? 的问题。当开发商依靠打印语句或者LED的闪烁来指示应用程序执行到某个节点的调试方法时,往往就属于这种情形。如果开发工具支持这种调试方法,可以沿着应用应当程序应当执行的路径插入断点。第二类调试流程是帮助回答 我看到的这一数值是从哪里来的? 这一问题。在这种情况下,人们往往依靠寄存器显示窗口观察变量信息、处理器内存的内容。人们还可以尝试单步执行,并且观察所有这些数据窗口以了解某个寄存器状态何时出现错误,内存位置何时得到错误的数据,抑或指针何时出现了误用。 当开发
[嵌入式]
基于ARM和μC/OS的在线磷酸根离子监测仪设计
  火力发电厂和大型工业锅炉,通常采用向炉水中添加少量磷酸盐以防止钙、镁水垢的生成,磷酸根浓度不够,不能有效防止结垢,磷酸根离子含量过高,会导致炉水的pH值变高。因此磷酸根离子浓度是炉水检测的重要参数。ARM处理器具备高性能、低功耗、低成本等优点,将其应用于在线磷酸根离子分析仪的管理控制系统,可以提高磷酸根分析仪的处理速度和精度。   1 结构及测量原理简介   磷酸根离子分析仪整体结构包括光路系统、水路系统和管理控制系统三个部分。   光路系统主要包括:专用的单色LED冷光源、比色皿和光电传感器。   水路系统由比色皿、柱塞泵、多通道切换阀、流通池、样水/标液切换阀、流量计、排污阀、溢流管等组成。   利用化
[嵌入式]
液晶显示器在嵌入式系统中的应用
摘要:介绍可预置画面的智能彩色液晶显示器YD-611;详尽描述显示器性能特点、接口方式及标准命令集;给出与嵌入式系统的接口方式、接口电路设计及具体编程方法。 关键词:智能 彩色液晶显示器 单片机 1 概述 彩色液晶显示器作为当代高新技术的结晶产,不但具有超薄平台、显示信息丰富、色彩逼真的特点,而且还具有体积小、耗电省、寿命长、无辐射、抗震、防爆等其它类型显示器无可比拟的优点,因而是工控仪表、 机电设备等行业更新换代的理想显示器件。另外,随着单片机与嵌入式系统应用领域的不断扩大,对于以单片机为核心构成的高档仪器仪表、信息家电、工控产品、数据采集等系统的人机界面友好性提供了越来越高的要求。要求不但可以显示汉字,还要显示图像
[电源管理]
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
  • ARM裸机篇--按键中断
    先看看GPOI的输入实验:按键电路图:GPF1管教的功能:EINT1要使用GPF1作为EINT1的功能时,只要将GPFCON的3:2位配置成10就可以了!GPF1先配 ...
  • 网上下的--ARM入门笔记
    简单的介绍打今天起菜鸟的ARM笔记算是开张了,也算给我的这些笔记找个存的地方。为什么要发布出来?也许是大家感兴趣的,其实这些笔记之所 ...
  • 学习ARM开发(23)
    三个任务准备与运行结果下来看看创建任务和任运的栈空间怎么样的,以及运行输出。Made in china by UCSDN(caijunsheng)Lichee 1 0 0 ...
  • 学习ARM开发(22)
    关闭中断与打开中断中断是一种高效的对话机制,但有时并不想程序运行的过程中中断运行,比如正在打印东西,但程序突然中断了,又让另外一个 ...
  • 学习ARM开发(21)
    先要声明任务指针,因为后面需要使用。 任务指针 volatile TASK_TCB* volatile g_pCurrentTask = NULL;volatile TASK_TCB* vol ...
  • 学习ARM开发(20)
  • 学习ARM开发(19)
  • 学习ARM开发(14)
  • 学习ARM开发(15)
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved