嵌入式系统设计实验告--BootLoader-移植实验

学院
嵌入式系统设计实验报告
(20 13 - 20 14第 2学期)
专业:
实验项目: BootLoader 移植实验
实验时间: 2014 年 5 月 19 日实验成员:
__________________________________ __________________________________ 指导老师:
电子信息与电气工程系
2014年4月制
实验三 BootLoader移植实验
一、实验目的
1、熟悉Bootloader工作原理。

2、了解U-Boot的代码结构。

3、掌握U-Boot移植过程。

二、实验容
本实验熟悉Bootloader工作原理,了解U-Boot源码结构,基于S3C2440处理器,完成U-Boot移植,并在目标开发板上测试通过。

三、实验设备
硬件:1、pc机
2、FriendlyARM开发套件即MIRCO2440核心板
软件:1、虚拟机(VMware)
2、U-Boot源码(u-boot-2011.03.tar)
四、实验过程
1、Micro2440 配置
在mini2440/micro2440 上的移植准备工作,我们仍然将开发板文件建立在board/samsung 下,
2、配置时出现错误,字体要修改,复制粘贴的时候出现的错误,有的地方有中文,去掉就
行了。

3、编译完成失败,只有上网查找错误,最后解决了错误。

11
12
4、编译完成后将u-boot.bin 下载到SDRAM 的0x33f80000 地址处,u-boot 已经能在RAM
中运行。

二、支持 DM9000
1、编译完成后将u-boot.bin 下载到SDRAM 的0x33f80000 地址处。

三、支持核启动
1、编译完成后将u-boot.bin 下载到SDRAM 的0x33f80000 地址处。

四、支持 Nand Flash
1、编译完成后将u-boot.bin 下载到SDRAM 的0x33f80000 地址处。

五、实验小结
本实验需要熟悉Bootloader工作原理,了解U-Boot源码结构,基于S3C2440处理器,完成U-Boot移植,并在目标开发板上测试通过,首先可以看到实验指导书上的介绍,了解U-Boot的移植。

开始主要是利用U-Boot源码(u-boot-2011.03.tar)进行配置,建立Micro2440 配置、在 RAM 中运行、支持 DM9000、支持核启动、支持 Nand Flash、支持 yaffs 下载、支持 Nand Flash 启动等配置。

本次实验中虽然不要我们自己编写程序。

但是对于初学者的我们还是有点难度的,主要是时间限制,所以实验都是在课下完成的。

但是这样我们学习的更加深刻。

有充足的时间去消化这些知识。

当然我们也基本完成了主要的移植,学会了最基本的思想,希望接下来的实验我们仍然可以很好的完成。

六、思考题
1、Bootloader的结构分两部分,简述各部分的功能。

(1)OEM startup code
这部分代码是在BootLoader中最先被执行的。

它的主要功能是初始化最小围的硬件设备,比如设置CPU工作频率、关闭看门狗、设置cache、设置RAM的刷新率、填写存控制寄存器(通知CPU有效的数据总线引脚数)等。

由于系统刚刚启动,不适合使用复杂的高级语言,
因此这部分代码主要由汇编程序完成。

在汇编程序段设置完堆栈后,就跳转到C语言的Main 函数入口(位于<PLATNAME>/eboot/main.c);
(2)Main code
这部分代码由C语言实现,是BLCOMMON代码的一部分,它可以用来执行比较复杂的操作。

比如检测存和Flash的有效性、检测外部设备接口、检测串口并且向已经连接的主机发送调试信息、通过串口等待命令、启动网络接口、建立存映射等汇编无法完成的工作。

2、ARM常用的Bootloader程序有哪些?简要说明。

嵌入式Linux系统中常用的Bootloader引导程序有U-Boot,redboot,blob和vivi等,其中U-Boot遵循GPL条款的开放源码项目,功能最为强大;U-Boot对PowerPC系列处理器支持最丰富,同时还支持MIPS,x86,ARM,Nios,XScale等诸多常用系列的处理器。

1)U-Boot:全称Universal Boot Loader,是遵循GPL条款的开放源码项目。

从FADSROM、8xxROM、PPCBOOT逐步发展演化而来。

其源码目录、编译形式与Linux核很相似,事实上,不少U-Boot源码就是相应的Linux核源程序的简化,尤其是一些设备的驱动程序,这从U-Boot源码的注释中能体现这一点。

2)Redboot是在ECOS的基础上剥离出来的,继承了ECOS的简洁、轻巧、可灵活配置、稳定可靠等品质优点。

它可以使用X-modem或Y-modem协议经由串口下载,也可以经由以太网口通过BOOTP/DHCP服务获得IP参数,使用TFTP方式下载程序映像文件,常用于调试支持和系统初始化(Flash下载更新和网络启动)。

3)Blob功能比较齐全,代码较少,比较适合做修改移植,用来引导Liunx,目前大部分S3C44B0板都用Blob修改移植后来加载uClinux。

4)vivi是国mizi 公司开发的bootloader, 适用于ARM9处理器。

Vivi有两种工作模式:启动加载模式和下载模式。

启动加载模式可以在一段时间后(这个时间可更改)自行启动linux核,这是vivi的默认模式。

在下载模式下,vivi为用户提供一个命令行接口,通过接口可以使用vivi提供的一些命令
3、简述u-boot的启动的两部分流程。

从固态存储设备上启动的Boot Loader 大多都是2 阶段的启动过程,也即启动过程可以分为 stage1 和 stage2 两部分。

在stage1 阶段,通常将完成以下工作(以执行的先后为顺序):
1. 硬件设备初始化,通常只初始化的最基本的设备,如存控制器、串口等设备
2. 为加载 Boot Loader的 stage2 准备存空间
3. 复制Boot Loader 的stage2 到存空间中
4. 设置堆栈
5. 跳转至 stage2 的入口点
Boot Loader 的stage 2 通常包括以下步骤:
1. 初始化本阶段要使用到的硬件设备,如以太网、USB等
2. 检测系统存的映射
3. 将核映像和根文件系统映像从固体存储器Flash 等上读到存空间中
4. 设置核启动参数
5. 启动核。

合集下载

实验一 Bootloader的设计与移植实验讲义

实验一 Bootloader的设计与移植实验讲义
实验一 Bootloader 设计与移植
实验一
BootLoader 的设计与移植
东南大学嵌入式工程中心 2011-08
当完成用户程序的编译并下载到目标板上运行时,总是要首先进行存储器的映射,然后 通过 ADS(或 SDT)调试环境下载,显然,这个过程对普通用户来说显得特别烦琐,然而, 要在裸板(没有任何程序的系统板)上调试运行程序,也只能采用这种方法。如果能在用户 设计的系统板上烧写一段 BootLoader 程序,就可以将该过程屏蔽起来,让用户通过一些简 单的操作,就可完成程序的下载、调试等工作,这就是我们要在裸板设计与移植 BootLoader 的原因与意义所在。
由于时间关系,移植的是华邦开发板上自带的BootLoader,这样就不需要对硬件平台 的初始化工程进行修改。 1、 Bootloader 的下载 方法一: A、 建立超级终端。打开开始菜单/附件/通讯/超级终端,建立一个终端。名字自拟,选择连
接时使用 com1,确定。然后选择每秒位数 115200,数据位 8,停止位 1,其它选择无。 B、上电后按下“ESC”键进入 bootloader 调试模式
这在我们这短短的时间内是很难做到的,所以实验中对 Bootloader 只进行简单的修改比如说 进入 Debug 模式的等待时间,在载入过程中控制 LED 闪亮等等。整个过程我们主要修改 Bootloader.mcp 中的 Command.c 文件.(修改时注意,不要将 Bootloader 等待时间设置过长; 编写好程序之后,务必严格进行逻辑检查,不要出现死循环!!!否则后果很严重)
负责以以太网接口向 flash 里面固化程序
Shell.mcp
BootLoader 里面 shell 命令的解析
zlib.mcp

《BootLoader实验》PPT课件

《BootLoader实验》PPT课件
中 功能4:啟動Linux
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移植实验

合肥学院嵌入式系统设计实验报告(20 13 - 20 14 第 2 学期)专业:实验项目:BootLoader移植实验实验时间:2014年5月19日实验成员:____________________________________________________________________指导老师:电子信息与电气工程系2014 年 4 月制实验三BootLoader 移植实验一、实验目的1、熟悉 Bootloader 工作原理。

2、了解 U-Boot 的代码结构。

3、掌握 U-Boot 移植过程。

二、实验内容本实验熟悉 Bootloader 工作原理,了解 U-Boot 源码结构,基于 S3C2440 处理器,完成 U-Boot 移植,并在目标开发板上测试通过。

三、实验设备硬件: 1、 pc 机2、 FriendlyARM开发套件即MIRCO2440 核心板软件: 1、虚拟机( VMware )2、U-Boot 源码( u-boot-2011.03.tar )四、实验过程1、 Micro2440配置在mini2440/micro2440上的移植准备工作,我们仍然将开发板文件建立在board/samsung 下,2、配置时出现错误,字体要修改,复制粘贴的时候出现的错误,有的地方有中文,去掉就行了。

3、编译完成失败,只有上网查找错误,最后解决了错误。

11124、编译完成后将u-boot.bin下载到SDRAM的 0x33f80000地址处, u-boot已经能在RAM中运行。

二、支持DM90001、编译完成后将u-boot.bin下载到SDRAM的0x33f80000地址处。

三、支持内核启动1、编译完成后将u-boot.bin下载到SDRAM的0x33f80000地址处。

四、支持Nand Flash1、编译完成后将u-boot.bin下载到SDRAM的0x33f80000地址处。

五、实验小结本实验需要熟悉Bootloader 工作原理,了解U-Boot 源码结构,基于S3C2440 处理器,完成 U-Boot 移植,并在目标开发板上测试通过,首先可以看到实验指导书上的介绍,了解U-Boot 的移植。

嵌入式实习报告(共5篇)

嵌入式实习报告(共5篇)

嵌入式实习报告(共5篇)第一篇:嵌入式实习报告一、嵌入式系统开发与应用概述在今日,嵌入式ARM 技术已经成为了一门比较热门的学科,无论是在电子类的什么领域,你都可以看到嵌入式ARM 的影子。

如果你还停留在单片机级别的学习,那么实际上你已经落下时代脚步了,ARM 嵌入式技术正以几何的倍数高速发展,它几乎渗透到了几乎你所想到的领域。

本章节就是将你领入ARM 的学习大门,开始嵌入式开发之旅。

以嵌入式计算机为技术核心的嵌入式系统是继网络技术之后,又一个IT领域新的技术发展方向。

由于嵌入式系统具有体积小、性能强、功耗低、可靠性高以及面向行业具体应用等突出特征,目前已经广泛地应用于军事国防、消费电子、信息家电、网络通信、工业控制等各个领域。

嵌入式的广泛应用可以说是无所不在。

嵌入式微处理器技术的基础是通用计算机技术。

现在许多嵌入式处理器也是从早期的PC 机的应用发展演化过来的,如早期PC 诸如TRS-80、Apple II 和所用的Z80 和6502 处理器,至今仍为低端的嵌入式应用。

在应用中,嵌入式微处理器具有体积小、重量轻、成本低、可靠性高的优点。

嵌入式处理器目前主要有Am186/88、386EX、SC-400、Power PC、68000、MIPS、ARM 等系列。

在早期实际的嵌入式应用中,芯片选择时往往以某一种微处理器内核为核心,在芯片内部集成必要的ROM/EPROM/Flash/EEPROM、SRAM、接口总线及总线控制逻辑、定时/计数器、WatchDog、I/O、串行口、脉宽调制输出、A/D、D/A 等各种必要的功能和外设。

二、实习设备硬件:Embest EduKit-IV实验平台、ULINK2仿真器套件、PC机软件:μVision IDE for ARM集成开发环境、Windows 98/2000/NT/XP三、实习目的1.初步掌握液晶屏的使用及其电路设计方法;掌握S3C2410X处理器的LCD控制器的使用;掌握通过任务调用的方法把液晶显示函数添加到uC/OS-II中;通过实验掌握液晶显示文本及图形的方法与程序设计。

嵌入式系统实验报告(华中科技大学)

嵌入式系统实验报告(华中科技大学)

课程实验报告实验名称:嵌入式系统实验专业班级:计算机科学与技术x班学号:Ux姓名:x合作者:x实验时间:xxxx年xx月xx日计算机科学与技术学院试验一:bootloader (ads、引导)一、实验任务1、熟悉ADS 1.2开发工具创建、编译、下载、调试工程2、串口通讯串口控制器初始化、收/发数据3、配置主机端的nfs服务器配置主机端的nfs服务器,以连接linux核心4、下载并运行linux核心使用自己的串口程序下载并运行linux核心二、实验内容编写串口接收数据函数编写串口发送数据函数学习ads、jtag调试、flash烧写打印菜单,等待用户输入下载并运行linux核心配置主机的nfs服务器,与linux核心连接三、实验步骤1.编写串口接收数据函数编写串口发送数据函数修改bootloader:菜单、串口收发、命令行;接收串口数据并做相应处理:while(1){打印菜单并等待用户输入;switch(ch) //根据用户输入做相应处理{case '1':imgsize=xmodem_receive((char *)KERNEL_BASE, MAX_KERNEL_SIZE);if(imgsize==0) //下载出错;else //下载成功;break;case '3':nand_read((unsigned char *)KERNEL_BASE, 0x00030000, 4*1024*1024);case '2':BootKernel(); //这里是不会返回的,否则出错;break;default:break;}}Bootloader的main()函数打印菜单:int main(void){ARMTargetInit(); //目标板初始化;//接收用户命令,传递linux核心;Uart_puts("Menu:\n\r");Uart_puts("1.Load kernel via Xmodem;\n\r");Uart_puts("2.Boot linux; \n\r");Uart_puts("3.Load kernel from flash and boot; \n\r");Uart_puts("Make your choice.\n\r");do{ch=Uart_getc();}while(ch!='1' && ch!='2' && ch!='3');return 0;}串口读写:void Uart_putc(char c){while(!SERIAL_WRITE_READY());((UTXH0) = (c));}unsigned char Uart_getc( ){while(!SERIAL_CHAR_READY());return URXH0;}2.使用ads1.2编译bootloader;3.使用uarmjtag下载、调试bootloader;4.使用axd查看变量、内存,单步跟踪;5.配置超级终端,与bootloader通讯;6.配置nfs;编辑/etc/export文件:/home/arm_os/filesystem/rootfs 目标板ip(rw,sync)/home/arm_os/filesystem/rootfs 主机ip(rw,sync)启动nfs服务器:/etc/init.d/nfs restart测试nfs服务器是否正常运行:mount 主机ip:/home/arm_os/filesystem/rootfs /mnt7.以root用户启动cutecom,将cutecom配置改为115200 bps,8位,1位停止位,无校验,xmodem,no line end;8.使用bootloader重新下载Linux核心映像,启动核心运行后,察看是否成功加载nfs上的root文件系统;9.启动Linux核心运行,察看结果;10.linux核心能够运行到加载root步骤,说明bootloader正常运行;11.将bootloader烧写到flash中,重启目标板电源,察看bootloader是否烧写正常,下载核心测试;目标板linux系统正常运行到命令行模式下,能够正常输入linux命令,说明实验成功。

实验二BootLoader移植(下)

实验二BootLoader移植(下)

实验内容二—BootLoader移植一、实验目的简单地说,BootLoader就是在操作系统内核运行之前运行的一段小程序。

通过这段小程序,我们可以初始化硬件设备、建立内存空间映射图,从而将系统的软硬件环境带到一个合适状态,以便为最终调用操作系统内核准备好正确的环境。

在嵌入式系统中,通常并没有像BIOS那样的固件程序(注,有的嵌入式CPU也会内嵌一段短小的启动程序),因此整个系统的加载启动任务就完全由BootLoader来完成。

比如在一个基于ARM7TDMI core的嵌入式系统中,系统在上电或复位时通常都从地址0x00000000处开始执行,而在这个地址处安排的通常就是系统的BootLoader程序。

BootLoader是嵌入式系统上电之后,操作系统内核运行之前执行的一段程序,主要负责载入内核。

利用上次实验制作的交叉编译工具为目标机编译一个U-boot,然后烧写到实验箱中,为后面的系统移植和嵌入式程序的编译做基础。

二、实验内容把编译好的u-boot烧写到arm开发箱中并熟练使用u-boot命令。

三、实验步骤烧写U-BootU-Boot编译完成之后,就可以将u-boot目录下的u-boot.bin 烧写到目标机的NandFlash中。

u-boot.bin的烧写需要使用一个硬件烧录装置,例如Flash 烧录器或JTAG仿真器。

Super-ARM实验箱的U-Boot烧写,在WINDOWS下进行,依赖第3章中所安装的ADS开发环境,过程如下:(1)用Super-ARM实验箱中配置的并口线将PC 机并口(DB25 口)与仿真器Probe ICE 的DB25口连接;用20Pin扁平电缆线将仿真器Probe ICE 的ARM-JTAG 口与实验箱的JTAG 口相连接。

打开系统电源。

(2)运行Multi-ICE Server(3)将本章附件中名为“u-boot烧写”的文件夹复制到PC机的某个目录下,将新编译成功的u-boot.bin拷贝到该目录下。

嵌入式系统BootLoader的设

16
BootLoader的安装媒介
系统加电或复位后,所有的CPU通常都从CPU制造商预先 安排的地址上取指令。
基于ARM7TDMI Core的嵌入式系统中,系统在上电或 复位时是从0x00000000地址开始取第一条指令执行,而 在这个地址处安排的通常就是系统的BootLoader程序。
嵌入式系统通常都有某种类型的固态存储设备(比如: ROM、EPROM或FLASH等)被安排这个起始地址上用来 存放BootLoader程序。
因此,为嵌入式系统建立一个通用的BootLoader是很困 难的。尽管如此,我们仍然可以对BootLoader(尤其是 基于同种Core的微处理器)归纳出一些通用的概念和设 计思路,用来指导用户特定的BootLoader设计与实现。
15
BootLoader的启动过程
为了增加BootLoader的通用性和可移植性,本文把启动 过程分为phasel和phase2两个阶段。
转移指令 LDR PC,=FIQHandler LDR PC,=IRQHandler NOP LDR PC,=DabortHandler LDR PC,=PabortHandler LDR PC,=SWIHandler LDR PC,=UndefHandler B ResetHandler
① 设置中断向量表
1
设置
中断向量表
2
最小硬件 初始化
RTOS运行环境
3
初始化
最 小 启 动 phase1 代 码
中断向量表放在上电后映射在从 0x00000000开始的8*4个字节的连续存储 空间中,其作用是指定了各种异常中断 处理程序的入口地址。
21
嵌入式系统的初始化流程(2)
硬件初始化阶段

第4章嵌入式系统的BootLoader技术

Opt1 – kernel option(Only 0) Opt2 – machine type( X-Hyer255 : 200) Addr – kernel image address
XSBASE255> boot XSBASE255> boot 0 200 XSBASE255> boot 0xa0008000 0 200
X-HYPER255> tftp zImage kernel X-HYPER255> tftp zImage 0xa0000000
第4章嵌入式系统的BootLoader技术
Usage Description Arguments
Example
Flash [loader/kernel/root/ramdisk] Flash [dest] [src] [len]
贝到 RAM 空间时的系统内存布局,如下 图:
第4章嵌入式系统的BootLoader技术
第4章嵌入式系统的BootLoader技术
2.2 Boot Loader阶段2介绍
l 1)初始化本阶段要使用到的硬件设备
l 初始化至少一个串口,以便和终端用户进行 I/O输出信息
l 初始化计时器等
第4章嵌入式系统的BootLoader技术
第4章嵌入式系统的BootLoader技术
实验一 Boot Loader应用实验(1)
l 烧写XsBase255的BootLoader
l 编译生成XsBase255专用的JTAG程序 Jflash-XSBase255
l 编译生成XSBase的Boot Loader x-boot255 l 正确连线 l 利用JTAG烧写BootLoader
第4章嵌入式系统的BootLoader技术

嵌入式系统设计-BootLoader


u32 size; /*the byte number of the memory region*/
int
used;
}memory_area_t;
Boot Loader划分
• 大多数Boot Loader 都分为stage1 和stage2
两大部分。依赖于CPU 体系结构的代码, 比如设备初始化代码等,通常都放在stage1 中,而且通常都用汇编语言来实现,以达 到短小精悍的目的。而stage2 则通常用C语 言来实现,这样可以实现给复杂的功能, 而且代码会具有更好的可读性和可移植性。
好准备。
跳转到 stage2 的 C 入口点
Stage2
• 通常包括以下步骤(以执行的先后顺序):
– 初始化本阶段要使用到的硬件设备。 – 检测系统内存映射(memory map)。 – 将kernel 映像和根文件系统映像从flash 上读到
RAM 空间中。 – 为内核设置启动参数。 – 调用内核。
来作为 main() 函数的外部包裹(external wrapper)
• 用汇编语言写一段trampoline 小程序,并
将这段 trampoline 小程序来作为 stage2 可执行映象的执行入口点。
• 在 trampoline 汇编小程序中用 CPU 跳转
指令跳入 main() 函数中去执行;
60KB 4KB 704KB 1280KB
Bootloader空间结构划分
控制Boot Loader 的设备或机制
• 主机和目标机之间一般通过串口建立连接,
Boot Loader 软件在执行时通常会通过串口 来进行I/O,比如:输出打印信息到串口, 从串口读取用户控制字符等
Boot Loader 的操作模式

基于嵌入式ARM的Bootloader研究与实现


三、Bootloader的研究进展开嵌 入式ARM系统的Bootloader研究 与实现
三、Bootloader的研究进展开嵌入式ARM系统的Bootloader研究与 实现
嵌入式ARM系统在许多领域得到广泛应用,如工业控制、智能家居、通信设备 等。在这些应用场景中,Bootloader的作用不言而喻。本次演示将深入探讨嵌入 式ARM系统的Bootloader研究与实现。
内存管理模块主要负责内存的映射和保护工作。为了实现通用性,我们可以 采用内存分页和分段的技术来实现内存管理。通过将内存分为不同的段或页,我 们可以实现对内存的灵活管理。例如,我们可以将系统程序代码映射到 0x~0x0FFFFFFF的空间,将数据映射到0x~0x1FFFFFFF的空间等。
4、异常处理模块
一、Bootloader的启动过程
5、将引导程序加载到内存中,并跳转到该执行。
二、Bootloader的实现方法
二、Bootloader的实现方法
1、汇编语言实现:由于Bootloader需要直接与硬件打交道,因此通常使用 汇编语言实现。常用的汇编语言有ARM汇编和Keil汇编。
二、Bootloader的实现方法
基于嵌入式ARM的 Bootloader研究与实现
目录
01 一、Bootloader的 启动过程
03 三、Bootloader的 研究进展开嵌入式 ARM系统
02 二、Bootloader的 实现方法
04 参考内容
嵌入式ARM系统的Bootloader研 究与实现
嵌入式ARM系统的Bootloader研究与实现
三、通用Bootloader的实现
为了进一步实现通用的Bootloader,我们还需要使用一种可扩展的程序设计 方法。该方法允许我们在不更改程序代码的前提下,通过添加不同的模块来实现 不同的功能。例如,我们可以添加一个网络模块来实现从网络启动的功能;我们 也可以添加一个USB模块来实现从USB设备启动的功能。
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
相关文档
最新文档