uboot(bootloader)相关的知识点汇总
共 4660字,需浏览 10分钟
·
2021-08-23 23:15
扫描二维码
获取更多精彩
嵌入式杂牌军
编辑|追梦星空
公众号|嵌入式杂牌军
习惯可以让人重复对自己有利的东西从而让自身得以提升,也可以让人不断重复错误的事情从而给自身带来诸多的困扰(习惯久了就成了类似无意识的东西,无意识的对,也无意识的错)。
文 章 导 读
今天给小伙伴们汇总下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的安装、配置与使用