uboot是用来干什么的,有什么作用?

uboot 属于bootloader的一种,是用来引导启动内核的,它的最终目的就是,从flash中读出内核,放到内存中,启动内核

所以,由上面描述的,就知道,UBOOT需要具有读写flash的能力。

uboot是怎样引导启动内核的?

uboot刚开始被放到flash中,板子上电后,会自动把其中的一部分代码拷到内存中执行,这部分代码负责把剩余的uboot代码拷到内存中,然后uboot代码再把kernel部分代码也拷到内存中,并且启动,内核启动后,挂着根文件系统,执行应用程序。

uboot启动的大过程是怎么样的?

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,setup_commandline_tag,setup_end_tag,根据名字我们就知道具体的段内存储的信息,memory中为板子的内存大小信息,commandline为命令行信息,

2,跳到入口地址,启动内核

启动的函数为the_kernel(0,bd->bi_arch_number,bd->bi_boot_param)

bd->bi_arch_number为板子的机器码,bd->bi_boot_param为启动参数的地址

总结: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。

3 uboot必须解决哪些问题?

3.1自身可开机直接启动

1)一般的SoC都支持多种启动方式,譬如SD卡启动、NorFlash启动、NandFlash启动等•••••uboot要能够开机启动,必须根据具体的SoC的启动设计来设计uboot

2)uboot必须进行和硬件相对应的代码级别的更改和移植,才能够保证可以从相应的启动介质启动。uboot中第一阶段的start.S文件中具体处理了这一块。

3.2能够引导操作系统内核启动并给内核传参

1)uboot的终极目标就是启动内核。

2)linux内核在设计的时候,设计为可以被传参。也就是说我们可以在uboot中事先给linux内核准备一些启动参数放在内存中特定位置然后传给内核,内核启动后会到这个特定位置去取uboot传给他的参数,然后在内核中解析这些参数,这些参数将被用来指导linux内核的启动过程。

3.3能提供系统部署功能

1)uboot必须能够被人借助而完成整个系统(包括uboot、kernel、rootfs等的镜像)在Flash上的烧录下载工作。

2)裸机教程中刷机(ARM裸机第三部分)就是利用uboot中的fastboot功能将各种镜像烧录到iNand中,然后从iNand启动。

3.4 能进行soc级和板级硬件管理

1)uboot中实现了一部分硬件的控制能力(uboot中初始化了一部分硬件),因为uboot为了完成一些任务必须让这些硬件工作。譬如uboot要实现刷机必须能驱动iNand,譬如uboot要在刷机时LCD上显示进度条就必须能驱动LCD,譬如uboot能够通过串口提供操作界面就必须驱动串口。譬如uboot要实现网络功能就必须驱动网卡芯片。

2)SoC级(譬如串口)就是SoC内部外设,板级就是SoC外面开发板上面的硬件(譬如网卡、iNand)

3.5 uboot的"生命周期"

1)uboot的生命周期就是指:uboot什么时候开始运行,什么时候结束运行。

2)uboot本质上是一个裸机程序(不是操作系统),一旦uboot开始SoC就会单纯运行uboot(意思就是uboot运行的时候别的程序是不可能同时运行的),一旦uboot结束运行则无法再回到uboot(所以uboot启动了内核后uboot自己本身就死了,要想再次看到uboot界面只能重启系统。重启并不是复活了刚才的uboot,重启只是uboot的另一生)

3)uboot的入口和出口。uboot的入口就是开机自动启动,uboot的唯一出口就是启动内核。uboot还可以执行很多别的任务(譬如烧录系统),但是其他任务执行完后都可以回到uboot的命令行继续执行uboot命令,而启动内核命令一旦执行就回不来了。

总结:uboot的一切都是为了启动内核。

4.S5PV210的uboot与架构

5 uboot的工作方式

5.1 从裸机程序镜像uboot.bin说起

1)uboot的本质就是一个裸机程序,和我们裸机全集中写的那些裸机程序xx.bin并没有本质区别。如果非说要有区别,那就是:我们写的大部分小于16KB,而uboot大于16KB(一般uboot在180k-400k之间)

2)uboot本身是一个开源项目,由若干个.c文件和.h文件组成,配置编译之后会生成一个uboot.bin,这就是uboot这个裸机程序的镜像文件。然后这个镜像文件被合理的烧录到启动介质中拿给SoC去启动。也就是说uboot在没有运行时表现为uboot.bin,一般躺在启动介质中。

3)uboot运行时会被加载到内存中然后一条指令一条指令的拿给CPU去运行。

5.2 uboot的命令式shell界面

1)普通的裸机程序运行起来就直接执行了,执行时效果和代码有关。

2)有些程序需要和人进行交互,于是乎程序中就实现了一个shell(shell就是提供人机交互的一个界面,回想ARM裸机全集第十六部分),uboot就实现了一个shell。

注意:shell并不是操作系统,和操作系统一点关系都没有。linux中打开一个终端后就得到了一个shell,可以输入命令回车执行。uboot中的shell工作方式和linux中的终端shell非常像(其实几乎是一样的,只是命令集不一样。譬如linux中可以ls,uboot中ls就不识别)。

4.3掌握uboot使用的2个关键点:命令和环境变量

1)uboot启动后大部分时间和工作都是在shell下完成的(譬如uboot要部署系统要在shell下输命令、要设置环境变量也得在命令行地下,要启动内核也要在命令行底下敲命令)。

2)命令就是uboot的shell中可以识别的各种命令。uboot中有几十个命令,其中有一些常用另一些不常用(我们还可以自己给uboot添加命令),后面会用几节课时间来依次学习uboot中常用命令。

3)uboot的环境变量和操作系统的环境变量工作原理和方式几乎完全相同。uboot在设计时借助了操作系统的设计理念(命令行工作方式借鉴了linux终端命令行,环境变量借鉴了操作系统的环境变量,uboot的驱动管理几乎完全照抄了linux的驱动框架)。

4)环境变量可以被认为是系统的全局变量,环境变量名都是系统内置的(认识就认识,不认识就不认识,这部分是系统自带的默认的环境变量,譬如PATH;但是也有一部分环境变量是自己添加的,自己添加的系统就不认识但是我们自己认识)。系统或者我们自己的程序在运行时可以通过读取环境变量来指导程序的运行。这样设计的好处就是灵活,譬如我们要让一个程序更改运行方法,不用去重新修改程序代码再重新编译运行,而只要修改相应的环境变量就可以了。

5)环境变量就是运行时的配置属性。

uboot的作用和功能相关推荐

  1. 使用u-boot的USB下载功能烧写程序到Nand Flash ——韦东山嵌入式Linux学习笔记06

    本文实验环境: 1. windows 7(64bit) 2. JZ2440(V2) 假设板子的Nor Flash上已经烧好了u-boot,如果我想利用u-boot的USB下载功能,把一个裸板程序烧写到 ...

  2. Keil综合(01)一些常见文件类型的作用和功能说明

    相关标题: Keil中.uvmpw..uvprojx..uvproj..uvoptx..uvopt的意思是什么? Keil中.d  .o .axf .elf这些文件可以删除吗? 前言 看着一大堆文件舒 ...

  3. 什么是宝塔面板?宝塔面板的作用和功能是什么?

    什么是宝塔面板?宝塔面板的作用和功能是什么?宝塔面板是一款服务器管理软件,支持Windows和Linux系统,可以通过Web端轻松管理服务器,提升运维效率,该软件内置了创建管理网站.FTP.数据库.可 ...

  4. 什么是锁相放大器?它的作用与功能

    本文讲述的是关于锁相放大器一些知识点,想了解的可以学习一下! 一.什么是锁相放大器? 锁相放大器是一种对交变信号进行相敏检波的放大器.它利用和被测信号有相同频率和相位关系的参考信号作为比较基准,只对被 ...

  5. 企业宣传画册印刷产品的作用和功能

    企业宣传画册印刷产品的作用和功能 编辑:AGO(安可)品牌顾问  近年来,更多的企业都认识到了设计并订购企业宣传画册产品的重要性,因为在当今的商品经济社会中,企业宣传画册产品无论在企业营销或产品推广方 ...

  6. 全面解析以太网交换机的作用与功能

    经常有朋友问:"以太网交换机是什么?它的作用与功能呢?和如何选择适合的交换机呢?本期武汉海翎光电的小编将详细为大家介绍关于交换机的基础知识. 交换(switching)是按照通信两端传输信息 ...

  7. 编码器的作用和功能有哪些

    编码器的作用和功能有哪些 最近很多咨询编码器的作用的,小编结合一下线上和线下的资料,总结了一下,供大家参考. 要说编码器,它的作用很多,主要是用来测量机械运动的速度.位置.角度.距离或计数的,编码器除 ...

  8. 计算机系统中声卡的作用,声卡的作用和功能是什么

    声卡的作用和功能是多媒体计算机中用来处理声音的接口卡:声卡可以把来自话筒.收音机.录音机.激光唱机等设备的语音.音乐等声音变成数字信号交给计算机处理,并以文件形式保存,还可以把数字信号还原成为真实的声 ...

  9. python装饰器作用和功能_python装饰器大详解

    一.作用域 在python中,作用域分为两种:全局作用域和局部作用域. 全局作用域是定义在文件级别的变量,函数名.而局部作用域,则是定义函数内部. 关于作用域,我们要理解两点: a.在全局不能访问到局 ...

最新文章

  1. Android RecyclerView
  2. 计算机专业技能知识,2017年度计算机专业技能知识资料基础知识资料试题'及其答案...
  3. Top-1 Error 和 Top-5 Error
  4. .NET Core 实现基于Websocket的在线聊天室
  5. python dlib 年龄 性别_python dlib学习(一):人脸检测
  6. 快速建站-html基础-0223
  7. autolisp获取目录服务器信息失败,大神们,帮忙看看这个代码哪儿有问题?老是出现“参数类型错误:...
  8. PDE7 wave equation: intuition
  9. 编写有效用例_阅读笔记03
  10. python网页版本_python 网页版
  11. VBA-使用inputbox方法
  12. 联想小新一键恢复小孔_联想小新笔记本怎么一键恢复|联想小新air恢复出厂系统步骤...
  13. Git入门与进阶 - 总览
  14. #Geek Talk# AI and FinTech,投资阿里巴巴的 Benson Tam 也会跟大家一起 Talk
  15. Mybase7延长试用期
  16. 创建手机页面弹出键盘的时候背景图片被挤上去的解决办法
  17. IOS7 隐藏状态栏 (电池栏)
  18. Vue脚手架使用步骤
  19. android launcher 调用 widget,Launcher3添加桌面appWidget
  20. 科技交流英语(2022秋)Unit 8 test

热门文章

  1. c语言中的字节和元素,C语言指向数组元素的指针
  2. 如何让一个应届毕业生快速成长?
  3. 0-1背包 一维数组为什么逆序枚举
  4. websocket客户端
  5. js过滤HTML标签以及空格
  6. 【iOS工具】rvm、Ruby环境和CocoaPods安装使用及相关报错问题解决(2016 12 15 更新)...
  7. 利用Powershell SSH-Session 工具管理 linux或网络设备
  8. RocketMQ 基本概念
  9. 用ldap方式访问AD域的的错误解释
  10. [Python]Python操作/管理Mysql学习(一)