uboot(bootloader)相关的知识点汇总

嵌入式杂牌军

共 4660字,需浏览 10分钟

 · 2021-08-23

扫描二维码

获取更多精彩

嵌入式杂牌军

                                                     

                                                编辑|追梦星空

                                           公众号|嵌入式杂牌军


✎ 编 者 悟 语

    

      习惯可以让人重复对自己有利的东西从而让自身得以提升,也可以让人不断重复错误的事情从而给自身带来诸多的困扰(习惯久了就成了类似无意识的东西,无意识的对,也无意识的错)。


文 章 导 读


    今天给小伙伴们汇总下uboot相关的内容,主要涉及它的定义、启动方式、操作方式、目录结构、编译调试等内容!

    阅读过程中有什么问题可以后台交流哈,


1 嵌入式存储设备的分区情况



    在引出uboot之前先看下uboot在存储设备中的位置。


    ① 第一分区:存放uboot。


    ② 第二分区:存放uboot要传给系统内核的参数。


    ③ 第三分区:系统内核。


    ④ 第四分区:根文件系统。


2 uboot 相关的知识点



    1)定义


    Bootloader是操作系统运行之前执行的一小段程序,通过这一小段程序,可以初始化硬件设备/建立内存空间映射表,从而建立适当的系统软硬件环境,为最终调用操作系统内核做好准备。

 

    uboot是bootloader的一种,下面内容可能出现混用的情况。


    2)uboot启动方式


    ① 网络启动。


    主要用于调试,通常需要安装nfs和tftp服务,用于挂载根文件系统,内核镜像

u-boot.bin等内容,因为是挂载,硬件重新上电,一般并不会保存挂载的内容。


    ② 磁盘启动。


    这种方式主要是用在台式机和服务器上的,这些计算机都使用BIOS引导,并且使用磁盘作为存储介质,这里面两个重要的用来启动linux的有LILO和GRUB。


    ③ Flash启动。


    将uboot、内核镜像及应用程序等组成的程序文件下载到Flash中,上电自动引导。


    3)Bootloader的两种操作模式

        

    ① 启动加载模式,也称为自主模式。


    Bootloader从目标机上的某个固态存储设备上将操作系统加载到RAM中运行,整个过程没有用户介入。


    ② 下载模式。


    目标机上的Bootloader通过串口/网络等方式从主机下载/挂载到目标机(如uImage/u-boot.bin/根文件系统)。

    从目标机下载的文件,Bootloader会将其先放在目标机的RAM中,然后在放在目标机的Flash等固态存储设备中。

  

    4)uboot的目录结构

    


    ① board文件夹。


    board文件夹中存放开发板相关的配置文件,每一个开发板都以子文件夹的形式出现。



    此文件夹下的每个文件里面都找到一个脚本文件u-boot.lds,此文件中内容描述了对应型号uboot代码的入口点、各段代码存放位置(数据段、代码段、bss段)以及对齐方式等内容,感兴趣的小伙伴可以看看。


    ② commom文件夹。


    它存放的是u-boot行下支持的命令,每一个命令对应一个文件。


    ③ cpu文件夹。


    此文件夹中存放特定cpu架构相关的目录,每一款cpu架构都对应了一个子目录。


    ④ doc文件夹。


    doc是文档目录,有u-boot非常完善的文档。


     drivers文件夹。


    此文件夹下存放的是u-boot支持的各种设备的驱动程序。


     fs文件夹。



    它用于存放支持的文件系统的源码,其中最常用的是JFFS2文件系统。


     include文件夹。


    它存放u-boot使用的头文件,还有各种硬件平台支持的汇编文件,系统配置文件和文件系统支持的文件。


    net文件夹。


    它存放的是与网络协议相关的代码,bootp协议、TFTP协议、NFS文件系统得实现。


    tooles文件夹。


    它存放的是生成u-boot相关工具。

   

    ⑩ u-boot.bin与u-boot.spec及u-boot.map。



    前两个是生产的uboot的程序文件,常用的是u-boot.bin文件。


    u-boot.map可以查看uboot编译存储的信息,遇到问题时可以去这里看看。

     

3 uboot 的编译与调试



    1)uboot的编译

    

    uboot的编译不管什么方式一般都是落实到Makefile上。


    ① 用现有的IDE编译。

   

    Linux开发的编译一般都支持局部编译,比如你可以单独编译内核,你可以单独编译uboot,你也可以将程序进行全部编译。


    为了节省时间,在调试时,局部编译,并将代码下载到硬件中去测试是比较不错的选择。


    ② 直接编译uboot。


    即用make命令对uboot进行编译,此时涉及到一个问题,编译环境变量存在交叉编译等条件的限制。此时有两种编译方式:


    要么编写脚本利用现有IDE的环境变量,将变量路径填入脚本,进入uboot去编译。

    要么自己搭建编译环境,设置好环境变量。


    2)uboot的调试

    

    ① 利用printf打印调试信息。


    标准的uboot中printf已经用puts等函数重写了可以直接用于调试。


    ② 开启DEBUG宏。


    uboot启动时的打印可以开启DEBUG宏,DEBUG位于include/common.h中。


    ③ 利用help命令。



    进入uboot后,输入help命令即可列出uboot支持的命令,可以尝试下如何使用。


     添加自己的uboot命令。



    可以通过help命令查出uboot已有的命令,然后进入到uboot源码下用grep命令查看一下此命令的功能实现,仿照此实现实现自己的功能函数,添加打印提示,命令触发等内容即可。


    今天就到这吧,希望对小伙伴有所帮助哈,喜欢的话欢迎转发、点赞、分享、在看、转载哈,


相关推荐


推荐一款Linux下好用的截图工具shutter——shutter的安装、配置与使用


Linux中消息队列的使用


Linux下的共享内存编程


专辑分享


Linux专辑


C语言专辑


软实力专辑


软件推荐专辑


    欢迎关注我的公众号,一起撸代码,玩技术!
浏览 74
点赞
评论
收藏
分享

手机扫一扫分享

举报
评论
图片
表情
推荐
点赞
评论
收藏
分享

手机扫一扫分享

举报