您好,欢迎来到年旅网。
搜索
您的当前位置:首页U-Boot移植问题分析及应用实例

U-Boot移植问题分析及应用实例

来源:年旅网
维普资讯 http://www.cqvip.com

应届塞 文章编号:1671-1041(2006)06_0096・02 仪器仪表用户 U-Boot移植问题分析及应用实例 ‘ 李志刚,周西峰 (南京邮电大学自动化学院, 南京2lOo03) 摘要:U-Boot是一个免费的开放源码的BootLoader(引导装载程序)程 序.用来完成嵌入式系统的加载启动任务。本文分析了U-Boot的启动流程 以及一些要点问题.并给出了U-Boot在AT91 RM9200处理器上的移植过 其主要过程如下: (1) 编程序入口,start.S是入口程序 (2)设置异常向量表,包括复位、未定义指令、软件中断、预 程和方法。 关键词:U-Boot;AT91 RM9200;移植 中图分类号:TP38文献标识码:B Problems analyze of U-Boot po rting and It’S application LI Zhi-gang,ZHOU Xi-feng (College of Automation,Nanjing University of Posts&Telecommunications,Nanjing 210003) Abstract:U-Boot is a BootLoader program of free and open source code,it is applied for finishing Loade r and booing tasks of embed system.The paper analyzed U-Boot’S booting sequence and some crucial important problems.then introduced Porting process and ways based on AT91 RM9200 processor. Key words:U-Boot;AT91 RM9200;porting 1 引言 BootLoader是嵌入式系统软件开发的第一个环节,它把操作 系统和硬件平台衔接在一起,通过初始化硬件设备、建立内存空间 的映射,为最终加载操作系统内核建立正确的环境。U—Boot是一 个免费的升放源码的BootLoader稃序,它支持多种体系结构的 CPU,如MIPS、ARM、等,还支持Linux、VxWorks等多种嵌 入式操作系统的引导。U—Boot与硬件设备密切相关。所以移植u —Boot时要根据具体的硬件配 来对源程序进行修改。 了解U—Boot的运行流程对移植是卜分必要的。下面先分析u -Boot的启动流程,然后分析移植过程中需要注意的两个要点问 题,地址映射问题和参数设置问题,最后给出了U—Boot在 AT9lRM92oo处理器上的移植过程和方法 2 U-Boot启动流程分析 U—Boot的启动可以分为两个阶段。第~阶段足硬件设备初始 化代码,与硬件密切相关.通常是朋 :编语言实现的 第二阶段是 用c语言来实现的,可以实现更复杂的功能,而且代码具有更好的 可读性和可移植性 U—Boot启动流程如图l所示。 汇棉磋平^口 把Ih=h ̄口q代码和数措 重定位到R^M 二二二[二二 设置异常向量衰 一、c蔷吾mth 曲 障: 训赡化 "M 一~ ……一 初始化:鬟撬哥存器 图I U-"Boot启动流程图 睡稿日期:2006 07-21 96 EIC Vo1.13 2006 No.6 取指令异常、数据异常、保留、正常中断和快速中断向量。异常向 量表是系统发生异常后自动跳转的一段处理函数入口表,在系统发 生异常时跳转到相应的程序去处理。 (3)设置CPSR状态寄存器,使ARM工作在SVC模式下。 (4)初始化SDRAM.为后面的设置堆栈做好准各 (5)初始化系统寄存器,包括设置时钟频率,关断内存管理单 元和数据,指令Cache,屏蔽所有中断。 (6)把Flash中的后半部分U—Boot代码和数据重定位到内存 空间中,以提高程序的执行速度。 (7)建立堆栈并初始化堆栈指针。堆栈指针的设置是为了跳转 到C语言代码作好准各,通常我们可以把堆栈指针SP设置在 RAM空间的最顶端,堆栈采用向下生长方式。 (8)跳转到c语言程序,进行CPU午JJ始化, 中断处理部分初 始化, Flash的初始化,环境变量初始化, 板级初始化, 串行口 初始化等一系列设备初始化。 (9)最后进入U—Boot的命令循环,接收用户从串口输入的命 令或直接执行预先定义的命令,比如启动操作系统 3移植U Boot的要点问题 3.1 地址分配问题 在U—Boot的移植过程中,弄清楚各个器件的地址映射。U —Boot在存储空间中的分布,环境变量等参数的存放地址等足很必 要的 下面以AT91RM92oo处理器为例来对此问题加以说明。 整个Flash和RAM的系统布局如图2所示。 J l . 蜘 M蛐 址空问 祖立f 蕞娓映博 内援肺愚 幅 件秉线 Fh,啪 £ 内摆 t 件 环 夏量 u oo 硅湛立件 图2整个FI ash. ̄DRAM的系统布局 圈2中地址0x21fo()()()o是U-Boot从外部Flash启动后,为丁 提高运行速度,把代码和数掘重定位到内存中的起始地址。这个地 址范围bJ。以任意安排.但通常较好的方案是安排到整个RAM空间 最顶端的1MB 在移植过程中,我们可以通过TEXT—BASE=0xx 来配置这个地址。 内核文件和根文件系统被分别安排在FIash起始地址为 0xl008o0oo和oxlO18o0oo的地址段内。运行时内核映像和根文件 系统映像被从Flash卜复制到RAM空间中 对于内核映像~般复 制到MEM—START+ox8()00这个基地址开始的1MB的内存范围 内。而对于根文件系统映像.一般将茛复制到ME M—START+ab【100000开始的地力 如图2中内核和根文件系统映 欢迎光临本刊网站http://www.eic.corn.cfl 维普资讯 http://www.cqvip.com

墨 塞周 像分别披复制到起始地址为0x20008000和Ox20100000的内存空 间。地址OxO到0x20008000的32K内存守 被 }ij米.Linux内 核在这段内仃中放首 些牟局数据结构,如启动参数和内核页表等 信息。需要注意的是U—Boot的映像,内核映像和根文件系统映像 罩者之间地址不能重叠,百 0会导致系统崩溃 值得=}.}=意的是环境变量的存储空间最好单独分配一个扇区,因 为后面对设簧的环境变量存储, 要先对其所在扇区进行擦除,这 样可以防IE把U—Boot的文件映像擦除掉。 应用实例 具是GNU Tools,使用的交叉编译环境足Cross-2.95.3 具体的移植步骤如下: (1)修改U Boot根目录下的Makefile文件:配置交叉编译环 境编译器路径 CROSSCOMPILE=/user/local/arm/295.3/bin/arm.tinux. —.(2)修改config.mk文件中的TEXT_BASE=0x21f00000 (3)对include/conifgs/at91rm9200dk.h文件的配置: 3.2参数设置问题 U—Boot的重要作用之就是设置内核的启动参数。通常需要 南UIBoot设旨的内核启动参数有:内核映像存放地址,根文件系 统映像地m,控制台信息等 U—Boot通过环境变量来保存设置的 启动参数。当U—Boot启动时,环境变量被复制到RAM中。放在 修改#define PHYS—FLASH—SIZE 0x10(XK ̄把Flash配置 为目标板的L6M。 增加#define CFG—FLASH—SEC 128定义Flash・个扇区的 大小 修改#define CFG_MAX—FLASHSECT 128配置Flash最 大扇区数。 fJ4存的最低32K区域 这样就完成了启动参数的传递。 内核文件中有如下的定义: static struct mtdpartition at91rm9200partitions[J={ 修改#define CFG ENV—ADDR (PHYS—FLASH一1+ 0x20000)配置环境变量在Flash的第二扇区,首地址为0x20000。 修改#defnie CDQENv_SIZE 0x20000配置环境变量区大 小。 f name:”Bootloader'’, size:0x00020000, offs ̄et:0x0..} f name:”Kernel”, size:0x00100( ̄, off ̄t:0x00080000,} (4)对于Flash的驱动:flash.c这个文件是板级Flash设各驱 动,提供对Flash的初始化.擦除,读写等操作 要根据Ime128Fl 28J3A的datasheet来重写它的初始化,擦除,读写,丰J印Flash 信息等子程序。 (5)对于串行口的驱动:seria1.c足串口的设备驱动程序。包 f name:”Filesystem”, size:M[TDPARTSIZFULL, ——offset:0x00180000,} 括波特率设置,串口初始化,向串口输出字符,从串口接受字符等 子程序。它们不需要修改,直接用这个串口驱动程序就可以。 (6)SDRAM的驱动已经由lowleveljnjt.S进行了初始化, 再需要自己设置。 配置完成以后,执行#make clean.,#make at91rm9200dk—conf 和#make得到U—Boot.bin。通过JTAG口和FIash烧写软件 FlashAccess把U-Boot.bin下载到Flash里,重新卜电。通过超级 终端可以看到串【=J输出的J}i确启动信息,这样U-Boot就移枇成功 了。当然可以根据需要在这个基础上添加其他…些功能(如USB 驱动等) 也可以进一步加载Linux内核映像文件和文件系统来启 动L lUX操作系统 ): MTD设备被划分为3个区,分别用来存储启动代码,内核和 文件系统。这 个 晌 地 I:和大小可由用广l自已配置,它们需要 和U-Boot传递的地址致,内核和根文件系统才能正确的运行。 设置启动参数的U—Boot 要l命令如下: bootcmd是自动启动叫啦定的|命令。它在启动后倒计时为零后 自动执行所定义的命令。 bootm是从指定位置启动程序 bootcmd和bootm结合使用 就H】以传递内{幺映像地址,自动加戡内核。如bootcmd bootm 100 ̄0000就 i』以把起始地址在Oxl00 ̄80000的内核加载运行。 bootargs:该变量的内容被传递到Linux内核作为启动参数 设 置环境变量Bootargs 'console=ttyS0,.1 l52o0 initrd=none CONFIGCMDLINE=’5结束语 U-Boot提供硬件的初始化并为后续加载操作系统创造良好的 运行环境。研究其启动过程有助于更好的理解硬件系统 本文作者 移植的U—Boot已经成功运行在目标板,并在此 础L加载丁Linux 内核和根文件系统。本文虽然是摹于AT91RM9200移机的, 移 植步骤和方法对于其他嵌入式处理器也有参考价值。国 参考文献 【1】陈渝+李明。杨晔.源码开放的嵌入式系统软件分析与实践tMl,北 root=/dev/mtdblock2”通知内核以ttyS0作为控制台,根文件系统 在MTD的第三个分区,这样内核就得到了根文件系统的加载地 4 U-Boot移植实例 京航空航天大学出版杜,2004. 121 AT91RM9200 datasheet Atmel corporation,2003. 4.1 目标板主要的硬件资源 AT91RM9200嵌入式微处 器、两片l6M的SI)RAM (HY57V28 l62C)HCT)、 一 片 l6M的 NOR Flash(Inte128F128J3A)、 个USB主机接口、 -个USB设备接 LJ、四个UART接LJ和一个JTAG,dICE接 】。 I3】秦贵和.徐华中.王磊.ARM9嵌入式技术及Linux高级实践教程 【M】,北京航空航天大学LH版社,2005. 作者简介:李志刚(1977一),男,南京邮电走学硕士研究生。主要研究方向 计算机监锄】控制技术;周西峰.男,南京邮电戈学自动化学院副教授.硕士 生导师.主要研究方向:计算机监测控制技术。 作者声明:自愿将本文稿酬捐为“仪器仪表用户杂志爱_助学基金” 4.2 U・Boot移植方法和步骤 本文主机的开发平台是Red9.l0 Linux操作系统,软件开发工 欢迎订阅欢迎撰稿欢迎发布产品广告信息 EIC VOI.1 3 2006 No.6 97 

因篇幅问题不能全部显示,请点此查看更多更全内容

Copyright © 2019- oldu.cn 版权所有 浙ICP备2024123271号-1

违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务