TQ2440 学习笔记—— 27、移植U-Boot【Bootloader 作用、工作流程】

发布者:美丽花朵最新更新时间:2022-04-19 来源: eefocus关键字:TQ2440  移植U-Boot  Bootloader 手机看文章 扫描二维码
随时随地手机看文章

一、Bootloader 简介


1、系统上电之后,需要一段程序来进行初始化:关闭WATCHDOG、改变系统时钟、初始化存储控制寄存器、将更多的代码复制到内存中等。如果它能将操作系统内核复制到内存中运行,无论从本地(比如Flash)还是从远端(比如通过网络),就称这段程序为Bootloader 。


简单的说,Bootloader 就是这么一段小程序,它在系统上电时开始执行,初始化硬件设备、准备好软件环境,最后调用操作系统内核。


2、Bootloader 的启动方式


CPU 上电后,会从某个地址开始执行。比如MIPS 结构的CPU 会从0xBFC00000取第一条指令,而ARM 结构的CPU则从地址 0x0000000 开始。嵌入式开发板中,需要把存储器件ROM或Flash 等映射到这个地址,Bootloader 就存放在这个地址开始处,这样以上电就可以执行。


Bootloader 的两种操作模式


a、启动加载模式:上电后Bootloader 将操作系统加载到RAM中,整个过程无用户介入。


b、下载模式:在这种模式下,开发人员可以使用各种命令,通过串口连接或者网络连接等通讯手段从主机下载文件(比如内核映象、文件系统映象),将它们直接放在内存运行或者烧入Flash 类固态存储设备中。


二、Bootloader 的结构和启动过程


1、嵌入式Linux 系统从软件的角度通常可以分为以下4 个层次。


a、引导加载程序,包括固化在固件中的boot 代码(可选)和Bootloader 两大部分。


有些CPU 在运行Bootloader 之前先运行一段固化程序,比如x86 结构的CPU 就是先运行BIOS 中的固件,然后才运行硬盘第一个分区中的Bootloader。在大多嵌入式系统中并没有固件,Bootloader 是上电后执行的第一个程序。


b、Linux 内核。


特定于嵌入式板子的定制内核以及内核的启动参数。内核的启动参数可以是内核默认的,或者是由Bootloader 传递给它的。


c、文件系统。


包括根文件系统和建立与Flash 内存设备之上的文件系统。里面包含了Linux 系统能够运行所必须的应用程序、库等,比如shell 程序, 动态链接的程序运行时需要的glibc 或uClibc 库等。


d、用户应用程序


特定于用户的应用程序,它们也存储在文件系统中。有时在用户应用程序和内核层之间可能还会包括一个嵌入式图形用户界面。常用的嵌入式GUI有: Qtopia 和 MiniGUI 等。


典型分区结构:


”Boot parameters“ 分区中存放一些可设置的参数,比如IP地址、串口波特率、要传递给内核的命令行参数等。


Bootloader 首先运行,然后它将内核复制到内存中(也有些内核可以在固态存储设备上直接运行),并在内存某个固定的地址设置好要传递给内存的参数,最后运行内核。内核启动后,它会挂载根文件系统,启动文件系统中的应用程序。


2、Bootloader 的两个阶段


Bootloader 的启动过程可以分为单阶段、多阶段两种。通常多阶段的Bootloader 能提供更加复杂的功能以及更好的移植性。


Bootloader 大多都是两阶段的启动过程:


第一阶段:汇编语言实现,它完成一些依赖于CPU 体系结构的初始化,并调用第二阶段的代码;


第二阶段:通常用 C 语言实现。


具体如下:


(1)Bootloader 第一阶段的功能


a、硬件设备初始化;(包括关闭WATCHDOG、关中断、设置CPU 的速度和时钟频率、RAM 初始化等)


b、为加载 Bootloader 的第二阶段代码准备RAM 空间;


c、复制 Bootloader 的第二阶段代码到RAM 空间中;


d、设置好栈;


e、跳转到第二阶段代码的C入口点。


(2)Bootloader 第二阶段的功能


a、初始化本阶段要使用到的硬件设备;


b、检测系统内存映射;


c、将内核映象和根文件系统映象从Flash 上读到RAM 空间中;


d、为内核设置启动参数;


e、调用内核。


将内核存放在适当的位置后,直接跳到它的入口点即可调用内核。调用内核之前,下列条件要满足。


(3)Bootloader 与内核的交互


Bootloader 与内核 的交互式单向的,Bootloader 将各类参数传给内核。由于它们不能同时运行,传递办法只有一个: Bootloader 将参数放在某个约定的地方之后,再启动内核,内核启动后从这个地方获得参数。


除约定好参数存放地址外,还要规定参数的结构。(标记的数据结构)



三、常用的 Bootloader 介绍


开放源码的Linux 引导程序

Vivi 是 Mizi 公司针对 Samsung 的ARM 架构 CPU 专门设计的,基本上可以直接使用,命令简单方便。不过其初始版本只支持串口下载,速度较慢。


U-Boot 支持大多CPU,可以烧写EXT2、JFFS2文件系统映象,支持串口下载、网络下载,并提供了大量的命令。相对于Vivi ,它的使用更复杂,但是可以用来更方便的调试程序。

关键字:TQ2440  移植U-Boot  Bootloader 引用地址:TQ2440 学习笔记—— 27、移植U-Boot【Bootloader 作用、工作流程】

上一篇:ADS 1.2 在WIN7 64 下——编译测试程序出错的问题
下一篇:TQ2440 学习笔记—— 29、移植U-Boot【U-Boot 的编译、链接过程】

推荐阅读最新更新时间:2024-11-16 22:21

Realme2 Pro支持解锁Bootloader
集微网消息,在去年晚些时候,Realme CEO Madhav Sheth发推特承诺,官方允许用户解锁Boot loader(简称BL),并将于2019年第一季度开放Realme1的内核源代码,Realme2 Pro的解锁BL工作也已经确认了。 那么具体是什么时候Realme 2 Pro才能支持解锁BL了?我们上Realme论坛发现自1月15日开始,手持Realme2 Pro的用户就能解锁BL了, 具体方法 如下: 注意事项: 1.加入测试计划后可能会对手机造成不可预估的影响; 2.三方固件有可能会使手机部分功能无法正常运行,例如相机拍照。并可能导致设备受损; 3.手机上个人安全私密有可能会造成泄漏
[手机便携]
Realme2 Pro支持解锁<font color='red'>Bootloader</font>
TQ2440--nandflash(K9F2G08U0A)驱动编写
一、数据手册相关内容 1.地址传输周期 2.命令表 3.在寄存器中,会涉及TACLS,TWRPH0,TWRPH1的设定 这里我们就去看nandflash的数据手册 在这里我们可以清楚的看到,TACLS=TCLS-TWP,TWRPH0=TWP,TWRPH1=TCLH,从下表可以查到时间,并根据主频转换成CPU周期数 二、寄存器 1.NFCONF 这个寄存器的0-3位是硬件控制的,TACLS,TWRPH0,TWRPH1的值也可以怎么设定上面有讲 2.NFCONT 这个寄存器我们先只关心这两位,一个是使能nandflash控制器,一个是使能chip 3.NFCMMD,NFADDR,NFDAT
[单片机]
TQ2440--nandflash(K9F2G08U0A)驱动编写
TMS320C6000系列二次Bootloader的设计与实现
引 言 随着DSP(数字信号处理器)系统的广泛应用,其程序规模也随之不断扩大,使用芯片本身自带的Boot-loader通过Flash存储器来引导DSP程序,往往受到程序大小和结构的制约,比如程序很大超过厂商固化boot的范围,再如中断向量表的不同位置对程序boot跳转的影响,等等,因此越来越需要更加灵活的引导方式。 系统上电后,由引导程序将DSP的应用程序从该存储器引导到DSP应用板上的高速存储器(如内部SRAM、SDRAM等)中。由于Flash存储器具有电信号删除功能,且删除速度快,集成度高,因此已成为此种存储器的首选。由于Flash存储器的存取速度较慢,写入Flash存储器的程序将在系统上电时被DSP装载到快速的存储器中运
[嵌入式]
大容量无线传输技术中高性能DSP启动方法
1 引言 在极低谱密度,高频谱利用率的大容量无线传输技术中,高速实时信号处理成为技术的 关键。目前市场上,能满足对高速实时信号处理的需要有具有良好的可编程性的器件主要有 DSP 和FPGA。 TMS320C6000 系列DSP 是TI 公司推出的一种高性能的数字信号处理器,包含定点和浮 点两个系列,其中定点系列包括TMS320C62xx 和TMS320C64xx,浮点系列包括TMS320C67xx。 C6000 系列DSP 有三种启动方式: (1) 主机启动 如果选择主机启动模式,在复位信号结束后,DSP 的CPU 被内部“阻塞”而其他部分都 被释放。在此期间,一个外部的主机在必要时可以通过主机接口初始化CPU
[嵌入式]
第六章、Tiny4412 U-BOOT移植六 Nand Flash源码分析
一、U-Boot参考源码 NandFlash的初始化代码我们放在board/samsung/tiny4412/lowlevel_init.S ,这一段代码是三星SMDK4212中没有提供的,所以我们需要自己写。我们在里面增加一个函数叫nand_asm_init。当然,由于 Nand Flash 的操作是有一定的规律的,所以,我们可以去别的地方找一段写好的NandFlash源码,然后根据自己的电路原理图进行移植即可。 二、代码分析 1、初始化Nand Flash 打开原理图,参看原理图配置各个功能引脚----状态引脚R/nB,读使能引用脚nRE,片选信号nCE,命令使能引脚CLE,地址使能引脚ALE,写使能引脚nWE。
[单片机]
第六章、Tiny4412 <font color='red'>U-BOOT</font><font color='red'>移植</font>六 Nand Flash源码分析
U-Boot在S3C2410上的移植
引言   U-Boot是用于初始化目标板硬件,为嵌入式操作系统提供目标板硬件配置信息,完成嵌入式操作系统装载、引导和运行的固件程序。它能够将系统的软硬件紧密衔接在一起。S3C2410是三星公司的一款基于ARM920T核的嵌入式通用处理器。本文将详细介绍U-Boot在S3C2410开发板上的移植与运行。 U-BOOT简介   U-Boot支持ARM、PowerPC等多种架构的处理器,也支持Linux、NetBSD和VxWorks等多种操作系统。它提供启动加载和下载两种工作模式。启动加载模式也称自主模式,一般是将存储在目标板Flash中的内核和文件系统的镜像装载到SDRAM中,整个过程无需用户的介入。在使用嵌入式产品时,一般工作
[应用]
ATMega48的Bootloader的软件实用方法
AVR是Atmel公司推出的第一款真正意义上的RISC结构8位单片机,具有先进的指令集及单时钟周期指令执行时间,数据吞吐率可高达1MIPS,其性能明显优于其他类型8位单片机。 作为AVR主流产品,Mega系列的很多产品(Mega8/Megal6/Mega32/Mega8535等)在硬件上都支持Boot-loader功能。这样MCU可灵活运行BOOT区程序,实现在应用编程(IAP)及一些高级应用,如系统智能升级,密码校验自保护,远程系统更新等。但有很高性价比的Mega48在硬件上却不支持Bootloader功能。因此,本文针对Mega48首次提出两种软件实现Bootloader的方法:跳转保存法和倒置法。 1 ATMega
[单片机]
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved