加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

U-boot

发布时间:2020-12-15 06:34:01 所属栏目:百科 来源:网络整理
导读:选择U-Boot的理由 : ① 开放源码; ② 支持多种嵌入式操作系统内核,如Linux、NetBSD,VxWorks,QNX,RTEMS,ARTOS,LynxOS; ③ 支持多个处理器系列,如PowerPC、ARM、x86、MIPS、XScale; ④ 较高的可靠性和稳定性; ⑤ 高度灵活的功能设置,适合U-Boot调试、
选择U-Boot的理由
  ① 开放源码;
  ② 支持多种嵌入式操作系统内核,如Linux、NetBSD,VxWorks,QNX,RTEMS,ARTOS,LynxOS;
  ③ 支持多个处理器系列,如PowerPC、ARM、x86、MIPS、XScale;
  ④ 较高的可靠性和稳定性;
  ⑤ 高度灵活的功能设置,适合U-Boot调试、操作系统不同引导要求、产品发布等;
  ⑥ 丰富的 设备驱动源码,如串口、以太网、SDRAM、FLASH、LCD、NVRAM、EEPROM、RTC、键盘等;
  ⑦ 较为丰富的开发调试文档与强大的网络技术支持;

编辑本段目录结构

  * board 目标板相关文件,主要包含SDRAM、FLASH驱动;
  * common 独立于处理器体系结构的通用代码,如内存大小探测与故障检测;
  * cpu 与处理器相关的文件。如mpc8xx子目录下含串口、网口、LCD驱动及中断初始化等文件;
  * driver 通用设备驱动,如CFI FLASH驱动(目前对INTEL FLASH支持较好)
  * doc U-Boot的说明文档;
  * examples可在U-Boot下运行的示例程序;如hello_world.c,timer.c;
  * include U-Boot头文件;尤其configs子目录下与目标板相关的配置头文件是移植过程中经常要修改的文件;
  * lib_xxx 处理器体系相关的文件,如lib_ppc,lib_arm目录分别包含与PowerPC、ARM体系结构相关的文件;
  * net 与网络功能相关的文件目录,如bootp,nfs,tftp;
  * post 上电自检文件目录。尚有待于进一步完善;
  * rtc RTC驱动程序;
  * tools 用于创建U-Boot S-RECORD和BIN镜像文件的工具;

编辑本段主要功能

  U-Boot可支持的主要功能列表:
  * 系统引导;
  * 支持NFS挂载、RAMDISK(压缩或非压缩)形式的根文件系统;
  * 支持NFS挂载、从FLASH中引导压缩或非压缩系统内核;
  * 基本辅助功能 强大的 操作系统接口功能;可灵活设置、传递多个关键参数给操作系统,适合系统在不同开发阶段的调试要求与产品发布,尤对Linux支持最为强劲;
  * 支持目标板环境参数多种存储方式,如FLASH、NVRAM、EEPROM;
  * CRC32校验,可校验FLASH中内核、RAMDISK镜像文件是否完好;
  * 设备驱动 串口、SDRAM、FLASH、以太网、LCD、NVRAM、EEPROM、键盘、USB、PCMCIA、PCI、RTC等驱动支持;
  * 上电自检功能 SDRAM、FLASH大小自动检测;SDRAM故障检测;CPU型号;
  * 特殊功能 XIP内核引导;

编辑本段工作模式

  U-Boot的工作模式有启动加载模式和下载模式。启动加载模式是Bootloader的正常工作模式,嵌入式产品发布时,Bootloader必须工作在这种模式下,Bootloader将嵌入式操作系统从FLASH中加载到SDRAM中运行,整个过程是自动的。下载模式就是Bootloader通过某些通信手段将内核映像或根文件系统映像等从PC机中下载到目标板的FLASH中。用户可以利用Bootloader提供的一些命令接口来完成自己想要的操作。

编辑本段启动流程

  大多数BootLoader都分为stage1和stage2两大部分,U-boot也不例外。依赖于cpu体系结构的代码(如设备初始化代码等)通常都放在stage1且可以用汇编语言来实现,而stage2则通常用C语言来实现,这样可以实现复杂的功能,而且有更好的可读性和移植性。   1、 stage1(start.s代码结构)   U-boot的stage1代码通常放在start.s文件中,它用汇编语言写成,其主要代码部分如下:   (1) 定义入口。由于一个可执行的image必须有一个入口点,并且只能有一个全局入口,通常这个入口放在rom(Flash)的0x0地址,因此,必须通知编译器以使其知道这个入口,该工作可通过修改连接器脚本来完成。   (2)设置异常向量(exception vector)。   (3)设置CPU的速度、时钟频率及中断控制寄存器。   (4)初始化内存控制器 。   (5)将rom中的程序复制到ram中。   (6)初始化堆栈 。   (7)转到ram中执行,该工作可使用指令ldrpc来完成。   2、 stage2(C语言代码部分)   lib_arm/board.c中的start armboot是C语言开始的函数,也是整个启动代码中C语言的主函数,同时还是整个u-boot(armboot)的主函数,该函数主要完成如下操作:   (1)调用一系列的初始化函数。   (2)初始化flash设备。   (3)初始化系统内存分配函数。   (4)如果目标系统拥有nand设备,则初始化nand设备。   (5)如果目标系统有显示设备,则初始化该类设备。   (6)初始化相关网络设备,填写ip,c地址等。   (7)进入命令循环(即整个boot的工作循环),接受用户从串口输入的命令,然后进行相应的工作。

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读