Bootloader.ppt
第三节 Bootloader
第三节BootLoaderUn Re gi st er ed本节目标•深入理解BootLoader 启动过程•掌握uBoot 的定制•了解uBoot 的代码树构成•uBoot 的下载烧写Un Re gi st er edBootloader 定义•Bootloader 是硬件启动的引导程序,是启动操作系统的根本;•是在操作系统内核或用户应用程序运行之前运行的一段小程序。
通过这段小程序,可以初始化硬件设备、建立内存空间的映射图,从而将系统的软硬件环境带到一个合适的状态,以便为最终调用准备好环境;•在一般典型的系统中,整个系统的加载启动任务就完全由Bootloader 来完成。
Un Re gi st er edBootloader 特点•Bootloader 不属于操作系统内核,采用汇编语言编写,因此针对不同的CPU 体系结构,这一部分代码不具有可移植性;•在移植操作系统时,这部分代码必须加以改写。
•Bootloader 不但依赖于CPU 的体系结构,而且依赖于嵌入式系统板级设备的配置。
Un Re gi st er edBootloader 启动模式•启动加载模式:在这种模式下,Bootloader 从目标机上的某个固态存储设备上将操作系统加载到RAM 中运行,整个过程并没有用户的介入。
•下载模式:在这种模式下,目标机上的Bootloader 将通过串口或网络等通信手段从开发主机(Host )上下载内核映像和根文件系统映像等到RAM 中。
然后可以再被Bootloader 写到目标机上的固态存储媒质中,或者直接进行系统的引导。
Un Re gi st er edBootloader 基本功能•初始化硬件•将操作系统内核从Flash 拷贝到SDRAM 中,如果是压缩格式的内核,还要解压缩•改写系统的内存映射,原先Flash 起始地址映射为0地址,这时需要将RAM 的起始地址映射为0•提供Linux 内核的启动参数•启动Linux 内核•设置堆栈指针并将bss 段清零将来执行C 语言程序和调用子函数时要用到•改变pc 值,使得CPU 开始执行真正的操作系统内核。
UBOOT基础知识 PPT课件
Cpu 与特定CPU架构相关的代码,每一款Uboot下支持的CPU 在该目录下对应一个子目录,比如有子目录arm920t等。
目录结构(展示)
Disk 对磁盘的支持。
Doc 文档目录。Uboot有非常完善的文档,推荐大家参考阅 读。
Drivers Uboot支持的设备驱动程序都放在该目录,比如各种网 卡、支持CFI的Flash、串口和USB等。
下载
从下面地址可以下载到uboot的源代码:
/projects/uboo t
目录树
进入到UBOOT目录,可以得到如下的目录结构:
| board | common | cpu | disk | doc | drivers | dtt | examples | fs | include
回忆PC
PC机中的引导加载程序由BIOS (其本质是一段固件程序)和位 于硬盘MBR中的引导程序 (GRUB或LILO)一起组成。BIOS 在完成硬件检测和资源分配后, 将硬盘中的引导程序读到系统内 存中然后将控制权交给引导程序。 引导程序的主要任务是将内核从 硬盘上读到内存中,然后跳转到内 核的入口点去运行,即启动操作 系统。
定义
在嵌入式系统中,通常没有像BIOS那样的固 件程序,因此整个系统的加载启动任务就完 全由BootLoader来完成。比如在一个基 于 ARM7TDMI core的嵌入式系统中,系统 在上电或复位时都从地址 0x00000000开始 执行。而在这个地址处安排的通常就是系统 的BootLoader程序。
目录树
| lib_arm | lib_generic | lib_i386 | lib_m68k | lib_microblaze | lib_mips | lib_nios | lib_nios2 | lib_ppc | net | post | rtc ` tools
《BootLoader实验》PPT课件
a
11
bootloader的命令結構介紹
struct {
void (*fun)(void);
char *tip;
}CmdTip[] = {
{tftp_down,
"tftp download"},
download file"},
{NandWrite, "Write Nand flash with
1 : Write Nand flash with download file
2 : Updata Bootloader with download file
3 : boot uClinux
說明
功能1:利用TFTP網路傳輸程式,包括Linux內核和隻檔案系統 功能2:將下載的程式燒寫到NAND FLASH相應的分區中 功能3:bootloader的自我更新,bootloader主要保存在Nor Flash
void tftp_down(void)
{
printf("Now download file from net to 0x%x...\n", DOWNLOAD_ADDR);
eth_init();
//乙太網路硬體初始化
arp_init();
download_len=-1;
download_addr=DOWNLOAD_ADDR;
ldr
r0,=WTCON ;watch dog disable
ldr
r1,=0x0
str
r1,[r0]
ldr ldr str
r0,=INTMSK r1,=0xffffffff ;all interrupt disable r1,[r0]
《BootLoader实验》课件
BootLoader在计算机启动过程中的位置和作用
了解BootLoader在启动过程中的定位和功能
实验原理
1
BootLoader的结构
深入了解BootLoader的内部结构
2
BootLoader的工作原理
揭秘BootLoader的工作机制
3
BootLoader的实现方式
提供与BootLoader相关的参考资料和文献
实验过程中用到的工具和软件
介绍在实验过程中使用的工具和软件
1 BootLoader实验的意义和作用
总结BootLoader实验的重要性和作用
3 实验心得和体会
表达对BootLoader实验的体验和感受
2 实验中遇到的问题和解决方法
分享实验过程中遇到的问题及其解决方法
4 接下来的学习和探索方向
提出继续学习和探索BootLoader的方向
பைடு நூலகம்考资料
BootLoader相关资料和文献
探索BootLoader的不同实现方式
实验步骤
1. 环境准备 2. BootLoader的编写和汇编 3. 引导扇区的制作和写入 4. 实验现场演示
实验效果
BootLoader的启动过程
了解BootLoader在实际运行中的启动过程
实验效果观测和分析
观察和分析BootLoader实验的结果
实验总结
《BootLoader实验》PPT 课件
欢迎来到《BootLoader实验》PPT课件!在本课件中,我们将探索BootLoader 的作用、实现原理、实验步骤以及实验效果。让我们一起来了解BootLoader实 验的奥秘吧!
简介
什么是bootloader-PPT课件
Boot Loader 的 stage1 通常包括以下步骤(以执行的 先后顺序): • 硬件设备初始化; • 为加载 Boot Loader 的 stage2 准备 RAM 空间; • 拷贝 Boot Loader 的 stage2 到 RAM 空间中; • 设置好堆栈; • 跳转到 stage2 的 C 入口点。
下图1就是一个同时装有 Boot Loader、内核的启动 参数、内核映像和根文件系统映像的固态存储设备 的典型空间分配结构图。
图1 固态存储设备的典型空间分配结构
3. 用来控制 Boot Loader 的设备或机制 主机和目标机之间一般通过串口建立连 接,Boot Loader 软件在执行时通常会通过串 口来进行 I/O,比如:输出打印信息到串口, 从串口读取用户控制字符等。
Boot Loader 的 stage2 通常包括以下步骤(以 执行的先后顺序): • 初始化本阶段要使用到的硬件设备; • 检测系统内存映射(memory map); • 将 kernel 映像和根文件系统映像从 flash 上读到 RAM 空间中; • 为内核设置启动参数; • 调用内核。
3.1 Boot Loader 的 stage1
启动加载(Boot loading)模式:这种模式 也称为"自主"(Autonomous)模式。也即 Boot Loader 从目标机上的某个固态存储设备 上将操作系统加载到 RAM 中运行,整个过程 并没有用户的介入。这种模式是 Boot Loader 的正常工作模式,因此在嵌入式产品发布的 时侯,Boot Loader 显然必须工作在这种模式 下。
通常,Boot Loader 是严重地依赖于 硬件而实现的,特别是在嵌入式世 界。因此,在嵌入式世界里建立一 个通用的 Boot Loader 几乎是不可 能的。尽管如此,我们仍然可以对 Boot Loader 归纳出一些通用的概念 来,以指导用户特定的 Boot Loader 设计与实现。
UBOOT基础知识 ppt课件
ppt课件
14
流程
BootLoader 的 stage1 通常包括以下步骤:
·硬件设备初始化 ·为加载 BootLoader 的 stage2 准备 RAM 空 间 ·拷贝 BootLoader 的 stage2 到 RAM 空间中 ·设置好堆栈(why??) ·跳转到 stage2 的 C 入口点
UBOOT
中嵌
Teacher Xie
ppt课件
1
提纲
理论: BootLoader介绍 Uboot介绍 Uboot命令 Uboot工作流程 Uboot移植 Uboot烧写
实验: 移植Uboot Uboot使用
ppt课件
2
第一节 BootLoader介绍
ppt课件
3
概念
ppt课件
8
定义
简单地说,BootLoader就是在操作系统 运行之前运行的一段小程序。通过这段 小程序,可以初始化硬件设备,从而将 系统的软硬件环境带到一个合适的状态, 以便为最终调用操作系统做好准备。
ppt课件
9
功能
BootLoader 的主要任务是初始化硬件 (如:串口,内存),然后将内核映 象从 Flash 中读到 RAM 中,然后跳 转到内核的入口点去运行,也就是启 动操作系统。
ppt课件
11
移植
Q:什么叫bootloader移植? Q:为什么需要移植?
ppt课件
12
移植
每种不同的CPU体系结构都有不同的BootLoader。 除了依赖于CPU的体系结构外,BootLoader 还依 赖于具体的嵌入式板级设备的配置,比如板卡的 硬件地址分配,外设芯片的类型等。这也就是说, 对于两块不同的开发板而言,即使它们是基于同 一种CPU而构建的,但如果他们的硬件资源或配置 不一致的话,要想在一块开发板上运行的 BootLoader程序也能在另一块板子上运行,还是 需要作修改。
bootloader
ldr pc,=HandlerTICK ;mGA
b .
b .
ldr pc,=HandlerZDMA0 ;mGB
ldr pc,=HandlerZDMA1 ;
ldr pc,=HandlerBDMA0 ;
str r0,[sp,#4] ;store the contents(ISR) of HandleXXX to stack
ldmfd sp!,{r0,pc} ;POP the work register and pc(jump to ISR)
MEND
HandlerEINT1 HANDLER HandleEINT1
HandlerEINT0 HANDLER HandleEINT0
;One of the following two routines can be used for non-vectored interrupt.
IsrIRQ ;using I_ISPR register.
HandlerUERR01 HANDLER HandleUERR01
HandlerWDT HANDLER HandleWDT
HandlerBDMA1 HANDLER HandleBDMA1
HandlerBDMA0 HANDLER HandleBDMA0
HandlerZDMA1 HANDLER HandleZDMA1
VECTOR_BRANCH
ldr pc,=HandlerEINT0 ;mGA H/W interrupt vector table
ldr pc,=HandlerEINT1 ;
ldr pc,=HandlerEINT2 ;
7第五章 bootloader
中国传媒大学 信息工程学院 2010学年秋季 苗方
Bootloader
Bootloader的概念
BootLoader就是在操作系统内核或用户应用程序运行 就是在操作系统内核或用户应用程序运行 之前运行的一段小程序。通过这段小程序, 之前运行的一段小程序。通过这段小程序,我们可以初 始化硬件设备、建立内存空间的映射图, 始化硬件设备、建立内存空间的映射图,从而将系统的 软硬件环境带到一个合适的状态, 软硬件环境带到一个合适的状态,以便为最终调用操作 系统内核或用户应用程序准备好正确的环境。 系统内核或用户应用程序准备好正确的环境。
Bootloader
Bootloader的任务(1)
初始化处理器以及外设的硬件资源配置, 初始化处理器以及外设的硬件资源配置,CPU片内和片 片内和片 外设备,例如正确配置SDRAM控制器 外设备,例如正确配置 控制器 芯片,可能有的设备: 初始化 I/O 芯片,可能有的设备: 串口,报告Bootloader成功 失败 成功/失败 串口,报告 成功 网络或其他接口, 网络或其他接口,准备引导操作系统 执行系统自检, 执行系统自检,报告检测结果 通过用户命令行提供特定应用程序
Bootloader
Bootloader的任务(2)
使用TFTP协议从网口接收 或者 协议从网口接收(或者 使用 协议从网口接收 或者xmodem协议从串口接 协议从串口接 操作系统镜像文件到RAM 收)操作系统镜像文件到 操作系统镜像文件到 将镜像烧写到flash中,重启后负责找到该镜像、解 将镜像烧写到 中 重启后负责找到该镜像、 压到RAM中,并跳转到解压位置处执行 压到 中 直接跳转到RAM处执行该镜像 直接跳转到 处执行该镜像
[信息与通信]BootLoader与设备驱动.ppt
TCP/IP 网络系统
文件 系统
内核
电源 管理
嵌入式 GUI
板级 驱动层 初始化
Flash 驱动
RTC/定时 器驱动
串口 驱动
以太网 驱动
LCD 驱动
键盘 驱动
其它 驱动
嵌入式软件体系结构
2
驱动层软件分为三种类型: 板级初始化程序:在系统上电后,初始化系 统的硬件环境。 与系统软件相关的驱动程序:用于支持操作 系统和中间件等系统软件所需的驱动程序。 与应用软件相关的驱动程序:这类驱动不一 定需要与操作系统连接。
嵌入式系统原理与应用
第四章 BootLoader与设备驱动
1
4.1 嵌入式系统的产生和发展
嵌入式软件的体系结构包括驱动层、操作系统 层、中间件层和应用层,如下图所示 。
应用层
应用 任务1
应用 任务2
应用
...
任务n
中间件层
嵌入式 CORBA
嵌入式 JAVA
嵌入式 DCOM
面向应用领域 的中间件
操作 系统层
启动参数
Boot Load
内核
根文件系统
固态存储设备的典型空间分配结构 7
4.2.1 BootLoader概述
2 BootLoader的操作模式
大多数BootLoader都包含两种操作模 式:启动加载模式和下载模式。
启动加载模式:也称为自主(Autonomous)模式。 在这种模式下,BootLoader从目标机的某个固态存 储设备上将操作系统加载到RAM中运行,整个过程 中没有用户的介入。
13
4.2.2 BootLoader的典型结构
BootLoader的启动过程 (2)
开始
第六讲--Bootloader
嵌入式软件系统
1. 2. 3.
4.
嵌入式操作系统已经得到广泛应用 带操作系统的嵌入式软件体系一般分为: 引导加载程序 操作系统内核 文件系统(可选) 用户应用程序
PC 机的引导加载程序
1. 2.
BIOS+MBR BIOS的本质是一段固件程序(Firmware) MBR是磁盘上的一段分区,位于磁盘的第 一个扇区,大小为512B,包含了磁盘的分 区信息以及系统引导代码,比如Lilo、 Grub
Vivi代码结构
Arch:包含vivi支持的处 理器 Drivers:包含了MTD和串 口驱动程序 Init:包含main程序, stage2的入口点 Lib:与平台无关的公共 的代码,比如memory操 作、命令操作等 Include:所有头文件
目标板配置
处理器:samsung S3C2410X (ARM920T) 32M NandFlash, 用作Boot 64M SDRAM,地址 范围0x30000000— 0x33ffffff
U-boot简介
起源于PPC-BOOT 是一种通用的Bootloader 开源,高度模块化 驱动程序丰富、命令操作灵活
U-BOOT代码结构
Board:与目标板相关代码 Common:命令的实现代码 Cpu:与目标处理器相关代 码 Drivers:各种驱动程序 Fs:支持的文件系统 Lib_arm:ARM平台的公共 接口代码
4. 5.
一般的Bootloader的结构分成: 目标处理器相关代码,一般stage1的入口 代码在此目录中 目标板相关代码,一般stage2的入口代码 在此目录中 驱动代码,包括串口、网络、USB、以及 ROM操作驱动 命令处理代码 其他代码
第7章-Bootloader
7.3 Bootloader启动流程
– 调用内核。
• Bootloader调用Linux kernel的方法是直接跳 转到内核的第一条指令处。在跳转时必须满足下列 条件。
– CPU寄存器的设置:R0为0;R1为机器类型ID(机器类 型参见 linux/arch/arm/tools/mach-types目录); R2为启动参数,标记列表在RAM中的起始基地址。 – CPU模式:必须禁止中断(IRQs和FIQs);CPU必须设 置为SVC模式。 – Cache和MMU的设置:MMU必须关闭;指令 ICache 可以打开也可以关闭;数据 DCache 必须关闭。
第七章 Bootloader
本章内容
• Bootloader的概念和类型 • 重点:U-Boot的开发调试和使用。 • 理解Bootloader的工作原理和代码实现。
嵌入式开发流程
建立交叉编译环境
启动代码Bootloader的实现/移植 kernel的配置/移植/编译
根文件系统(Cramfs)的实现
7.3 Bootloader启动流程
– 将kernel和根文件系统映像从flash上读到 RAM空间中。 • 由于像 ARM 这样的嵌入式 CPU 通常都是在统一 的内存地址空间中寻址 Flash 等固态存储设备的, 因此从 Flash 上读取数据与从 RAM 单元中读取 数据并没有什么不同。这一步骤包括两部分内容: 规划kernel和根文件系统所占用的内存范围和将它 们从flash上进行拷贝。
• 比如,RedBoot在启动时处于正常的启动加载模式, 但是它会延时3秒等待终端用户按下任意键而将 RedBoot切换到下载模式。如在等待时间内没有接 收到用户按键,则继续启动 Linux 内核。
嵌入式系统BootLoader的设131页PPT
① 设置中断向量表
1
设置
中断向量表
2
最小硬件 初始化
RTOS运行环境
3
初始化
最 小 启从 0x00000000开始的8*4个字节的连续存储 空间中,其作用是指定了各种异常中断 处理程序的入口地址。
22
嵌入式系统的初始化流程(2)
硬件初始化阶段
② 最小硬件初始化
BootLoader是系统加电(或复位)后运行的第一段软件 代码。通过这段代码,我们可以初始化系统硬件设备、建 立内存空间的映射图,从而将系统的软硬件环境带到一个 合适的状态,以便最终调用操作系统内核。
简单地说,BootLoader就是在操作系统内核运行之前运 行的一段初始化程序。
15
BootLoader的特点
6 启动RTOS
phase2
运行优先级最高的就绪任务; 启动RTOS时钟中断。
27
嵌入式系统的初始化流程(7)
用户程序初始化阶段
⑦ 用户程序初始化
用户程序
7
初始化
用户程序
用户程序正常运行所进行的初始化。
28
Phase 2 操作系统移植
1 BootLoader 2 系统初始化流程 3 最小启动代码编写 4 µC/OS-II相关文件修改
20
嵌入式系统的初始化流程
硬件 初始化
1
设置 中断向量表
2
最小硬件 初始化
3
RTOS运行环境 初始化
最 小 启 动 phase1 代 码
4 硬件抽象层 初始化
RTOS 初始化
5
RTOS 初始化
phase2
6 启动RTOS
软件 初始化
7
用户程序 初始化
《BootLoader实验》课件
03
Bootloader实验步骤
编写引导程序
总词
编写引导程序是实验的第一步,需要使用汇 编语言或C语言编写引导程序代码。
详细描述
引导程序是用于加载操作系统的程序,需要 在计算机启动时运行。在实验中,学生需要 编写一个简单的引导程序,该程序可以在屏 幕上输出一些文本信息,并加载操作系统。
编译引导程序
安装ISO文件启动制作工具( 如Etcher或 Win32DiskImager)
实验环境配置
01 配置虚拟机软件,设置正确的启动顺序和 启动方式
02 将U盘插入PC机,并设置正确的启动顺序 和启动方式
03
将ISO文件插入PC机,并设置正确的启动 顺序和启动方式
04
将硬盘映像写入硬盘,并设置正确的启动 顺序和启动方式
详细描述
Bootloader是在操作系统运行之前,由硬件或软件系统自动加载到主存储器中的一段小程序。它的主 要任务是初始化硬件设备、建立内存空间映射图,从而为操作系统的内核准备好正确的环境。
Bootloader的作用
总结词
系统启动的关键环节
详细描述
Bootloader是操作系统启动的关键环节,它负责在系统启动时加载并启动内核,同时为内核提供必要的运行环境 。此外,Bootloader还可以提供系统维护和修复等功能。
05
Bootloader实验问题与解决方案
常见问题汇总
启动引导问题
无法正常引导操作系统。
硬件接口问题
与硬件设备的通信异常。
内存访问问题
无法正确访问内存空间。
配置文件问题
配置文件丢失或配置错误。
问题解决方案
重新检查启动引导代码 :确保引导程序正确加 载。
嵌入式系统的BootLoader技术
PPT文档演模板
嵌入式系统的BootLoader技术
• 2)为加载阶段2准备RAM空间
– 必须确保所安排的地址范围的的确确是可读写的RAM 空间
1. 先保存memory page一开始两个字的内容 2. 向这两个字中写入任意的数字 3. 立即将这两个字读回,若不是,则说明不是一段有效
的RAM空间 4. 再向这两个字写入任意数字 5. 立即将这两个字读回。若不是,则说明不是有效的
.text .globl _trampoline _trampoline:
bl main /* if main ever returns we just call it again */ b _trampoline
PPT文档演模板
嵌入式系统的BootLoader技术
2.2 Boot Loader阶段2介绍
– 设置堆栈指针是为了执行C语言代码做好准备
– 通常可以设置为sp = stage2_end – 4
– 此时, Boot Loader 的 阶段2 可执行映象刚 被拷贝到 RAM 空间时的系统内存布局,如下 图:
• 5)跳转到阶段2的C入口点
– 修改PC寄存器为合适地址来实现
PPT文档演模板
嵌入式系统的BootLoader技术
PPT文档演模板
嵌入式系统的BootLoader技术
1. Boot Loader程序的基本概念
• 一个嵌入式 Linux 系统从软件的角度看通常可以 分为四个层次:
– 1. 引导加载程序。
• 包括固化在固件(firmware)中的 boot代码(可选),和 Boot Loader 两大部分。
– 2. Linux 内核。
• 在 linux内核启动前, boot loader 会将存储介 质中的 initrd 文件加载到内存,内核启动时会在 访问真正的根文件系统前先访问该内存中的 initrd 文件系统。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
2.3.3 用来控制Bootloader的设备或机制
在Bootloader阶段,嵌入式系统本身的显示设备尚不可用 字符方式与用户进行交互 通常需要与Host主机相连,Host作为TTY终端 输出打印信息到串口,从串口读取用户控制命令
(三) ARM 指令(续):
TEQ R1, #10 ;如果R1=10则将CPSR寄存器的Z标志位置为1
TEQ R1,R2 ;如果R1=R2则将CPSR寄存器的Z标志位置为1
BEQ label ;条件跳转 ;如果CPSR寄存器中的Z标致为置位,则跳转到label
B label ;无条件跳转至label处
二 Bootloader 的概念
普通PC上的引导过程 Bootloader 的概念 Bootloader 的特性
2.1普通PC上的引导过程:
BIOS(Basic Input/Output System)的任务:
(一) 上电自检: 主板发RESET信号,等待POWER GOOD 信号
开机时,由于此时电压还不稳定,主板控制芯片组会向CPU发出并保持 一个RESET(重置)信号,让CPU初始化,同时等待电源发出的POWER GOOD信号(电源准备好信号)。 撤去RESET信号从一个固定的地址FFFF0H开始执行指令, 无论是Award BIOS还是AMI BIOS,放在这里的只是一条跳转指令,跳 到系统BIOS中真正的启动代码处。
效 6. 交换上述两个字,并再次写入上述空间,即0xCC,0x66 7. 立即将这两个字的内容读回,如果不是0xCC,0x66则说明这个memory
page所占据的地址范围不是一段有效的RAM空间 8. 恢复上述两个字的原始内容,测试完毕。 9. 为了得到一段干净的RAM空间范围,可以将所安排的RAM空间范围进行
清零操作。
3.4 其他步骤
拷贝Stage 2的内容到RAM中 设置堆栈指针sp,通常指向分配给Bootloader的地址空间的最顶端,
向下生长 跳转到Stage2 的C 入口点
3.5 示例代码分析
语法知识 部分代码分析
3.5.1 语法知识
GNU Assembler —— as
(一)伪指令(Directive): .equ 等效于 = .global 使一个符号成为全局可见,否则多个文件中相同的符号名发生冲
STR Rs, [Rn, +/- Rm] 将内存Rs中的内容读取到Rn +/- Rm中
(三) ARM 指令(续):
ADD Rd, Rx, #1 ADD Rd, Rx, Ry SUB Rd, Rx, #1 SUB Rd, Rx, Ry
;Rd=Rx+1 ;Rd=Rx+Ry ;Rd=Rx-1 ;Rd=Rx-Ry
3.1基本硬件的初始化
为Stage2及Kernel的执行准备好硬件环境:
屏蔽所有中断 在BootLoader阶段通常不必响应任何中断;写CPSR(当前程序状态寄 存器)寄存器禁止中断
设置CPU的速度和时钟频率 RAM 初始化:正确设置内存控制器 在Console 终端打印信息:
表明系统状态是否OK, 通常还会点亮一个板子上的LED表明系统初始 化正常 关闭CPU内部指令/数据 Cache
(三) ARM 指令:
LDR Rd, [Rn, # +/- Offset] 将内存Rn +/- Offset中的内容读取到Rd寄存器
LDR Rd, [Rn, +/- Rm] 将内存Rn +/- Rm中的内容读取到Rd寄存器
STR Rs, [Rn, #+/- Offset] 将内存Rs中的内容读取到Rn +/- Offset中
2.3.4 BootLoader 启动的阶段和模式
启动分为两阶段:Stage1、Stage2, Stage1简单、更加依赖于硬件、汇编实现 Stage2 复杂、硬件依赖性稍弱、C语言实现 便于移植、能完成较为复杂的功能
2.3.5 Bootloader的操作模式
(一)启动模式(Boot Loading):也称Autonomous模式 系统上电,CPU从Bootloader所在地址处开始执行,在固态存储器上 Bootloader 自行运行,将代码复制到RAM中,并转而到RAM上运行 Bootloader 准备好内核运行所需的环境和参数,复制内核到RAM并运行
2.2 BootLoader 的概念
操作系统内核运行之前运行的一段小程序, 初始化硬件设备、建立内存空间映射图 将系统的软硬件环境带到一个合适的状态,准备调用系统
内核的正确环境 依赖硬件系统而实现,很难建立通用的BootLoader
2.3 BootLoader 的特性
Bootloader的硬件依赖性 Bootloader 的存贮方式 用来控制Bootloader的设备或机制 BootLoader 启动的阶段和模式 Bootloader的操作模式 Bootloader 的文件传输设备及协议
3.2 为加载stage2 准备空间
将Bootlader Stage 2 搬移到RAM中,提高执行速度 Stage 2是C语言代码,需要考虑堆栈空间, 通常准备的空间是memory page的倍数 通常1M 的空间
3.3 测试地址范围内RAM的有效性
1.不必测试所有的内存单元 2. 仅测试空间内每个内存页中的任意两个字的有效性,通常取头两个字 3. 保存memory page 起始处两个字的内容 4. 向此两个字中写入任意两个不同的数字,如0x66,0xCC 5. 立即读回上述两个字的内容,如果读取的不是0x66,0xCC则该页空间无
LDR r3,=0xB2120200
STRr3,[r1] ;向SDRAM 控制寄存器写入模式寄存器命令 ;进入模式寄存器命令模式
LDR r3,=0x08111800
LDR r2,[r3] ;通过读取特定地址,实现对SDRAM模式的设定 ;0x08111800是经过计算得到的地址 ;它表示burst 类型是sequential、burst 长度为8 ;CAS Latency 为2个时钟
四 Bootloader Stage2
初始化Stage2阶段要使用到的设备 检测系统内存映射(Memory Map) 将Kernel映像和根文件系统映像从Flash上读到取至RAM
空间中 为内核设置启动参数 调用内核
4.1初始化Stage2阶段要使用到的设备
(一) 初始化阶段的主要函数
操作系统内核
(二)下载模式(Downloading): 系统上电,CPU从Bootloader所在地址处开始执行,在固态存储器上 用户干预,进入下载模式,在控制台打印提示信息,并等待用户输入 根据用户输入选择烧写内核或文件系统,也可能烧写Bootloader自身, 如果用户不干预,则进入正常启动模式,即调用操作系统内核
பைடு நூலகம்
2.3.1 Bootloader的硬件依赖性
CPU体系结构:ARM、MIPS、DSP、x86 etc 板级设备的配置:不同厂家的芯片、不同的内存空间,etc
2.3.2 Bootloader 的存贮方式
嵌入式系统没有BIOS,系统上电或复位后从某个固定的地址处开 始执行,0x00000000
#define CCM_BASE
0x0021B000
#define _reg_CCM_CSCR (*((volatile U32 *)(CCM_BASE+0x00)))
(三) 关键字Volatile 的含义:
避免编译器优化
编译器为了提高程序运行速度,可能对变量进行优化,会将其放在缓 存中
缺陷是变量的内容可能被误改,从而与内存中实际值不一致 采用volatile 关键字可以避免上述问题
2.3.6 Bootloader 的文件传输设备及协议
串口,xmodem/ymodem/zmodem:简单、通用,易于设置;速 度慢
以太网,TFTP协议:通用,易用,速度快;编程略复杂 USB:简单、易用、速度快、适于下载内核时采用
三、Bootloader Stage1
Stage1的主要工作: 硬件设备初始化 为加载Boot Loader 的Stage2 准备RAM 空间 拷贝Boot Loader 的Stage 2 到RAM 空间中 设置好堆栈 跳转到Stage 2 的C程序入口点
Bootloader 简介
一 嵌入式Linux的层次结构
引导加载程序
Boot代码、Bootloader等
Linux 内核
根据特定的目标嵌入式硬件系统,定制的内核及启动参数
文件系统
包括根文件系统以及建立于Flash内存设备上的文件系统
用户程序
用户编写的完成特定功能的程序,大量用户程序运行在一个嵌入式 图形用户界面(GUI)上,常用的嵌入式GUI包括:MicroWindows 和 MiniGuI等
突
LDR r1, =SDCTL0 被编译成 ldr r1, 0x0c7001b4
;SCCTL0=0x221000 ;=SDCTL0
ldr r0,=0xff 被编译成 mov r0,# 0xff
(二)符号(Symbol): 以字母开头或以`._'中的一个开头 大小写敏感,foo与FOO是不同的符号
Init () 初始化CPU的工作频率、中断状态等 cs8900MX1Init() 初始化网络设备 EUARTinit() 初始化串口设备
(二) 初始化阶段常用语法:
_reg_CCM_CSCR = 0x000003AB ;设置Clock Source Control Register
_reg_CCM_CSCR 的定义
(四)自动刷新
LDR r3,=0xA2120200
STRr3,[r1]