uboot成为嵌入式设备默认bootloader的原因及版本号演变解析

2025-03-01
来源:网络整理

(3)默认情况下,它得到了许多SOC制造商的支持。

总结:

经过多年的发展,它已成为事实上的行业标准。现在,大多数嵌入式设备默认使用。

3。版本号问题

(1)较早的版本号与以下相似:.3.4。后来,版本号与-2010.06相似。

(2)核心部分几乎没有太大变化。较新的版本支持更多的开发板。对于旧版本的芯片,旧版本和新版本之间没有区别。

4。什么是可移植性?

(1)即(一般启动代码),一般含义是可以在各个地方使用。因此它是便携式的。

(2)可移植性并不意味着它可以随意在任何开发委员会上使用,而是可以在源代码级别移植,并且可以用于多个开发委员会。移植后,可以在此开发板上使用。

功能

1。可以通过启动机器直接启动

(1)一般SOC支持多种启动方法,例如SD卡启动,启动,启动等,才能启动,必须​​根据特定的SOC启动设计设计。

(2)必须进行与硬件相对应的代码级别的更改和迁移,以确保可以从相应的启动媒体启动它们。该部分在第一阶段的.s文件中专门处理。

2。可以启动操作系统内核并将参数传递到内核

(1)的最终目标是启动内核。

(2)设计内核时,它被设计为传递参数。换句话说,我们可以提前为内核准备一些启动参数,并将它们放在内存中的特定位置并将其传递到内核。内核启动后,它将转到此特定位置以将参数传递给其,然后在内核中解析这些参数。这些参数将用于指导内核的启动过程。

3。可以提供系统部署功能

(1)必须能够利用某人的帮助来完成整个系统的燃烧和下载(包括镜像等)。

4。能够执行SOC级和董事会级硬件管理

(1)实现了某些硬件的控制功能(硬件是在中间初始化的),因为为了完成某些任务,必须使这些硬件可以正常工作。例如,如果闪烁时在LCD上显示进度栏,则必须能够驱动LCD。例如,如果可以通过串行端口提供操作接口,则必须能够驱动串行端口。例如,要实现网络功能,您必须驱动网卡芯片。

(2)SOC级别(例如串行端口)是SOC的内部外围设备,董事会级别是SOC外面的开发委员会的硬件(例如网络卡,)

5。“生命周期”

(1)生命周期是指:何时开始运行以及何时结束运行。

(2)本质上,它是一个裸机的程序(不是操作系统)。 SOC启动后,它将简单地运行(这意味着其他程序在运行时不能同时运行),并且一旦完成后,它就无法返回(因此,启动内核后,它已经死了。如果您想再次看到界面,则只能重新启动系统。重新启动不是现在发生的事情的复活,重新启动是另一个生命。

(3)入口和出口。入口是在打开计算机时自动启动,唯一的退出是启动内核。您还可以执行许多其他任务(例如烧毁系统),但是在执行其他任务后,您可以继续执行命令,但是一旦执行了启动内核命令,就无法返回。

摘要:一切都是为了启动内核。

如何工作

1。从裸金属程序镜像开始。

(1)本质是一个裸金属程序,裸金属程序xx.bin在我们的整个裸金属系列中写成的本质没有任何差异。如果没有区别,那就是:我们写的大多数著作小于16kb,大于16kb(通常在180k-400k之间)。

(2)这是一个开源项目本身,由几个.c文件和.H文件组成。配置汇编后,将生成一个.bin。这是这个裸金属程序的图像文件。然后,该图像文件被合理地燃烧到启动媒体中,并将​​其带到SOC进行启动。也就是说,当它不运行时,它看起来像是.bin,并且通常位于启动媒体中。

(3)运行时,它将被加载到内存中,然后给CPU提供一项指令以进行运行。

2。命令界面

(1)普通的裸金属程序在运行时直接执行,并且执行过程中的效果与代码有关。

(2)某些程序需要与人进行互动,因此在程序中实现了一个程序(即提供人机交互的界面。

注意:

这不是操作系统,它与操作系统无关。在此过程中打开终端后,您将获得一个,然后输入命令输入马车进行执行。中间的工作方法与中间的工作方法非常相似(实际上,几乎相同,但是命令集不同。例如,在中间,您可以LS,但是在LS中,您无法识别它)。

3。掌握2个关键点:命令和环境变量

(1)大多数时间和工作都是在启动后完成的(例如,要部署系统,您需要输入命令,设置环境变量并启动内核,您需要在命令行下键入命令)。

(2)命令是可以在命令中标识的各种命令。其中有数十个命令,其中一些是常用的,而另一些则不常用(我们也可以自己添加命令)。

(3)环境变量和操作系统环境变量的工作原理和方式几乎完全相同。设计时,我们使用操作系统的设计概念(命令行从终端命令行借用来工作,而环境变量从操作系统环境变量借用,并且几乎完全复制了驱动程序的驱动程序)。

(4)环境变量可以视为系统的全局变量。环境变量名称是内置在系统的(如果您知道的话,并且知道它,并且您不知道,您就不知道。这部分是系统随附的默认环境变量,例如路径;但是也有一些您添加的环境变量,但是我们不知道您添加的系统,但我们自己知道它)。

系统或我们自己的程序可以通过读取环境变量运行时指导程序的运行。该设计的优点是灵活性。例如,如果我们希望一个程序更改运行方法,则不必重新修改程序代码,然后重新编译和运行,而只需修改相应的环境变量即可。

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

DDR的管理

1。舞台分区

(1)所谓的分区是指块管理。

(2)在PC和其他产品中,由于每个人在操作系统下使用硬盘,因此整个硬盘由操作系统管理,并且操作系统将使用文件系统来帮助我们管理硬盘空间。 (管理层确保文件不会彼此堆叠),因此用户不必过多关注分区问题。

(3)中东没有操作系统,因此我们必须提前使用分区定义来管理(相当于硬盘)(实际上,中央有一个分区表,分区表是我们在执行系统迁移时使用的总体管理分配方法)。通过此定义,我们在部署系统时会根据分区定义方法部署,并且该软件也根据此分区定义工作,因此我们不会错。

(4)分区方法不确定,不是固定的,并且可以变化。但是,在移植中,必须提前设计。通常,在设计系统进行移植时将确定。设定的标准是:

:必须从起始地址存储(也许是扇区0,也许是1区,也许是其他方面,取决于SOC启动设计),分区的大小必须确保放下,通常是设计为1MB(因为通常不够,无论它实际上有多大,它实际上可以工作,但它是浪费);

环境变量:环境变量分区通常密切存储,大小为32kb或更多。

:它可以与环境变量紧密存储,并且大小通常为3MB或5MB或其他。

:·····

其余的是免费分区。通常,启动后,将安装免费分区以使用

摘要:一般规则如下:

(1)每个分区彼此连接,上一个分区的结束是下一个分区的开始。

(2)从头到尾都充分利用整体。

(3)必须在开始,并且其他分区的相对位置是可变的。

(4)每个分区的尺寸由系统移植工程师本人确定,通常被确定为适当的尺寸(不太小,因为它太小,而且易于溢出;它不能太大,并且太大而无法浪费空间)

(5)分区是在系统移植之前确定的,并且在中和中使用了同一分区表。将来,分区方法必须与系统代码相同。

2。阶段DDR的分区

(1)DDR的分区和分区不同,主要是因为它们被关闭,而DDR由于关闭而消失。因此,可以说,每次系统运行时,DDR仅被部署和使用。

(2)内存分区主要是在启动内核之前。启动内核后,内核的内存管理模块将接管整个内存空间。当时,我们不需要管理它。

(3)请注意,记忆分配的关键是分配哪个内存用于什么,以避免使用相同的内存由不同功能引起的相互践踏。

例如,如果我们将TFTP下载到内存,将会出现错误,因为此内存实际上是镜子。此下载将导致下载覆盖内存。

普通命令1

1。线缓冲命令行类似于终端

(1)线缓冲指的意思是:当我们输入命令到终端命令行时,这些命令并未立即被系统识别,而是被缓冲到缓存区域(也就是说,系统认为我们尚未完成输入)。当我们按键(行包裹)时,系统会认为我们已经完成了,然后使用刚刚输入的所有命令进行分析和处理。

(2)有三种用于终端设计的缓冲机制:未缓冲,线缓冲和完整的缓冲区。

(3)某些命令具有简化的别名,例如可以简化命令,例如可以简化它们的设置。

(4)某些命令将采用参数(请注意,格式已固定),并且每个命令都具有预先指定的各种格式。有些命令没有参数,例如 /命令;某些命令具有可选参数(当然,可以使用是否没有参数的执行结果不同);某些命令必须具有参数(例如 /set命令)。

(5)使用“ help+命令名称”查询命令的详细信息。仅输入帮助时,将打印命令列表。

2。命令中的特殊符号(例如单引号)

(1)一些具有很长参数的命令。为了说明这很长,中间有许多空间,它是给它的整个参数,因此请使用单个引号标记很长的中间空间。

(2)其他符号也可能具有特定的含义。当您遇到的命令行有特殊的符号时,请注意不要犯错,但可能具有特殊的含义。

3。第一个命令:/

(1)命令不需要包含参数,并且用于打印系统中的所有环境变量。

(2)环境变量就像程序的全局变量一样。环境变量可以在程序中的任何地方调用或更改(通常称为)。环境变量和全局变量之间的差异在于,全局变量的生命周期在程序的运行中。当程序开始运行时,该程序将在程序结束时死亡,下次运行程序时从头开始启动;

但是,环境变量存储在另一个特殊区域(其中有环境变量分区)。一旦我们将环境变量保存在程序中,下次我们启动时,环境变量的值将在上次更改后维护保存值。

普通命令2

1。设置(添加 /更改)环境变量: /set

用法:设置名称

2。将更改保存到环境变量: /保存

/保存命令直接执行,无参数。它的函数是将内存中环境变量的值同步到环境变量的分区。

注意:环境变量的节省是整体覆盖和保存,这意味着内存中的所有环境变量都将覆盖整个环境变量分区中的原始内容。

摘要:要完全更改环境变量的值,有2个步骤:

步骤1:设置命令以更改内存中的环境变量

步骤2:使用保存命令将其同步到中间环境变量的分区。

有时,我们只想测试此环境变量,而不想影响下一个启动,因此我们只是设置了不保存。这样,设置后已经实现了当前的运行效果,但是将无法保存下一个启动。

3。网络测试说明:ping

(1)命令用法:ping ip地址

注意:Ping是测试开发板和主机之间的网络链接。

注意以下步骤:

1)首先,插入互联网电缆。

2)尝试先ping主机。请注意有线网卡的地址设置(设置本地连接)。将主机的本地连接IPv4地址设置为192.168.1.10。

3)第三步是确认开发委员会中几个与网络相关的环境变量的值是否正确。最重要的是(此环境变量代表当前开发板的IP地址),它必须与主机的IP地址在同一网络中。

有关更具体的PING教程,请参考:

普通命令3

1。tftp下载命令:TFTP

(1)主要目标本身是启动内核。为了完成内核的启动,它必须能够部署内核。为了部署内核,有必要从主机下载内核图像并将其刻录到当地。

如何将镜像从主机(或虚拟机)下载到开发板?

主流方法有很多方法是:和TFTP。

该方法是通过USB电缆传输数据。

TFTP方法是通过有线网络。典型的方法是通过互联网,这是近年来仅是新开发的。

(2)下载TFTP方法时,它实际上扮演了TFTP客户端程序的角色。主机或虚拟机中必须有一个TFTP服务器,然后将要下载的映像文件放置在服务器下载目录中,然后下载开发板中使用的TFTP命令。

(3)有些人习惯在其中构建TFTP服务器,并且通常使用某些软件来构建它们(例如,使用相对易于使用);有些人习惯于在其下构建TFTP服务器。

(4)检查开发板的环境变量,并注意必须将其设置为虚拟机的IP地址。 (此环境变量的含义是主机TFTP服务器的IP地址)

(5)然后在开发板下ping虚拟机,然后尝试下载:tftp -qt(意思是将服务器上名为-qt的文件下载到开发板内存的地址。),下载并删除它。刻录写作。

普通命令4

1。SD卡/操作命令电影

(1)如果开发委员会使用SD卡/ emmc/等,则在其中操作的命令是电影(或MMC)

(2)电影说明是一个带有许多子命令的命令集。可以通过帮助电影来查看特定用法。

(3)Movi的说明与电影阅读和电影相同。 Movi Read用于将其读取为DDR,电影用于将内容写入DDR中。当了解这些说明时,您必须注意所涉及的两个硬件:DDR内存。

(4)电影阅读{u-boot | } {addr}此命令使用一个常规描述方法来描述:没有标记在电影外部和读取,这意味着每次使用此指令时,都必须选择一个由卷曲括号{}包含的部分;牙套中的垂直条形桌是多项选择。括号[]表示可选参数

(5)有很多指令的用途,例如电影阅读U-Boot,这意味着将U-Boot分区读取到DDR的起始位置。 (代码将分为许多分区,每个分区都有一个地址范围和分区名称。在程序操作中,您可以使用直接地址操作分区,也可以使用分区名称操作分区。);

请注意,这里的一个也可以直接写入,这意味着相同(命令行中的所有数字默认为十六进制,无论您是否添加0x)。

2。操作命令nand

了解方法和操作方法与电影说明完全相似

3。内存操作说明:MM,MW,MD

(1)DDR中没有分区(我只听说过分区硬盘和分区内存,但是我从未听说过分区内存...),但是当使用内存时,您必须注意不要越过边界并踩到他人。因为这是一个裸机的金属程序,与将整个内存管理的操作系统不同,该系统负责分配和管理,并且系统将确保内存不会随便跨越边界。然后,所有内存都无法在裸机程序中管理,并且记忆被分散和随意使用,因此,如果程序员(使用它的人)不注意,他可能会覆盖自己的数据。

(2)MD用于在内存中显示内容。

(3)MW是将内容写入内存

(4)MM意味着修改某些内存。直言不讳,仍然有必要写内存(如果需要一批内存修改单元,则最合适的是使用MM)

4。启动内核命令:GO

(1)的最终目标是启动内核。启动内核表现为命令。从命令行呼叫此命令将启动内核(无论是否成功,因此此命令是死胡同)。

(2)差异:同时启动内核并将参数传递到内核,而GO命令启动内核而无需传递参数。实际上,这是启动内核的真实命令,通常使用。 GO命令不是专门为启动内核而设计的,但是GO命令的内部实际上是指向内存地址的功能指针,然后直接调用该函数。 GO命令的本质是PC直接跳到内存地址并运行。

GO命令可用于执行其中的任何裸金属程序(有一种方法可以调试裸机程序,该程序将预先启动,然后在其中下载Bare-程序,然后使用GO命令执行Bare Bare-程序)。

公共环境变量1

环境变量如何参与程序执行

(1)环境变量的两个部分,其中一个部分,另一部分在DDR中。电源时,所有环境变量都会一次从中读取DDR作为环境变量的初始化值。然后,在使用过程中使用此副本。用户可以使用指令重写DDR中的环境变量以更新环境变量。下次打开时,我将再次阅读。

(2)环境变量由字符串表示,这意味着每个环境变量均根据字符匹配区分。因此,请确保在使用时避免键入错别字。

1。自动运行倒计时时间:

2。网络设置:

(1)这是开发委员会的本地IP地址

(2)当开发板使用TFTP命令从TFTP服务器下载内容时,这是TFTP服务器的IP地址。

(3)这是开发委员会的本地网关地址

(4)这是子网罩

(5)它是开发委员会本地网卡的MAC地址。

公共环境变量2

1。自动运行命令设置:

(1)启动后,启动将自动计算几秒钟。如果没有人按中断启动,则将自动执行启动命令()以启动内核。

(2)当启动自动启动时,与该环境变量值相对应的命令集实际上是在内部执行的:例如,= movi read;

它的意思是:读取DDR内存地址的分区,然后使用启动命令从内存启动内核。

(3)设置;然后重新启动,您会看到,在开始倒计时后,自动执行命令以打印出环境变量。这个小实验表明,计算机是自动执行的。

(4)设置环境变量:例如,设置'movi read; '

2。转到主题:

(1)当内核启动时,它可以接收传递给它的启动参数。这些启动参数是与内核一致的形式和内容。内核在这些启动参数的指导下完成了启动过程。这种设计是为了灵活性,因此可以以不同的方式启动内核而无需重新编译。

(2)我们需要做的是:将其设置在环境变量中,然后在启动内核时将自动传递到内核。

(3)例如,环境变量,

==,root =/ dev/ rw init =/ = ext3

意义解释:

=,:控制台使用串行端口0,波特率,

root =/ dev/ rw:root文件系统位于SD卡端口0设备()设备()的第二个分区中,并且根文件系统是可读且可写的。

init =/:进程1(初始过程)的途径

= ext3:根文件系统的类型是ext3

(4)内核参数传输非常重要。在内核移植期间,新手通常无法启动内核,因为他们忘记将参数传递给内核,或者传递给内核的参数不正确。

3。创建,更改和删除环境变量的方法

(1)创建一个新的环境变量并使用set var,例如设置.168.1.110

(2)更改环境变量并使用set var,例如设置.168.1.111

(3)删除环境变量并使用set var,例如

注意:修改环境变量后,您必须保存它们,否则下次启动计算机时,更改将再次消失。

分享