一 bootloader的概念
bootloader就是在操作系统内核或用户应用程序运行之前运行的一段小程序。通过这段小程序,我们可以初始化硬件设备,建立内存空间的映射图,从而将系统的软硬件环境带到一个合适的状态,以便为最终调用操作系统内核或用户应用程序准备好正确的环境。
二 bootloader的特征
1 初始化硬件,特别是内存控制器
2 提供linux内核的启动参数
3 启动linux内核
简化开发过程的一些特征:
1 读写存储器
2 通过串口/网口下载文件到RAM
3 从RAM复制文件到FLASH中
三 bootloader安装
系统加电或复位后,所有的CPU通常都从CPU制造商预先安排的地址上取指令。比如,S3C44B0在复位后都从地址0X00000000取它的第一条指令。而嵌入式系统通常都有某种类型的固态存储设备(比如:ROM,EEPROM或FLASH等)被安排在这个起始地址上,因此在系统加电后,CPU将首先执行bootloader程序。也就是说对于基于S3C44B0的这套系统,我们的bootloader是从0地址开始存放的,而这块起始地址需要采用可引导的固态存储设备如FLASH。
四 控制bootloader的设备或机制
串口通讯是最简单也是最廉价的一种双机通讯设备,所以往往在bootloader中主机和目标机之间都通过串口建立连接,bootloader程序在执行时通常会通过串口来进行I/O,比如:输出打印信息到串口,从串口读取用户控制字符等。当然如果认为出口通讯速度不够,也可以采用网络或USB通讯,那么相应的在bootloader中就需要编写各自的驱动。
五 bootloader的启动过程
多阶段的bootloader能提供更为复杂的功能,以及更好的可移植性。从固态存储设备上启动的bootloader大多都是2阶段的启动过程,也即启动过程可以分为stase1和stase2两部分。
六 bootloader的操作模式
1 启动加载模式:这种模式也称为“自主”模式,也即bootloader从目标机上的某个固态存储设备上将操作系统加载到RAM中运行,整个过程并没有用户的介入。这种模式是bootloader的正常工作模式。
2 下载模式:在这种模式下,目标机上的bootloader将通过串口连接或网络连接等通信手段从主机下载文件,比如:下载应用程序,数据文件,内核映像等,从主机下载的文件通常首先被bootloader保存到目标机的RAM中然后再被bootloader写到目标机上的固态存储设备中。bootloader的这种模式通常在系统更新时使用。
七 bootloader的重要功能
1 烧写falsh
2 烧写内核
3 烧写文件系统
4 使用jtag口或其他
八 u-boot启动过程
1 stage1:
a 基本的硬件初始化
b 为加载stage2准备RAM空间
c 拷贝stage2到RAM中
d 设置堆栈指针sp
e 跳到stage2的入口点
2 stage2:
a 初始化本阶段要使用到的硬件设备
b 检测系统的内存映射
c 加载内核映像和文件系统映像
d 设置内核的启动参数
e 调用内核
九 移植u-boot的步骤
1 下载源代码
2 阅读readme文件
3 了解u-boot结构
4 添加修改
5 编译
6 调试
7 发布
关键字:bootloader S3C44B0 复位
引用地址:
bootloader 简介
推荐阅读最新更新时间:2024-11-18 10:57
基于STM32从零写操作系统系列---bootloader
本章主要使用汇编语言编写STM32F103(以下称为“该芯片”)的启动代码。具体结构如图: 启动模式 该芯片可以通过设置BOOT0和BOOT1两个引脚,选择不同的启动方式,正常情况下BOOT0=0,BOOT1=0(0为低电平)。即,芯片将从Flash中加载代码启动。 当芯片上电/复位后,芯片首先从地址0x0000_0000处获取栈地址,然后将地址0x0000_0004处的值赋值给PC寄存器。按照PC寄存器的值,取第一条指令,执行......具体如图: 地址0x0800_0205处的具体代码如图: 简单来说,地址0x0000_0004处存放的是复位处理函数的地址。当上电/复位时,芯片硬件会自动将地址0x0000
[单片机]
AVR128的程序——EEPROM记录复位次数
#include iom128v.h #include macros.h #define uchar unsigned char #define uint unsigned int void EEPROM_write(uint EEPROM_ADDR, uchar EEPROM_DAT); void Delayms(uint MS); void display(uchar FirstBit,uchar Num); void Mcu_IO_Init(void); uchar EEPROM_read(uint EEPROM_ADDR); uchar TempData ; uchar WeiMa = {
[单片机]
一则STM32f103莫名反复复位的经验记录
最近在调试STM32F103RBT6时,发现只要一打开AD就会反复复位,将断点设置到启动代码处,发现复位是非常有规律的,总是执行过断点后就又回到断点了。 找原理,查硬件,一切均没有问题。 最后怀疑到代码上来,因为AD采样是另外一个产品中正常使用移植过来的,分为三大部分:对AD涉及到的外设和存储等的初始化,对AD的采集与存储(主要是中断),对AD的数据进行计算分析。 将三大模块全部注释后再逐一开放,发现是对AD的初始化会导致复位。 对AD的初始化代码再全部注释后逐一开放,发现是启动定时器TIM4的代码会导致复位。 后来将与定时器有关的代码全部审查了一遍,也没有发现问题,同样的相似代码在TIM1上工作的很好。
[单片机]
Linear推出降压型稳压器集成上电复位和看门狗
加利福尼亚州米尔皮塔斯 (MILPITAS, CA) – 2011 年 8 月 17 日 – 凌力尔特公司 (Linear Technology Corporation) 推出双通道、电流模式降压型开关稳压器 LT3641,该稳压器具有上电复位和看门狗定时器。其 4V 至 42V 输入电压范围以及可承受 55V 瞬态的能力使该器件非常适用于汽车应用中常见的负载突降和冷车发动情况,这类情况甚至在输入瞬态高达 55V 时也要求恒定输出调节。LT3641 运用了一种独特的双通道设计,一个高输入电压 (4VIN 至 42VIN,55VIN 瞬态能力) 非同步通道提供 1.3A 输出电流;而另一个较低输入电压 (2.5VIN 至 5.5VI
[电源管理]
STM32 USB复位机制、挂起机制及其唤醒机制详解
1 STM32 USB复位机制 主机可以对USB设备进行复位,主要是主机在和设备通讯之前会发送Reset信号把设备设置到默认的未配置状态,即主机拉低两根信号线(SE0状态)并保持10ms。当STM32 USB设备检测到主机的复位信号之后,如果复位中断使能,则会进入复位中断处理函数。 STM32 USB设备也可以对自身进行复位,置位控制寄存器的FRES对USB模块强制复位,此时USB模块将一直保持在复位状态下直到软件清除此位。如果USB复位中断被使能,将产生一个复位中断。USB设备在上电后首先会强制对自己进行复位,让自己处于未配置状态。 2 STM32 USB挂起机制 USB主机以3毫秒内不发送任何信号标志进入挂起状态(3m
[单片机]
基于Cortex-M4的STM32F4的复位序列
初次接触到 STM32 F7,可能会有个疑惑,为什么0地址变成了ITCM RAM 的起始地址。系统复位还是从地址0处开始执行吗?如果是,那这似乎看起来是冲突的。实际上,STM32F7是基于Cortex-M7内核,而Cortex-M7和Cortex-M3/M4的复位序列有些不一样。本文中,将针对这个问题做详细讲解。 STM32F4的复位序列 STM32F4基于Cortex-M4。对于基于Cortex-M3/M4的 芯片 ,复位后总是从0x00000000地址处,取主堆栈指针(MSP)的值,从0x00000004处,取出PC的初始值(这个值是复位向量),然后从这个值对应的地址处取指。 这两个值,就是中断向量表里的第一个和第二个
[单片机]
80C51的复位技术大盘点
标准80C51片内现有的复位逻辑比较简单,只有通过一条复位引脚RST进行外部扩展。技术手册中给出了上电复位(POR,power on reset)和人工复位(MRST,manual reset)电路的接线方法;借助于一只专用外围芯片,如MAX813L或DS1323等,来扩充欠压复位(LVR,low voltage reset)和看门狗复位(WDR,watch dog timer reset)也有文章介绍。 本文将介绍三种非常规扩展复位方式:软件复位(SWR,software reset)、软硬件复位(SHR,software and hardware reset)和非法地址复位(IAR,illegal address
[单片机]
MC9S12XS128MAL Bootloader(1)
首先BootLoader和用户程序是两个工程,两个工程代码通过修改PRM文件存储在不同的flash中,在通过PC指针的跳转实现两个工程的切换; BootLoader程序 关中断 初始化时钟; 初始化CAN 初始化flash读写; 开中断,开CAN中断; 计时判断CAN是否收到bootloader开始报文; 时间到后没收到跳转到原用户程序启动向量; 收到后,开始读写flash,读写完后,PC指针跳转到用户程序地址(EEFE); 其中flash程序在读写flash时,要把代码copy到RAM中,因读写时不能再读flash中的代码 extern char __SEG_START_RAM_CODE ; extern c
[单片机]