uboot它的作用是什么,它可以用来解决什么问题

uboot 是一个主要用于嵌入式系统的引导加载程序,可以支持多种不同的计算机系统结构,包括ppc、arm、avr32、mips、x86、68k、nios与microblaze。这也是一套在gnu通用公共许可证之下发布的自由软件。
uboot 属于bootloader的一种,是用来引导启动内核的,它的最终目的就是,从flash中读出内核,放到内存中,启动内核,所以,由上面描述的,就知道,uboot需要具有读写flash的能力。
uboot刚开始被放到flash中,板子上电后,会自动把其中的一部分代码拷到内存中执行,这部分代码负责把剩余的uboot代码拷到内存中,然后uboot代码再把kernel部分代码也拷到内存中,并且启动,内核启动后,挂着根文件系统,执行应用程序。
u-boot的工作模式有启动加载模式和下载模式。启动加载模式是bootloader的正常工作模式,嵌入式产品发布时,bootloader必须工作在这种模式下,bootloader将嵌入式操作系统从flash中加载到sdram中运行,整个过程是自动的。下载模式就是bootloader通过某些通信手段将内核映像或根文件系统映像等从pc机中下载到目标板的flash中。用户可以利用bootloader提供的一些命令接口来完成自己想要的操作。
uboot启动主要分为两个阶段,主要在start.s文件中,第一阶段主要做的是硬件的初始化,包括,设置处理器模式为svc模式,关闭看门狗,屏蔽中断,初始化sdram,设置栈,设置时钟,从flash拷贝代码到内存,清除bss段等,bss段是用来存储静态变量,全局变量的,然后程序跳转到start_arm_boot函数,宣告第一阶段的结束。
第二阶段比较复杂,做的工作主要是1.从flash中读出内核。2.启动内核。start_arm_boot的主要流程为,设置机器id,初始化flash,然后进入main_loop,等待uboot命令,uboot要启动内核,主要经过两个函数,第一个是s=getenv(“bootcmd”),第二个是run_command(s.。.),所以要启动内核,需要根据bootcmd环境变量的内容启动,bootcmd环境变量一般指示了从某个flash地址读取内核到启动的内存地址,然后启动,bootm。uboot启动的内核为uimage,这种格式的内核是由两部分组成:真正的内核和内核头部组成,头部中包括内核中的一些信息,比如内核的加载地址,入口地址。uboot在接受到启动命令后,要做的主要是,1,读取内核头部,2,移动内核到合适的加载地址,3,启动内核,执行do_bootm_linux
do_bootm_linux主要做的为,1,设置启动参数,在特定的地址,保存启动参数,函数分别为setup_start_tag,setup_memory_tag,根据名字我们就知道具体的段内存储的信息,memory中为板子的内存大小信息,commandline为命令行信息,启动内核。
总结
总结:uboot到底是干嘛的,对应下面uboot必须要解决哪些问题!
1)uboot主要作用是用来启动操作系统内核。体现在uboot最后一句代码就是启动内核。2)uboot还要负责部署整个计算机系统。体现在uboot最后的传参。3)uboot中还有操作flash等板子上硬件的驱动。例如串口要打印,ping网络成功,擦除、烧写flash是否成功等。4)uboot还得提供一个命令行界面供人来操作。很简单,至少你能看到。
计算机系统的组成部件非常多,不同的计算机系统组成部件也不同。但是所有的计算机系统运行时需要的主要核心部件都是3个东西:cpu + 外部存储器(flash/硬盘) + 内部存储器(ddr sdram/sdram/sram)。而一般的pc机启动过程为:pc上电后先执行bios程序(实际上pc的bios就是norflash),bios程序负责初始化ddr内存,负责初始化硬盘,然后从硬盘上将os镜像读取到ddr中,然后跳转到ddr中去执行os直到启动(os启动后bios就无用了)。
嵌入式系统和pc机的启动过程几乎没有两样,只是bios成了uboot,硬盘成了flash。
uboot启动流程
1.自身可开机直接启动
1)一般的soc都支持多种启动方式,譬如sd卡启动、norflash启动、nandflash启动等•••••uboot要能够开机启动,必须根据具体的soc的启动设计来设计uboot。2)uboot必须进行和硬件相对应的代码级别的更改和移植,才能够保证可以从相应的启动介质启动。uboot中第一阶段的start.s文件中具体处理了这一块。
2.能够引导操作系统内核启动并给内核传参
1)uboot的终极目标就是启动内核。2)linux内核在设计的时候,设计为可以被传参。也就是说我们可以在uboot中事先给linux内核准备一些启动参数放在内存中特定位置然后传给内核,内核启动后会到这个特定位置去取uboot传给他的参数,然后在内核中解析这些参数,这些参数将被用来指导linux内核的启动过程。
3.能提供系统部署功能
uboot必须能够被人借助而完成整个系统(包括uboot、kernel、rootfs等的镜像)在flash上的烧录下载工作。
4. 能进行soc级和板级硬件管理
1)uboot中实现了一部分硬件的控制能力(uboot中初始化了一部分硬件),因为uboot为了完成一些任务必须让这些硬件工作。譬如uboot要实现刷机必须能驱动nand,譬如uboot要在刷机时lcd上显示进度条就必须能驱动lcd,譬如uboot能够通过串口提供操作界面就必须驱动串口。譬如uboot要实现网络功能就必须驱动网卡芯片。
2)soc级(譬如串口)就是soc内部外设,板级就是soc外面开发板上面的硬件(譬如网卡、nand)。
5. uboot的“生命周期”
1)uboot的生命周期就是指:uboot什么时候开始运行,什么时候结束运行。
2)uboot本质上是一个裸机程序(不是操作系统),一旦uboot开始soc就会单纯运行uboot,一旦uboot结束运行则无法再回到uboot。
3)uboot的入口和出口。uboot的入口就是开机自动启动,uboot的唯一出口就是启动内核。uboot还可以执行很多别的任务(譬如烧录系统),但是其他任务执行完后都可以回到uboot的命令行继续执行uboot命令,而启动内核命令一旦执行就回不来了。
fqj

智能家居品牌如何做好抖音?深层逻辑梳理,花小钱办大事
外媒:若继续抵制华为 欧美供应链将感受到痛苦
机器人艺术家“艾达”进入最后开发阶段 能模仿人类完成素描作品
5G有可能取代光纤宽带吗
要怎么样弄清楚大脑内部是如何工作的?
uboot它的作用是什么,它可以用来解决什么问题
智慧园区楼宇合集:数字孪生管控系统
如何使小型计算机能够通过以太网电缆供电
美光推出高性能数据中心 SSD,应对最严苛的工作负载挑战
台积电决议35亿美元在美建厂
Verily曾在 2016 年提交过一项“智能纸尿裤”专利,纸尿裤都能玩智能?
300mm半导体硅片业务仍在产能爬坡阶段
音乐人汪峰发布新耳机FIIL Diva Pro
传感器设计需要注意这四个问题
电源管理芯片TMI6201A,助力电池供电系统超长续航更有价值!
R&S于MWC 2013展示多款量测仪器
NAND闪存价格会不会受到疫情的影响
Monster音讯产品采用SMSC KleerNet技术
EPFL研究人员研制纳米器件,速度是当前晶体管的100倍
vivoX23评测 重新诠释了光感美学理念颜值爆表