Android系统启动流程(二)BootLoader引导程序

Android系统启动流程(二)BootLoader引导程序,第1张

上电之后到U-boot的流程

暂不关心CP的启动,而主要关心AP

Android启动流程——1序言、bootloader引导与Linux启动

嵌入式 Linux 系统从软件角度看可以分为四个部分:引导加载程序(Bootloader), Linux 内核,文件系统,应用程序。

当系统首次引导时,或系统被重置时,处理器会执行一个位于Flash/ROM中的已知位置处的代码,Bootloader就是这第一段代码。它主要用来初始化处理器及外设,然后调用 Linux 内核。Linux 内核在完成系统的初始化之后需要挂载某个文件系统作为根文件系统(Root Filesystem),然后加载必要的内核模块,启动应用程序。这就是嵌入式Linux系统启动过程 Linux 引导的整个过程。

Bootloader 的启动方式:

网络启动方式。这种方式的开发板不需要较大的存储介质,跟无盘工作站有点类似,但是使用这种启动方式之前,需要把Bootloader安装到板上的EPROM或者Flash中。Bootloader通过以太网接口远程下载Linux内核映像或者文件系统。Bootloader下载文件一般都使用TFTP网络协议,还可以通过DHCP的方式动态配置IP地址。

硬盘启动方式

传统的Linux系统运行在台式机或者服务器上,这些计算机一般都使用BIOS引导,并使用磁盘作为存储介质。Linux传统上是LILO (Linux Loader) 引导,后来又出现了GUN的软件 (Grand Unified Bootloader) 。 这两种Bootloader广泛应用在X86的Linux系统上。

Flash启动方式。大多数嵌入式系统上都使用Flash存储介质。Flash有很多类型,包括NOR Flash、NAND Flash和其它半导体盘。它们之间的不同在于: NOR Flash 支持芯片内执行(XIP, eXecute In Place),这样代码可以在Flash上直接执行而不必拷贝到RAM中去执行。而NAND Flash并不支持XIP,所以要想执行 NAND Flash 上的代码,必须先将其拷贝到 RAM中去,然后跳到 RAM 中去执行。NOR Flash 使用最为普遍。Bootloader一般放在Flash的底端或者顶端,这需要根据处理器的复位向量来进行设置。可以配置成MTD设备来访问Flash分区。

目需要编写了STM32的bootloader,其实编写bootloader主要事项有以下:

1、为你的bootloader程序选择存储器地址,因为STM32的存储器FLASH存储程序代码空间为512K,需要进行划分。

2、如果需要使用JTAG在线调试,则需要配置区域:

3、为您的用户程序选择合适的存储空间:

同时配置在线调试区域:

4、bootloader程序编写基本流程如下:

1)检测有无需要更新的标志,用户可自定义。比如说读取flash某位置存储的字节作为标志位。

2)如需更新,则调用STM32的FLASH程序擦鞋用户代码部分。

3)将新的bin文件(即2进制文件直接烧写进去,需要将keil生成的hex文件转换为bin文件,然后存储到外扩展的flash中)写入到STM32自带的FLASH中去,记住需要与上述设置的用户代码存储区一致。

4)更新成功后再跳转至用户程序。

5、用户程序需要注意一点,需要在程序运行前重新设置中断向量表,即:NVIC_SetVectorTable()。

6、用STM32自带的烧录软件进行烧录时,需要修改项目如下:

1)打开安装后目标文件中的map文件夹,我们所用的STM32为512Kflash,所以选取STM32_High-density_512KSTmap,将其分解为两个STmap文件(此文件可用记事本 打开)

STmap文件中,扇区是以每2K为一page来显示的,所以boot区我们只需要到page7,用户区我们需要page8到最后。

修改完成后再次打开此软件会发现多出了两个flash选项,可以根据此处来选择需要存储的代码区。

bootloader

引导程序

百科释义

在嵌入式 *** 作系统中,BootLoader是在 *** 作系统内核运行之前运行。可以初始化硬件设备、建立内存空间映射图,从而将系统的软硬件环境带到一个合适状态,以便为最终调用 *** 作系统内核准备好正确的环境。在嵌入式系统中,通常并没有像BIOS那样的固件程序(注,有的嵌入式CPU也会内嵌一段短小的启动程序),因此整个系统的加载启动任务就完全由BootLoader来完成。在一个基于ARM7TDMI core的嵌入式系统中,系统在上电或复位时通常都从地址0x00000000处开始执行,而在这个地址处安排的通常就是系统的BootLoader程序。

启动程序(英语:boot loader,也称启动加载器,引导程序)位于电脑或其他计算机应用上,是指引导 *** 作系统启动的程序。引导程序启动方式及程序视应用机型种类而不同。BIOS开机完成后,bootloader就接手初始化硬件设备、创建存储器空间的映射,以便为 *** 作系统内核准备好正确的软硬件环境。BootLoader是依赖于硬件而实现的,特别是在嵌入式领域,为嵌入式系统建立一个通用的BootLoader是很困难的。

在启动前要做:

1、USBHIDBootloaderv1200应用只能与合适的设备USBHIDBootloader固件版本v1200使用,它是免费的,可以从mikroElektronika的网站上下载。

2、Bootloader使用USBHID级连接,不需要额外的 *** 作系统驱动器。步骤:

1、建立USB链接

连接你的板到你的PC,当设备被你的 *** 作系统识别时灰色的USB标志变红,这表示USB的链接已经成功地连接了。你有5秒的时间执行下一步。如果你等太久,该设备将断开链接。

2、连接到MCU

在5秒内点击连接按钮。该芯片自动进入Bootloader模式,并为接下来的指令作准备。如果你的USB没有链接,只需复位芯片重新建立链接,然后再执行这个步骤。

3、选择HEX文件

选择你想要下载到芯片的程序,点击BrowseforHEX按钮或简单地拖拽你的HEX文件到MikroBootloader窗口。这将会出现在打开的文件的历史窗口。

4、启动Bootloader

点击Beginuploading按钮。点击ShowActivity按钮查看bootloader的 *** 作。

5、复位芯片

在等5秒后启动你新下载的程序后,Bootloader固件将自动复位MCU。

Linux 内核没有自己读取自己,并且运行自己的功能,他需要一个硬件相关的程序,提供初始化硬件环境,并且读取自己到特殊位置并且运行的前级程序。这个前置的程序就是 bootloader 。

bootloader 是和硬件相关的,不同的硬件有不同的 bootloader 。而 Linux 系统本身不含 bootloader 。

而 UC/OS 其实也有这个部分。只是 UC/OS 本身很小而且有针对硬件的代码,所以他可以把自己直接摆到 bootloader 的地方,让硬件级别的 bootloader 直接运行自己,而不需要一个功能更强的 bootloader 再去读取自己。

一般硬件都有一个固化的硬件启动过程,这个启动过程功能很简单,而且方式也很固定,如果让这个硬件级的启动过程直接启动 Linux ,那么这个硬件就需要完全的针对性设计,回导致整个硬件的灵活度降低。如果增加一个 bootloader 程序,这个 bootloader 既可以提供一个灵活的 *** 作系统启动方案,也可以提供很多的附加功能。而且这个东西可以针对硬件进行设计,使得硬件本身的启动功能可以做的很简单。

有了 bootloader ,Linux 就可以不自己去针对不同的硬件开发不同的 bootloader 代码,而专心提供通用 *** 作系统应该系统的各种功能。

以上就是关于Android系统启动流程(二)BootLoader引导程序全部的内容,包括:Android系统启动流程(二)BootLoader引导程序、嵌入式linux的bootloader的启动流程是怎样的、stm32bootload有什么作用等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/zz/10134842.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-05
下一篇2023-05-05

发表评论

登录后才能评论

评论列表(0条)

    保存