220 likes | 551 Views
BootLoader 开发介绍. 主要 内容. BootLoader 简介 Bootloader 流程 Bootloader 功能简介. 实验目的. 1 .了解 Bootloader 的基本概念及构成 ; 2 .学习内核移植的方法 ; 3 .学习应用程序下载的方法。. 2. 实验内容. BootLoader 简介 Bootloader 流程 Bootloader 功能简介 内核下载实验 应用程序下载实验. 3. 实验设备. 硬件: UP-TECHPXA270-S 嵌入式开发板、 PC 机 Pentumn500 以上 , 硬盘 10G 以上。
E N D
主要内容 • BootLoader 简介 • Bootloader 流程 • Bootloader 功能简介
实验目的 1.了解Bootloader的基本概念及构成; 2.学习内核移植的方法; 3.学习应用程序下载的方法。
2. 实验内容 • BootLoader 简介 • Bootloader 流程 • Bootloader 功能简介 • 内核下载实验 • 应用程序下载实验
3.实验设备 • 硬件:UP-TECHPXA270-S嵌入式开发板、PC机Pentumn500以上, 硬盘10G以上。 • 软件:PC机操作系统REDHAT LINUX 9.0 +MINICOM + ARM-LINUX开发环境+FlashFXP软件
4.实验原理 • Bootloader代码(即启动代码)就是芯片复位后进入操作系统之前执行的一段代码,主要是为运行操作系统提供基本的运行环境,如初始化CPU堆栈、初始化存储器系统等。Bootloader代码与CPU芯片的内核结构、具体芯片和使用的操作系统等因素有关,其功能有点类似于PC机的BIOS(Basic Input/Output System,基本输入输出系统)程序。
Bootloader 启动过程 开 始 初始化与中断有关的寄存器 建立异常向量表 初始化串口 初始化时钟 初始化协处理器 建立堆栈 引导操作系统 初始化flash ROM, SDRAM 结 束 执行重映射,建立新的异常向量表
BootLoder作用 • Bootloader的作用: • 嵌入式系统的资源有限,应用程序通常都是固化在ROM中运行。ROM中的程序执行前,需要对系统硬件和软件运行环境进行初始化。这些工作是用汇编语言和C语言编写的Bootloader代码完成的。在ARM处理器的嵌入式系统中,Bootloader代码的作用主要有以下几点: • 建立中断向量表 • 初始化CPU各种模式的堆栈和寄存器 • 初始化flash ROM,SDRAM等各种片内外设 • 实现地址重映射 • 初始化目标板; • 引导操作系统
建立中断向量表 建立中断向量表: LDR PC,ResetAddr //reset LDR PC,UndefinedAddr //undefined LDR PC,SWI_Addr //software interrupt LDR PC,PrefetchAddr //prefetch LDR PC,DataAbortAddr //data abort LDR PC,[PC,#-0xff0] //irq LDR PC,FIQ_Addr //fiq
初始化堆栈 初始化堆栈: MOV R0,LR 因芯片模式切换,故将程序返回地址保存至R0,同时在初始化堆栈完成后使用R0返回. MSR CPSR_c,#0xd3 ;设置管理模式堆栈 LDR SP,StackSvc MSR CPSR_c,#0xd2 ;设置中断模式堆栈 LDR SP,StackIrq MSR CPSR_c,#0xd1 ;设置快速中断模式堆栈 LDR SP,StackFiq
初始化堆栈 初始化堆栈:初始化堆栈 MSR PSR_c,#0xd7 ;设置中止模式堆栈 LDR SP,StackAbt MSR CPSR_c,#0xdb ;设置未定义模式堆栈 LDR SP,StackUnd MSR CPSR_c,#0xdf ;设置系统模式堆栈 LDR SP,StackUsr MOV PC,R0
初始化外设 初始化外设: 初始化外设主要是指初始化cpu内部的控制寄存器,比如:lcd 控制器,网络控制器等等,主要是靠汇编语言来完成 实例代码: LDR R1,=0x3ff5000 ;外设寄存器1地址 LDR R0,=0x0 STR R0,[R1] ;赋初值 LDR R0,=0x3ff5008 ;外设寄存器2地址 LDR R1,[R0] ;取出寄存器的值 AND R1,R1,#0x08 CMP R1,#0x08 ;测试bit3
地址重映射 地址重映射: 地址重映射是实现RAM和ROM的物理地址对调,在嵌入式系统里面: 0x0地址ROM的开始地址,RAM开始地址是非0x0的地址,在bootloader汇编代码中需要将RAM的地址和ROM的地址对调,这样一个过程,我们叫做地址重映射 地址重映射的代码举列: LDR r0, =0x3FF0000 + 0x3010 LDR r1, =0x00003002 LDR r2, =0x12040060 LDR r3, =rROMCON1 LDR r4, =rROMCON2 LDR r5, =rROMCON3 LDR r6, =rROMCON4 LDR r7, =rROMCON5
地址重映射 地址重映射 地址重映射的代码举列: LDR r8, =0x10000380 LDR r9, =rSDRAMCON1 LDR r10,=rSDRAMCON2 LDR r11,=rSDRAMCON3 LDR r12,=rSREFEXTCON STMIA r0, {r1-r12} 问题:地址重映射的作用是什么?
初始化目标板 初始化目标板: 初始化目标板主要是指初始化cpu的时钟,设置存储器加速,打开中断和目标板特性相关初始化配置 注意: 每个目标板的硬件配置都不完全样,初始化目标板程序都不会完全一样.
引导操作系统 引导操作系统: 引导操作系统是一个很复杂的过程,我们在这里讲的是在如何在bootloader里面将linux kernel加载到RAM中并且跳转到RAM中开始启动Linux,以下是导操作代码举列: //将ROM中的linux kernel搬移到RAM中 om2ram_copy_loop ldr r3, [r0], #4 str r3, [r2], #4 subs r1, r1, #4 bne rom2ram_copy_loop //跳转到RAM中的Linux开始地址 LDR R0,=kernel address MOV PC,R0
5.实验步骤 1. 应用程序下载--FlashFXP传输 双击FlashFXP程序,点击会话/快速连接,进入如下画面:
输入开发板的IP地址及用户名,注意开发板的IP一定要与Windows下的主机IP地址在同一网段,然后在屏幕右端出现会出现开发板的目录。输入开发板的IP地址及用户名,注意开发板的IP一定要与Windows下的主机IP地址在同一网段,然后在屏幕右端出现会出现开发板的目录。
在左端目录下搜索准备传输的文件,在右端确定准备存放文件的路径。在左端目录下找到对应需要传输的文件,点击鼠标右键,出现以下对话框,点击传输即可。在左端目录下搜索准备传输的文件,在右端确定准备存放文件的路径。在左端目录下找到对应需要传输的文件,点击鼠标右键,出现以下对话框,点击传输即可。
如果传送不过去,应在开发板对应的文件夹下修改属性,输入rtrw命令,同时还应该输入inetd命令启动开发板的网络服务。如果传送不过去,应在开发板对应的文件夹下修改属性,输入rtrw命令,同时还应该输入inetd命令启动开发板的网络服务。 • 建立设备连接: • mkdir /dev/tts • ln –s /dev/ttyS0 /dev/tts/0