U-BOOT小全(一)

简介: U-BOOT小全(一)

前面或多或少的写过一点关于Uboot的东西,当然内容基本上都是学习笔记,学习前辈们的博客和书籍,但是整的很乱,不成体系。或者内容都是很简要的,总感觉仿佛对UBoot知道了点什么,但是又什么都不知道。不爽。

于是这里找到了一本书,好好整一下这个UBoot。

这次对于UBoot的学习就开始慢下脚步,好好找找问题所在。不要着急,一点点学。

这个系列的内容来自老师的《深入理解BootLoader》

1、U-Boot是什么玩意

U-Boot的全称为Universal Boot Loader,是遵循GPL条款的开放源码项目,从FADSROM、8xxROM、PPCBOOT逐步发展演化而来,其源码目录、编译形式与Linux内核很相似。

事实上,不少U-Boot源码就是相应的Linux内核源程序的简化,尤其是一些设备的驱动程序,从U-Boot源码的注释中能体会到这一点。(暂时还无体会,两个都不熟,哈哈哈)

但是U-Boot不仅仅支持嵌入式Linux系统的引导,当前,它还支持OpenBSD、NetBSD、FreeBSD、4.4BSD、Linux、SVR4、Esix、Solaris、Irix、SCO、Dell、NCR、VxWorks、LynxOS、pSOS、QNX、RTEMS、ARTOS等操作系统。这是U-Boot中Universal的一层含义,另外一层含义则是U-Boot除了支持PowerPC系列的处理器外,还能支持MIPS、x86、ARM、NIOS、XScale等诸多常用系列的处理器。这两个特点正是U-Boot项目的开发目标,即支持尽可能多的嵌入式处理器和嵌入式操作系统。

就目前来看,U-Boot对PowerPC系列处理器的支持最为丰富,对Linux的支持最完善。其他系列的处理器和操作系统基本是在2002年11月PPCBOOT改名为U-Boot后逐步扩充的。从PPCBOOT向U-Boot的顺利过渡,很大程度上归功于U-Boot的维护人——德国DE **NX软件工程中心Wolfgang Denk(以下简称W.D)**精湛的专业水平和坚持不懈的努力。当前,U-Boot项目正在他的领军之下,众多有志于开放源码BootLoader移植工作的嵌入式开发人员正如火如荼地开展着各个不同系列嵌入式处理器的移植工作,以支持更多的嵌入式操作系统的装载与引导。(直接就是一个瑞斯拜)

除了U-Boot,还有些比较流行的BootLoader,比如LILO、GRUB、Blob、vivi等。

这么多为什么选择了U-Boot的理由:

  • 1)开放源码;
  • 2)支持多种嵌入式操作系统内核,如Linux、NetBSD、VxWorks、QNX、RTEMS、ARTOS、LynxOS;
  • 3)支持多个处理器系列,如PowerPC、ARM、x86、MIPS、XScale;
  • 4)较高的可靠性和稳定性;
  • 5)高度灵活的功能设置,适合U-Boot调试、操作系统的不同引导要求和产品发布等;
  • 6)丰富的设备驱动源码,如串口、以太网、SDRAM、Flash、LCD、NVRAM、EEPROM、RTC和键盘等;
  • 7)较为丰富的开发调试文档与强大的网络技术支持。

2、U-Boot的代码目录结构

U-Boot的目录大致分为三类。

第一类目录与处理器体系结构或者开发板硬件直接相关。

  • ·arch:和体系结构相关的代码,比如大家熟知的arm、avr32、mips、openrisc、powerpc和x86。
  • ·board:目标板相关文件,主要包含一些内存驱动。
  • ·include:U-Boot头文件,尤其configs子目录下与目标板相关的配置头文件是移植过程中经常要修改的文件。

第二类目录是一些通用的函数或者驱动程序。

  • ·common:独立于处理器体系结构的通用代码,如内存大小探测与故障检测
  • ·driver:通用设备驱动,如CFI FLASH驱动(目前对INTEL FLASH支持较好)。
  • ·fs:包含文件系统的代码。
  • ·lib:与处理器体系无关的库文件,如md5、CRC等算法的实现。
  • ·net:与网络功能相关的文件目录,有简单4层网络协议栈的实现,如arp、bootp、nfs和tftp等。
  • ·post:上电自检文件目录,尚有待于进一步完善。

第三类目录是U-Boot的应用程序、工具、测试程序或者文档。

  • ·api:API接口,为其他应用提供的与机器类型、体系结构无关的API。
  • ·doc:U-Boot的说明文档。
  • ·examples:可在U-Boot下运行的示例程序,如hello_world.c和timer.c。
  • ·test:测试脚本和代码。
  • ·tools:用于创建U-Boot S-RECORD和BIN镜像文件的工具。

因为U-Boot是一个完整成熟的嵌入式BootLoader框架,我们更多的是进行配置和移植工作,所以主要来分析一下第一类目录。

arch目录

该目录有很多子目录,都是按照体系结构进行划分的,比如arm、avr32、m68k、mips、openrisc、powerpc、x86这些常见的体系架构。

因为本书以ARM体系为基础,所以我们分析arm目录下的结构,对于arm目录,我们主要分析cpu目录和lib目录。

cpu目录根据arm的版本号进行划分,如arm11、arm720t、armv7等。例如在armv7版本的目录下,又有一些通用的代码和与处理器相关的代码,其中与处理器相关的代码会放在对应的子目录下面。

lib目录则放置arm体系结构下通用的汇编代码和C代码,比如处理协处理器的cache-cp15.c,处理中断的interrupts.c处理重定位的relocate.S等。

board目录

里面放置各种目标板的相关代码。比如sunxi目录下有板级dram的初始化代码等。

include目录

里面放置了公用的头文件其中configs子目录下放置有与目标板相关的头文件。比如sun7i.h和sunxi-common.h,里面包含着许多与板级配置相关的宏定义。

examples目录

因为在所有的开源代码中,一般都会有一个examples目录,其下放置一些简单的实例,相当于一个入门向导,帮助我们更好地理解这个开源项目。学习软件开发的时候,我们经常用hello world作为示例,U-Boot也写了一个hello world作为示例,该示例相当于一个独立的程序,是由BootLoader引导执行的。有兴趣的读者可以试着运行一下这个hello world,读者也可以在网上阅读一下黄敬群的《深入浅出Hello World》,相信你对hello world会有不一样的理解,对BootLoader、计算机系统也会有更深入的理解。(这本书记本本上了)

下一章看看UBoot的配置编译

目录
相关文章
|
11天前
|
存储 前端开发 芯片
U-BOOT小全(三):SPL框架
U-BOOT小全(三):SPL框架
99 0
|
11天前
|
存储 缓存 安全
U-BOOT小全(五):BootLoader源码(SPL-UBoot 2)
U-BOOT小全(五):BootLoader源码(SPL-UBoot 2)
51 0
|
11天前
|
Linux 编译器 C语言
U-BOOT小全(四):BootLoader源码(SPL-UBoot 1)
U-BOOT小全(四):BootLoader源码(SPL-UBoot 1)
58 0
|
6月前
|
Java Spring
【Spring Boot 源码学习】走近 AutoConfigurationImportSelector
本篇笔者带大家走近 AutoConfigurationImportSelector,从整体上了解 Spring Boot 自动装配功能
66 2
【Spring Boot 源码学习】走近 AutoConfigurationImportSelector
|
11天前
|
存储 编译器 vr&ar
U-BOOT小全(二)
U-BOOT小全(二)
26 0
|
Prometheus Cloud Native Java
Spring Boot 3.0 要来了,真心强!
Spring Boot 3.0 要来了,真心强!
|
Java Spring 容器
😧 Spring_day03(二)
😧 Spring_day03
74 0
|
Java 数据库连接 测试技术
😧 Spring_day03(六)
😧 Spring_day03
68 0
|
XML Java 关系型数据库
😧 Spring_day02 ✅(四)
😧 Spring_day02 ✅
50 0
|
XML Java Maven
😧 Spring_day02 ✅(二)
😧 Spring_day02 ✅
52 0
😧 Spring_day02 ✅(二)