Uboot预备知识
来源:互联网 发布:java堆栈图解 编辑:程序博客网 时间:2024/06/06 19:16
Uboot预备知识
什么是uboot?
uboot是SourceForge上的开源项目,是德国人最早发起的,最后由整个网络上所有感兴趣的人共同维护发展而来的一个bootloader。Uboot全称universal bootloader(通用的启动代码)遵循GPL条款的开放源码项目。 可移植性强,支持多种处理器系列。
为什么要有uboot?
计算机运行时需要的三大部件;CPU + 外部存储器(flash/硬盘) +内部存储器(DDR SDRAM/SRAM)。以PC机的启动为例:PC机上电后先执行BIOS程序,BIOS程序负者初始化DDR内存、初始化硬盘,然后将硬盘上的OS镜像读到DDR中,然后跳转到DDR去执行OS直到启动(OS启动后BIOS就无用了)。--->何为BIOS程序?BIOS程序部署在PC机的主板上,出厂时已经预定了,因为操作系统部署在硬盘上,而内存(Norflash)掉电丢失,CPU掉电时不工作,所以需要uboot来作为系统引导,部署程序。
uboot 必须解决那些问题呢?
Ubootd的终极目标就是启动内核,为了能达到这个目标,前期必须能解决以下问题。
1.自身可开机自启动。一般的SOC都支持多种启动方式,如SD卡启动,NorFlash启动、 NandFlash启动等。关于何种启动,要根据SOC来定。在start.s中处理了如何开机。
2.能够引导操作系统内核启动并给内核传参。
Linux内核在设计的时候,设计为可以被传参,也就说可以在uboot中事先给Linux 内核准备一些启动参数,并且存放在内存中的特定位置并传给内核,内核启动后会到 这个特定位置去取uboot传给他的参数,然后在内核中解析这些参数,用来指导 linux内核的启动过程。
3.能提供系统部署功能
uboot必须能够被人借助而完成整个系统在flash上的烧录下载工作。(包括uboot、 kernel、rootfs等镜像)。
4.能进行SOC级和板级硬件管理
Uboot中实现了一部分硬件的控制能力(uboot中初始化一部分硬件),因为uboot为了
完成一些任务必须让这些硬件工作。如驱动inand、驱动LCD、驱动网卡等。
uboot 的工作方式有哪些?
1. 是一个裸机程序。uboot本质就是一个裸机程序。Uboot一般大于16kb,在180k-400k
之间。运行时被加载到内存中然后被CPU执行。
2. 命令式的shell界面。有些程序需要和人进行相互交互,此时就要求uboot有shell
界面。Shell不是操作系统,和操作系统没有什么关系,uboot中的shell几乎和linux
终端shell一样,区别在于命令集不一样,linux中可以ls,uboot中ls就不识别。
3. 命令和环境变量。uboot大部分工作时间在shell界面下完成的,利用自身识别的各
种命令进行操作。Uboot的环境变量和操作系统的环境变量的工作原理和方式类似。
Uboot的设计借助操作系统的理念(命令工作方式借鉴linux终端的命令行,环境变
量借鉴操作系统的环境变量,驱动管理参照linux的驱动框架)。
环境变量可以认为是系统的全局变量,环境变量名有些是系统内置的,有些是用户自
己添加的。环境变量就是系统运行时的配置属性。
uboot 的常用命令有哪些?
1. Uboot的命令行类似于linux终端的命令行,具有行缓冲。行缓冲:当我们向终端输
入命令时,此时命令没有立即被识别,而是被缓冲到一个缓冲区,当我们按下回车键
后系统就认定我们输入完了,然后将缓冲区中所有刚才输入的命令做分析。Linux终
端有3种缓冲机制:无缓冲、行缓冲、全缓冲。
2. 有些命令有简化的别名
如printenv命令可以简化为print,如setenv可以简化为set。
3. 有些命令会带参数。
4. uboot的有些命令带的参数非常长,为了告诉uboot这个非常长而且中间有好多个空
格的东西是给他的一整个参数,所以用单引号将这个很长且中间有空格隔开的参数引
起来。
5.有些命令是一个命令族。
命令族意思就是好多个命令开头都是用同一个命令关键字的,但是后面的参数不一样
printenv/print命令:
print命令不用带参数,作用是打印出系统中所有的环境变量。
设置(添加/更改)环境变量:setenv/set
用法:set name value
保存环境变量的更改:saveenv/save
网络测试指令:ping
tftp下载指令:tftp
nfs启动内核命令:nfs
SD卡/iNand操作指令movi
内存操作指令:mm、mw、md
启动内核指令:bootm、go
uboo 的常用环境变量有哪些?
自动运行倒数时间:bootdelay
网络设置:ipaddr serverip
自动运行命令设置:bootcmd
uboot给kernel传参:bootargs
(1)新建一个环境变量,使用set var value
(2)更改一个环境变量,使用set var value
(3)删除一个环境变量,使用set var
- Uboot预备知识
- 查看uboot源代码的预备知识
- 预备知识
- 预备知识
- 预备知识
- 预备知识
- 预备知识
- 预备知识
- 破解预备知识
- classloader预备知识
- C++ 预备知识
- 第一章 预备知识
- 文件系统安装预备知识
- java的预备知识
- 第一章(预备知识)
- 1.五子棋预备知识
- 【转】LDA预备知识
- 四元数预备知识
- POJ 3415-Common Substrings(后缀数组+单调栈-公共子串的长度)
- (27)表插入排序
- 选择小波的实验方法,自己查看
- 【工作记录】maven本地仓库和远程仓库的理解
- GIT的深入理解与使用
- Uboot预备知识
- C++ 和lua交互学习的三个例子
- (c语言)在一个有数字的字符串中输出最长的数字
- PRML读书笔记——线性回归模型
- c++运算符重载的方法提要
- 选项卡控制器(tabBarController)基础
- 写给初学者22_android_百分比布局
- 二分图的最大匹配——匈牙利算法
- 【面试题】剑指Offer-50-求两个节点的最近公共祖先