当前位置:首页 > 嵌入式 > 嵌入式教程
[导读]U-Boot在MPC8265平台上的移植与分析

系统处理器启动时,首先执行一个预定地址处的指令,通常这个位置是只读内存,存放系统初始化或引导程序,其功能是执行CPU初始化并配置其他硬件,然后copy操作系统到RAM中。
    在嵌入式Linux系统中,这些工作由Bootloacler(引导加载程序)完成,它是在嵌入式系统CPU加电复位和进入操作系统之前运行的代码,主要用于完成由硬件启动到操作系统启动的过渡,为操作系统提供基本的运行环境,如初始化CPU、堆栈、存储器系统等,其数值必须要符合用户的硬件配置,并且按特定顺序写入。嵌入式Linux系统的引导、配置甚至应用程序的运行都与Bootloader有关。
    Bootloader源代码与CPU的内核结构和嵌入式设备的板级配置有关,必须根据具体的系统设计要求进行移植。目前,开源社团已经发展了多种引导Linux内核的bootloader,比如PowerPC体系的U-Boot、miniBoot,ARM体系的blob,Intel x32体系的gurb、openBIOS等。
    以MPC8265微处理器和嵌入式Linux为背景,针对性地提出U-Boot的移植方法并进行分析研究,此方法可广泛用于基于MPC282xx系列处理器的嵌入式Linux系统应用开发中。

1 U-Boot引导加载程序
1.1 U-Boot简介

    U-Boot(Universal Boot Loader)是遵循GPL条款的开放源码项目。它支持多种嵌入式处理器,如ARM、PowerPC、MIPS等,也支持Linux、VxWorks、QNX、RTEMS、ARTOS、LynxOS等多种嵌入式操作系统。这2个特点正是U-Boot项目的开发目标,即支持尽可能多的嵌入式处理器和嵌入式操作系统。
    U-Boot支持的主要功能如下:1)系统引导:支持NFS挂载、从Flash中引导(压缩或非压缩)系统内核;RAMDISK(压缩或非压缩)形式的根文件系统;2)强大的操作系统接口功能,可灵活设置、传递多个关键参数给操作系统,适合系统在不同开发阶段的调试要求与产品发布:3)支持目标板环境参数多种存储方式(如Flash、NVRAM、EEPROM);4)CRC32校验,可校验Flash中内核、RAMDISK镜像文件是否完好;5)设备驱动:串口、SDRAM、Flash、以太网、LCD、NVRAM、EEP-ROM、键盘、USB、PCMCIA、PCI、RTC等驱动支持;6)上电自检功能:SDRAM、Flash自动检测,SDRAM故障检测,CPU型号。
1.2 U-Boot主要目录结构
    U-Boot源代码采用高度模块化的编程方式,便于在不同的硬件平台上移植。U-Boot源代码包含多个目录,其中与移植相关的主要有:1)board:目标板相关文件,存放U-Boot支持的所有目标板的子目录。目标板上大部分资源的初始化代码就在这个文件夹中,如SDRAM、Flash驱动;2)common:独立于处理器体系结构的通用代码,实现U-Boot各种公共命令的C文件;3)cpu:存放U-Boot支持的各类型CPU的相关文件,主要是初始化执行环境,比如mpc8260子目录包含串口、网口、LCD驱动及中断初始化等文件;4)drivers:通用设备的驱动程序,如CFI flash驱动;5)fs:U-Boot支持的文件系统,如ext2、cramfs、fat、fdos、jffs2和registerfs等;6)net:与网络功能有关的文件,如B00TP、TFTP、RARP和NFS相关代码;7)include:存放头文件。子目录include/configs下与目标板相关的配置头文件是移植过程中经常要修改的文件,可配置目标板的各项参数(如波特率、引导启动参数等)。还有对各种硬件平台支持的汇编文件、系统的配置文件和对文件系统支持的文件。U-Boot源代码可以从DENX的网站(http://www.denx.de)下载,本文使用的版本是U-Boot-1.2.0。

2 U-Boot的运行流程
    U-Boot的运行流程如图1所示,目标板上电,启动MPC8265存储控制器CS0有效,选中Flash,CPU地址线上输出硬件复位中断向量对应的地
址,此时执行第1条指令,对应\cpu\mpc8260\start.S中的_start:开始执行。完成CPU本身基本的初始化后,初始化CPU内部寄存器,设置IMMR、ICTRL等。然后跳转到\cpu\mpc8260\cpu_init.c的函数cpu_init_f处,进行CPU的底层初始化,主要设置watchdog、SIUMCR寄存器、PIT、锁相环、系统定时器、存储控制器和CPM等。从start.S中跳转到\lib_ppe\board.c的函数board_init_f处,实现目标板上的第1次初始化,完成SMC初始化和一些硬件测试,尤其是RAM初始化,并分配内存空间,保存板级信息,准备在RAM中重定向U-Boot代码。完成后,跳转到start.S中的函数relocate_code()处,重定向代码,将U-Boot代码搬至SDRAM工作,开始在RAM中运行。然后跳转到board.c文件的函数board_init_r()处,执行板上的第2次初始化,主要完成一些数据结构、高端模块及系统设备的相关初始化。最后,U-Boot执行board_init_r()中的函数main_loop(),根据用户从控制台的输入,完成预先设定的工作。[!--empirenews.page--]



3 U-Boot的移植
    U-Boot在设计时已考虑到支持使用不同CPU处理器的开发板,根据具体板级硬件配置的设计要求,修改与其相关的源代码,将U-Boot移植到新的开发板上。这里开发板TDS8265外围接口主要有100 M网口、RS232串口和JTAG调试接口等。
3.1 修改U-Boot源代码
    为了简化移植工作,可在U-Boot源码中选择一个与开发板接近的参考平台,然后从移植U-Boot的要求和开发板能正常启动的角度出发进行修改。
    这里以在U-Boot/board目录下为TDS8265开发板新建文件夹TDS8265为例进行说明。
    1)修改头文件TDS8265.h路径是U-Boot/include/configs/TDS8265.h,是开发板的主要配置元件,配置CPU、系统时钟、SDRAM、Flash以及其他开发板相关信息。设置CPU寄存器参数,需仔细对照处理器datasheet中各寄存器的定义、参考设置、目标板实际情况等做出选择并测试。MPC82xx系列处理器较为关键的寄存器有SIUMCR、PS-DMR、SCCR、BRx、ORx等。设置CPU寄存器基地址IMMR时,注意与硬件配置相对应。如:
    
    设置与Flash控制相关的寄存器BR0、OR0时,根据目标板所用Flash的数据手册与BR0和OR0的相关位含义合理设置,这不仅关系到Flash能否正常工作,而且与串口调试直接相关。设置Flash、SDRAM,包括基址、大小、环境变量的偏移,内存刷新周期。设置环境变量,网络接口,IP地址,MAC地址,用于网络下载和启动;设置Linux内核启动参数init=/sbin/init。
    2)编写tds8265.c文件 路径是U-Boot/board/tds8265/tds8265.c。tds8265.c是目标板的SDRAM的驱动程序,涉及I/0端口表、相关寄存器的设置及SDRAM上电初始化过程3个主要部分。任何一部分有问题,都会影响U-Boot、嵌入式操作系统甚至应用程序的运行,所以SDRAM的驱动不仅关系到U-Boot本身能否正常运行,而且还与后续部分相关。根据MPC8265处理器datasheet和开发板的硬件电路图,配置8265的I/0端口表;设置寄存器PSDMR和BRl、0R1;向SDRAM中写入8次以初始化SDRAM等。SDRAM的初始化是由/lib_ppc/board.c中的board_init_f()调用的,入口为tds8265.c的函数initdram。
    3)修改config.mk文件 路径是U-Boot/board/tds8265/config.mk。修改中,对该文件中的TEXT_BASE赋值应与TDS8265.h中对CF-G_FLASH_BASE的赋值保持一致。
    4)编写flash.c文件 路径是U-Boot/board/tds8265/flash.c。flash.c是Flash的驱动程序,是U-Boot读/写、删除Flash的源代码
文件,其中包括多个函数,以实现不同的操作。如:
    
    编写flash.c文件时需参考Flash的数据手册,严格按照其中的说明实现Flash的各种操作。
    5)创建U-boot.lds,U-boot.lds.debug,makefile文件 这些文件均在目录U-Boot/board/tds8265之下。设置U-boot中各个目标文件的连接地址。
    6)修改MAKEALL文件 路径是U-Boot/MAKEALL。因为使用的是MPC8265,属于82xx系列,所以在“LIST_82xx”下加入目标板名称“TDS8265”。
    7)修改Makefile文件 路径是U-Boot/Makefile。在Makefile文件中增加TDS8265开发板的配置行,指定交叉编译器的完整路径名。
   
[!--empirenews.page--]3.2 编译U-Boot和移植镜像文件
    在源代码修改完成后,即可进行编译。编译U-Boot需要在Linux主机上建立交叉编译环境,本文使用Montavista公司的Montavista Linux Pro 4.0。在Linux主机上安装Montavista交叉编译工具后,设置环境变量,将Montavista工具链路径导入到主机系统的环境变量中。如:#gedit./.bash_profile,打开文件.bash_profile,增加PATH=$PATH:/opt/montavista/pro/devrocket/ppc/82xx/bin,然后删除之前可能错误创建的所有目标文件,并针对目标板编译。如下所示:
    
    编译完成后,得到3个文件:1)u-boot:ELF格式的文件,可被多数Debug程序识别;2)u-boot.bin:二进制bin文件,U-boot的二进制执行代码,可通过JTAG接口下载到开发板;3)u-boot.srec: Motorola的S-Record格式文件,可通过BDM接口下载到开发板。
    不同开发板对U-Boot镜像文件在Flash中的存放地址要求不同,这是由处理器中断复位向量决定的,与开发板硬件相关,源代码中U-Boot起始地址必须与硬件复位向量相符合。
    使用MPC82xx系列处理器的主板是由硬件配置字(HRCW)决定的,如RPXlite板的中断复位向量设置为Ox00000100,因此U-B00t镜像文件必须烧写到Flash的起始位置。多数的PPC系列的处理器中断复位向量是Ox00000100和Oxfff00100,即高位启动和低位启动的Bootloader所在位置。U-boot镜像文件在Flash中的存放地址可通过设置U-Boot源码的<目标板>.h头文件中CFG_MONITOR_BASE以及board/<目标板>/confi-g.mk中的TEXT_BASE来与硬件配置相对应。
    U-Boot镜像文件在Flash中烧录完成后,将目标板和主机的串口连接起来,目标板上电复位,即可在主机终端窗口看到串口回显的开发板上U-Boot的启动引导信息,如图2所示。


    在终端窗口中输入help,可以列出U-Boot所有命令列表。然后测试网口和Flash读写,工作正常,则可以认为U-Boot移植工作基本完成,接下来可以添加一些其他功能,并进行Linux内核的引导和文件系统的移植。

4 结束语
    Bootloader在嵌入式开发中是操作系统和硬件的枢纽。在U-Boot移植过程中,不仅要掌握U-Boot的结构和工作流程外还需要对硬件有一定了解。本文移植的U-Boot已稳定运行在开发板上,而且可以通过FIash和网络加载Linux内核和NFS文件系统,为后续开发奠定了良好的基础。对于不同的CPU和开发板,基本方法和步骤是相同的,本文的工作对于基于MPC82xx系列处理器的硬件平台的U-Boot移植具有借鉴意义,并对嵌入式Linux系统的开发提供了有益的技术参考。

本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除。
换一批
延伸阅读

9月2日消息,不造车的华为或将催生出更大的独角兽公司,随着阿维塔和赛力斯的入局,华为引望愈发显得引人瞩目。

关键字: 阿维塔 塞力斯 华为

加利福尼亚州圣克拉拉县2024年8月30日 /美通社/ -- 数字化转型技术解决方案公司Trianz今天宣布,该公司与Amazon Web Services (AWS)签订了...

关键字: AWS AN BSP 数字化

伦敦2024年8月29日 /美通社/ -- 英国汽车技术公司SODA.Auto推出其旗舰产品SODA V,这是全球首款涵盖汽车工程师从创意到认证的所有需求的工具,可用于创建软件定义汽车。 SODA V工具的开发耗时1.5...

关键字: 汽车 人工智能 智能驱动 BSP

北京2024年8月28日 /美通社/ -- 越来越多用户希望企业业务能7×24不间断运行,同时企业却面临越来越多业务中断的风险,如企业系统复杂性的增加,频繁的功能更新和发布等。如何确保业务连续性,提升韧性,成...

关键字: 亚马逊 解密 控制平面 BSP

8月30日消息,据媒体报道,腾讯和网易近期正在缩减他们对日本游戏市场的投资。

关键字: 腾讯 编码器 CPU

8月28日消息,今天上午,2024中国国际大数据产业博览会开幕式在贵阳举行,华为董事、质量流程IT总裁陶景文发表了演讲。

关键字: 华为 12nm EDA 半导体

8月28日消息,在2024中国国际大数据产业博览会上,华为常务董事、华为云CEO张平安发表演讲称,数字世界的话语权最终是由生态的繁荣决定的。

关键字: 华为 12nm 手机 卫星通信

要点: 有效应对环境变化,经营业绩稳中有升 落实提质增效举措,毛利润率延续升势 战略布局成效显著,战新业务引领增长 以科技创新为引领,提升企业核心竞争力 坚持高质量发展策略,塑强核心竞争优势...

关键字: 通信 BSP 电信运营商 数字经济

北京2024年8月27日 /美通社/ -- 8月21日,由中央广播电视总台与中国电影电视技术学会联合牵头组建的NVI技术创新联盟在BIRTV2024超高清全产业链发展研讨会上宣布正式成立。 活动现场 NVI技术创新联...

关键字: VI 传输协议 音频 BSP

北京2024年8月27日 /美通社/ -- 在8月23日举办的2024年长三角生态绿色一体化发展示范区联合招商会上,软通动力信息技术(集团)股份有限公司(以下简称"软通动力")与长三角投资(上海)有限...

关键字: BSP 信息技术
关闭
关闭