2.uboot功能及工作方式


2.1.自身可开机直接启动
(1)一般的SoC都支持多种启动方式,譬如SD卡启动、NorFlash启动、NandFlash启动等,uboot要想能够开机启动,则必须根据具体的SoC的启动设计来设计uboot。
(2)uboot必须进行和硬件相对应的代码级别的更改和移植,才能保证从相应的启动介质启动,uboot中第1阶段的start.S文件中具体处理了这一块。


2.2.能够引导操作系统内核启动并给内核传参
(1)uboot的终极目标是启动操作系统内核。
(2)linux内核被设计成可以被传参,即我们可以在uboot中事先给linux内核准备一些启动参数放在内存中的特定位置,内核启动后会到该特定位置取得uboot传过来的参数,然后在内核中解析参数,这些参数将被用来指导linux内核的启动过程。


2.3.能提供系统部署功能
(1)uboot必须能够被人借助而完成整个系统(包括uboot、kernel、rootfs等镜像)在Flash上的烧录下载工作。
(2)传说中的刷机就是利用uboot中的fastboot功能将各种镜像烧录到Flash中。


2.4.能进行SoC级和板级硬件管理
(1)uboot中实现了一部分硬件的驱动控制能力(uboot初始化了一部分硬件),因为uboot为了完成一些任务必须让这些硬件工作。譬如uboot要实现刷机就必须驱动Flash;譬如uboot要通过串口提供终端操作界面就必须驱动串口;譬如uboot要实现网络功能就必须驱动网卡芯片。
(2)SoC级(譬如串口)就是SoC内部外设,板级(譬如网卡芯片、Flash)就是SoC外面开发板上的硬件。


2.5.uboot的“生命周期”
(1)uboot的生命周期是指uboot从什么时候开始运行,什么时候结束运行。
(2)uboot的本质是一个裸机程序(不是操作系统),一旦uboot开始运行,则SoC就会单纯运行uboot(即uboot运行时别的程序无法同时运行),一旦uboot结束运行则再无法回到uboot,所以uboot启动内核后uboot自身就死掉了,想再次看到uboot界面只有重启系统,但重启只是uboot的另一生,并不是复活了刚才的uboot。
(3)uboot的入口和出口。uboot的入口是开机自动启动,uboot的唯一出口是启动内核。uboot还可以执行许多别的任务(譬如烧录系统),其它的任务执行完后都可以回到uboot的命令行继续执行不同的命令,但一旦执行启动内核命令后就一去不回了。


2.6.总结
(1)uboot前期所做的一切准备都是为了启动操作系统内核。


2.7从裸机程序镜像uboot.bin说起
(1)uboot的本质是一个裸机程序,和我们自己写裸机程序没有本质区别。我们写的大部分裸机程序小于16KB,而uboot的大小一般在180KB~400KB之间不等。
(2)uboot是一个开源项目,由若干.c文件和.h文件组成,配置编译后会生成uboot.bin文件,即uboot的镜像文件,然后该镜像文件被合理的烧录到启动介质中提供给SoC去启动。也就是说uboot在没有运行时表现为uboot.bin,一般躺在启动介质中。
(3)uboot运行时会被加载到内存中,然后一条指令一条指令的交给CPU去执行。


2.8.uboot的命令式shell界面
(1)普通的裸机程序运行就直接执行了,执行效果和代码有关。
(2)uboot需要和人进行交互,于是uboot中实现了一个shell(shell就是提供人机交互的一个界面)。
(3)shell并不是操作系统,和操作系统一点关系都没有。linux中终端shell工作方式和uboot中的shell几乎一样,只是两者之间的shell命令集不同(譬如linux中可识别ls,uboot中ls不能识别)。


2.9.掌握uboot使用的2个关键点即命令和环境变量
(1)uboot启动后大部分工作是在shell下完成的。譬如uboot部署系统要再shell下输命令;设置环境变量需要在shell命令行下;启动内核需要在shell下输入命令。
(2)命令就是uboot的shell中可以识别的各种命令。uboot中有几十个命令,我们还可以自己给uboot添加命令,我们主要学习常用命令即可。
(3)uboot的环境变量和操作系统的环境变量的工作原理和方式几乎完全相同。uboot在设计时借鉴了linux操作系统的设计理念(譬如uboot命令行工作方式借鉴了linux终端命令行;uboot环境变量借鉴了linux的环境变量;uboot的驱动管理几乎完全照抄了linux的驱动框架)。
(4)环境变量可被认为是系统或程序的全局变量(分为系统自带的默认环境变量和我们自己添加的环境变量),系统或程序运行时可通过读取环境变量来指导程序的运行。这样设计的好处是灵活,譬如我们需要让一个程序更改运行方法,不用去重新修改程序代码并编译运行,而只需修改相应的环境变量即可。
(5)环境变量系统或程序运行时的配置属性。


2.10.结合ARM裸机部分进行理解和印证
(1)及时复习ARM裸机中和现在讲到的相关的知识点,在复习中巩固ARM裸机中学到的。这过程中如果原来学习时记了笔记就会非常好,如果没有记笔记那就难办了。
(2)及时对照原来ARM裸机中讲到的相关部分,可以帮助理解当前讲到的知识点。
(3)结合ARM裸机中和现在讲的,对比分析思考,会得到更多。


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值