bootloader移植
BSP移植
1 引言在当今后PC时代,嵌入式系统应用得越来越广泛,嵌入式产品充斥着许多领域,日常生活的手机,MP4,PDA等都属于典型的嵌入式系统。
在嵌入式系统中,微处理器和操作系统是进行应用开发的基础。
在微处理器方面,S3C2410是Samsung公司推出的一款基于ARM920T内核的16/32位RISC嵌入式CPU,主要面向手持设备以及高性价比、低功耗的应用。
在操作系统方面,Windows CE 5.0是由微软提供的一款嵌入式操作系统,在Windows CE 4.2基础上,它又加入了一些新特性以满足市场需求。
板级支持包(Board Support Package,BSP)是操作系统的一个组成部分,提供对硬件的支持。
BSP的开发在整个产品开发时间上占了很大比例,快速的移植满足产品需求的BSP在竞争激烈的市场环境里显得很重要。
目前已有许多关于S3C2410、Windows CE以及BSP相关的研究报道,文献[1]研究基于S3C2410的GPS通信技术及实现,文献[2]中详尽分析Windows CE的结构,文献[3]中归纳了Windows CE 4.2专用操作系统的定制和裁剪方法,文献[4]则探讨基于DSP嵌入式多媒体应用系统板级支持包的开发。
目前关于Windows CE的应用主要采用Windows CE 4.2及以下版本,本文研究基于S3C2410的Windows CE 5.0 BSP移植技术。
2 Windows CE 5.0及BSP结构分析移植基于S3C2410的Windows CE 5.0 BSP,需要分析Windows CE 5.0 及BSP结构。
Windows CE 5.0是一款开放的、可升级的32位嵌入式操作系统,具有高可靠性,是一种硬实时嵌入式操作系统,它可以在多种处理器架构(如x86、MIPS、ARM和SH4)上运行,Windows CE支持ARM体系结构,这是基于S3C2410 处理器进行BSP移植的前提条件。
bootloader原理
bootloader原理引言:在计算机系统中,bootloader(引导加载程序)是启动计算机操作系统的第一个程序。
它的主要作用是初始化系统硬件并加载操作系统内核,使计算机能够正常启动。
本文将详细介绍bootloader的原理和工作流程。
一、bootloader的作用bootloader是计算机启动过程中的重要组成部分,其作用主要有以下几个方面:1. 初始化硬件:bootloader负责初始化计算机系统的硬件设备,包括CPU、内存、外设等。
通过与硬件交互,确保系统能够正常运行。
2. 加载操作系统内核:bootloader从硬盘或其他存储设备中读取操作系统内核的镜像文件,并将其加载到内存中。
加载完成后,将控制权交给操作系统。
3. 提供启动选项:bootloader可以提供多个启动选项,允许用户选择不同的操作系统或系统配置。
这在多系统或多配置的计算机中尤为重要。
二、bootloader的工作流程1. 加电自检:当计算机加电时,CPU会首先执行自检程序,检测硬件设备是否正常工作。
自检完成后,将转移到bootloader程序上。
2. 加载bootloader:在计算机的硬盘或其他存储设备中,有一个固定的位置存放着bootloader程序。
CPU会通过读取存储设备上的引导扇区,将bootloader加载到内存中。
3. 初始化硬件:bootloader会初始化计算机的硬件设备,包括CPU、内存、硬盘、显示器等。
这些初始化操作是为了确保系统能够正常运行,并为操作系统的加载做好准备。
4. 加载操作系统内核:bootloader会从存储设备中读取操作系统内核的镜像文件,并将其加载到内存中的指定位置。
加载完成后,bootloader将控制权交给操作系统。
5. 启动操作系统:操作系统接管控制权后,会执行自己的初始化操作,并进入正常的工作状态。
至此,计算机的启动过程完成。
三、bootloader的实现方式bootloader的实现方式因计算机架构和操作系统而异。
认识Bootloader
Boot Loader 软件在执行时通常会通过串口来进行 I/O,比如
输出打印信息到串口 从串口读取用户控制字符等。
最常用的串口通信软件
Linux:minicom Windows:附件中的超级终端
BootLoader的启动过程
Boot Loader的启动过程可以是 单阶段(Single Stage)
BootLoader的操作模式
大多数 Boot Loader 包含两种不同的操作模式 启动加载(Boot loading)模式 下载(Downloading)模式 这种区别仅对于开发人员才有意义,从最终用户的角度看,Boot Loader 的作用就是加载操作系统,并不存在上述两种模式的区别
启动加载模式
也称为自主(Autonomous)模式 Boot Loader从目标机上的某个固态存储设备上将操作系统加载
到 RAM 中运行,整个过程并没有用户的介入。 这种模式是 Boot Loader 的正常工作模式
在嵌入式产品发布时,Boot Loader必须工作在该模式下
下载模式
目标机的 Boot Loader通过串口或网络等通信手段从主机(Host)下载文件 比如内核映像和根文件系统映像 Hosttarget ram target FLASH 该模式的使用时机 通常在第一次安装内核与根文件系统时被使用 也用于此后的系统更新 工作于该模式下的 Boot Loader 通常都会向它的终端用户提供一个简单的命令 行接口
基于CPU 构建的嵌入式系统通常都有某种类型的固态存储设备被映射到这个预先安排的地址上。
比如:ROM、EEPROM 或 FLASH 等。
因此在系统加电后,CPU将首先执行Bootloader 程序。
u-bootUBIFS移植及文件系统烧写
u-bootUBIFS移植及文件系统烧写imx515 uboot UBIFS移植及android UBIFS文件系统烧写作者:longfeey1.1 Uboot UBI的移植关于uboot的UBI的移植几乎没有说明介绍,移植首先要保证你的flash驱动能够跑起来,我是在nand flash 上跑的UBI。
刚开始的时候我也没有什么头绪,只能够从uboot的readme开始查找一些蛛丝马迹。
- MTD Support (mtdparts command, UBI support)CONFIG_MTD_DEVICEAdds the MTD device infrastructure from the Linux kernel.Needed for mtdparts command support.CONFIG_MTD_PARTITIONSAdds the MTD partitioning infrastructure from the Linuxkernel. Needed for UBI support.因此,要UBI支持首先得要MTD支持,因此在配置文件中要添加以上两项的定义。
要移植UBI还要添加:#define CONFIG_CMD_UBIFS#define CONFIG_CMD_UBI总的关于UBI的部分是以下几个宏:#define CONFIG_CMD_UBI#define CONFIG_CMD_UBIFS#define CONFIG_CMD_MTDPARTS#define CONFIG_MTD_DEVICE#define CONFIG_MTD_PARTITIONS#define CONFIG_RBTREE#define CONFIG_LZO同时要给NAND建立个默认的分区,方便以后操作。
分区如下:#define MTDIDS_DEFAULT "nand0=nand0"#define MTDPARTS_DEFAULT "mtdparts=nand0:0x100000@0x0(u-boot),0x300000@0x120000(kernel),0x7b00000@0x420000(rootf s),-(reserved)"#define MTD_ACTIVE_PART "nand0,2"以上的配置都在uboot_imx/include/configs/mx51_vdphone.h 文件中进行配置。
BootLoader
BootLoader锁定本词条由“科普中国”百科科学词条编写与应用工作项目审核。
行之前运行。
可以初始化硬件设备、建立内存空间映射图,从而将系统的软硬件环境带到一个合适状态,以便为最U也会内嵌一段短小的启动程序),因此整个系统的加载启动任务就完全由BootLoader来完成。
在一个基于ARM7TDM I00000000处开始执行,而在这个地址处安排的通常就是系统的BootLoader程序。
中文名启动装载外文名BootLoader说明系统启动前引导程序操作模式启动模式、交互模式1背景介绍Bootloader是嵌入式系统在加电后执行的第一段代码,在它完成CPU和相关硬件的初始化之后,再将操作系统映像或固化的嵌入式应用程序装在到内存中然后跳转到操作系统所在的空间,启动操作系统运行。
[1]对于嵌入式系统,Bootloader是基于特定硬件平台来实现的。
因此,几乎不可能为所有的嵌入式系统建立一个通用的Bootloader,不同的处理器架构都有不同的Bootloader 。
Bootloader不但依赖于CPU的体系结构,而且依赖于嵌入式系统板级设备的配置。
对于2块不同的嵌入式板而言,即使它们使用同一种处理器,要想让运行在一块板子上的B ootloader程序也能运行在另一块板子上,一般也都需要修改Bootloader的源程序。
反过来,大部分Bootloader仍然具有很多共性,某些Bo otloader也能够支持多种体系结构的嵌入式系统。
例如,U-Boot就同时支持PowerPC、ARM、MIPS和X86等体系结构2操作模式1.自启动模式:在这种模式下,bootloader从目标机上的某个固态存储设备上将操作系统加载到RAM中运行,整个过程并没有用户的介入。
2.交互模式:在这种模式下,目标机上的bootloader将通过串口或网络等通行手段从开发主机(Host)上下载内核映像等到RAM中。
可以被bootloader写到目标机上的固态存储媒质中,或者直接进入系统的引导。
u-boot移植4--支持DM9000
U-boot移植5--支持DM9000开发板的原理图中得知:第二阶段从在lib_arm的board.c的start_armboot函数开始,其中有一个是跳到网卡初始化的eth_initialize函数(在net/eth.c中)(上面的宏CONFIG_NET_MULTI,等会要实现)。
1、在eth_initialize(文件中有两个,代码较长的那个)的#if defined(CONFIG_MII) || (CONFIG_COMMANDS & CFG_CMD_MII)miiphy_init();#endif后面添加上下面的代码if (board_eth_init(bis) < 0)cpu_eth_init(bis);并在本文件前面增加如下代码:static int __def_eth_init(bd_t *bis){return -1;}int cpu_eth_init(bd_t *bis) __attribute__((weak, alias("__def_eth_init")));2、在mao2440.c中添加上面函数的实现#include <net.h>extern int dm9000_initialize(bd_t * bd);#ifdef CONFIG_DRIVER_DM9000int board_eth_init(bd_t *bis){return dm9000_initialize(bis);}#endif3、在include/configs/mao2440.h中注释CS8900的代码,如下:(62行)#if 0#define CONFIG_DRIVER_CS8900 1/* we have a CS8900 on-board */#define CS8900_BASE 0x19000300#define CS8900_BUS16 1 /* the Linux driver does accesses as shorts */#end if并添加DM9000的宏, 由上图知DM9000在BANK4上,所以定义为0x20000300如下:#define CONFIG_DRIVER_DM9000 1#define CONFIG_DM9000_BASE 0x20000300#define DM9000_IO CONFIG_DM9000_BASE#define DM9000_DATA (CONFIG_DM9000_BASE+4)#define CONFIG_DM9000_USE_16BIT 1#define CONFIG_NET_MULTI 14、网上说要修改dm9000x.c的eth_init(bd_t * bd)的内容,此步我的板不用eth_init(bd_t * bd){.............../* Set Node address *//*for (i = 0; i < 6; i++)((u16 *) bd->bi_enetaddr)[i] = read_srom_word(i);*/char *tmp = getenv ("ethaddr");char *end;for (i=0; i<6; i++) {bd->bi_enetaddr[i] = tmp ? simple_strtoul(tmp, &end, 16) : 0;if (tmp)tmp = (*end) ? end+1 : end;}……………….#if 0i = 0;…………#endifreturn 0;}红色的字符是要做的修改:功能是屏蔽原有获取MAC地址的语句,替换成从U-Boot的参数区读取数据并存到bd->bi_enetaddr[i]中功能是屏蔽无用的语句。
bootloader简介
bootloader 简介1.1 Bootloader移植的必要性Bootloader是与系统硬件环境高度相关的初始化软件,它担负着初始化硬件和引导操作系统的双重责任。
一些ARM平台可以共用同一种Bootloader,但是总的说来,每一个特定系统的Bootloader都会有所不同。
Bootloader广泛用于有操作系统的手持终端设备、智能家电及机顶盒等嵌入式设备上,它负责完成硬件初始化、操作系统引导和系统配制等。
Bootloader 移植是在特定硬件平台上操作系统移植至关重要的一步。
1.2 BootLoader所支持的CPU和嵌入式系统板每种不同的CPU体系结构都有不同的BootLoader。
有些BootLoader也支持多种体系结构的CPU,比如U-BOOT就同时支持ARM、MIPS、POWERPC等体系结构。
除了依赖于CPU 的体系结构外,BootLoader实际上也依赖于具体的嵌入式板级设备的配置。
也就是说,对于两块不同的嵌入式板而言,即使它们是基于同一种CPU而构建的,要想让运行在一块板子上的BootLoader程序也能运行在另一块板子上,通常也都需要修改BootLoader的源程序。
1.3. Boot Loader的烧录和存储系统加电或复位后,所有的CPU通常都从某个由CPU制造商预先安排的地址上取指令。
比如,at91rm9200的CPU在复位时通常都从地址0x00000000取它的第一条指令。
这个地址依据特定的CPU而定。
通常片外启动时,基于CPU构建的嵌入式系统通常都有某种类型的固态存储设备(EEPROM或FLASH等,at91rm9200是0x10000000)被映射到这个预先安排的地址上。
因此在系统加电后,CPU将首先执行Boot Loader程序。
bootloader烧写到flash中,对于一个裸板有两种方式:(1)通过片内固化的loader加载bootloader:通常某些CPU内部ROM中固化了一段程序可以用于最初的程序下载,如A T91RM9200。
UBoot移植详解
u-boot 移植步骤详解1 U-Boot简介U-Boot,全称Universal Boot Loader,是遵循GPL条款的开放源码项目。
从FADSROM、8xxROM、PPCBOOT逐步发展演化而来。
其源码目录、编译形式与Linux内核很相似,事实上,不少U-Boot源码就是相应的Linux内核源程序的简化,尤其是一些设备的驱动程序,这从U-Boot源码的注释中能体现这一点。
但是U-Boot不仅仅支持嵌入式Linux系统的引导,当前,它还支持NetBSD, VxWorks, QNX, RTEMS, ARTOS, LynxOS嵌入式操作系统。
其目前要支持的目标操作系统是OpenBSD, NetBSD, FreeBSD,4.4BSD, Linux, SVR4, Esix, Solaris, Irix, SCO, Dell, NCR, VxWorks, LynxOS, pSOS, QNX, RTEMS, ARTOS。
这是U-Boot中Universal的一层含义,另外一层含义则是U-Boot除了支持PowerPC系列的处理器外,还能支持MIPS、x86、ARM、NIOS、XScale等诸多常用系列的处理器。
这两个特点正是U-Boot项目的开发目标,即支持尽可能多的嵌入式处理器和嵌入式操作系统。
就目前来看,U-Boot对PowerPC系列处理器支持最为丰富,对Linux的支持最完善。
其它系列的处理器和操作系统基本是在2002年11 月PPCBOOT 改名为U-Boot后逐步扩充的。
从PPCBOOT向U-Boot的顺利过渡,很大程度上归功于U-Boot的维护人德国DENX软件工程中心Wolfgang Denk[以下简称W.D]本人精湛专业水平和持着不懈的努力。
当前,U-Boot项目正在他的领军之下,众多有志于开放源码BOOT LOADER移植工作的嵌入式开发人员正如火如荼地将各个不同系列嵌入式处理器的移植工作不断展开和深入,以支持更多的嵌入式操作系统的装载与引导。
bootloader学习笔记
Bootloader学习笔记一.what is bootloader?Bootloader是一种独立的程序,类似于Application程序,尽管体积小,但具备启动代码、中断、主程序(Boot_main函数)和操作系统(可选)等“全部五脏”。
百度百科的词条解释:Bootloader是在加电后执行的第一段代码,完成CPU及相关硬件的初始化后,将操作系统映像或固化的嵌入式应用程序装载到内存,并跳转到操作系统空间启动运行。
下面是学习bootloader的系统路线:1.了解bootloader的定义:Bootloader是嵌入式系统在启动时执行的第一段代码,它完成硬件初始化,加载操作系统或固件。
2.掌握bootloader的工作原理:当系统开机时,CPU执行的是bootloader的代码,它读取存储设备(如硬盘,U盘,SD卡等)中的操作系统镜像或固件,加载到内存中,并进行跳转。
3.了解常见的bootloader的类型:如U-Boot,Grub等,并了解它们的特点和适用场景。
4.学习bootloader的开发:包括硬件初始化,文件系统的读取,代码的跳转等。
5.掌握bootloader的应用:比如系统升级,系统恢复等。
二.为什么需要bootloader?Bootloader是用于启动操作系统的引导程序,它是计算机启动过程中的第一个执行的程序。
需要Bootloader的原因有以下几点:1.引导操作系统:Bootloader负责读取和加载操作系统,并将控制权转交给操作系统。
2.进行硬件初始化:Bootloader初始化计算机硬件,确保操作系统能够正确识别和使用硬件。
3.提供系统恢复选项:Bootloader可以提供系统恢复选项,例如进入安全模式或恢复到原始配置。
4.实现多操作系统启动:Bootloader可以用于启动多个操作系统,例如通过引导菜单选择启动Windows或Linux操作系统。
因此,Bootloader是计算机启动过程中不可或缺的一部分,它起到了重要的辅助作用。
2014计算机三级考试嵌入式系统开发技术上机试题及答案1
2014计算机三级考试嵌入式系统开发技术上机试题及答案11.选择题1.以下哪个不是嵌入式系统的设计的三个阶段之一:(A)A 分析B 设计C 实现D 测试2.以下哪个不是RISC架构的ARM微处理器的一般特点:(C )A 体积小、低功耗B 大量使用寄存器C采用可变长度的指令格式,灵活高效D 寻址方式灵活简3.通常所讲的交叉编译就是在X86架构的宿主机上生成适用于ARM架构的( A )格式的可执行代码。
A elfB exeC peD sh4.下面不属于Boot Loader 阶段1所完成的步骤的是:( C )A . 硬件设备初始化。
B . 拷贝Boot Loader的阶段2到RAM空间中。
C . 将kernel映像和根文件系统映像从Flash读到RAM空间中。
D . 设置堆栈。
5. 以下哪个不是ARM的7种运行状态之一:( B)A快中断状态B挂起状态C中断状态D无定义状态6. 用以下的哪个命令可以把server的/tmp mount 到 client的/mnt/tmp 并且是( A)A .mount -o ro server:/tmp /mnt/tmpB. mount -o ro /mnt/tmp server:/tmpC .mount -o ro client:/mnt/tmp server:/tmpD.mount -o ro server:/tmp client:/mnt/tmp7. 以下哪个GUI是由中国人主持的一个自由软件项目:(A )A MinuGUIB OpenGUIC MicroWindowsD Qt/Embedded8. 在下面的叙述中,( D )不是嵌入式图形用户接口(GUI)的主要特点。
A运行时占用的系统资源少B. 模块化结构,便于移植和定制C. 可靠性高D. 美观华丽,图形算法复杂9. 以下叙述中,不符合 RISC 指令系统特点的是( B )。
A. 指令长度固定,指令种类少B. 寻址方式种类丰富,指令功能尽量增强C. 设置大量通用寄存器,访问存储器指令简单D. 选取使用频率较高的一些简单指令10. 通常所说的 32 位微处理器是指( C )。
第6章bootloader
6.1.2 Bootloader的启动
1.网络启动方式 这种方式开发板不需要配置较大的存储介质,跟无
盘工作站有点类似。但是使用这种启动方式之前 ,需要把Bootloader安装到板上的EPROM或者 Flash中。Bootloader通过以太网接口远程下载 Linux内核映像或者文件系统。 2.磁盘启动方式 3.Flash启动方式
6.4.2 U-Boot的常用命令
help命令 bootp命令
crc32命令 echo命令
go命令
iminfo命令
mw命令
nfs命令
nm命令
printenv命令
protect命令
rarboot命令
run命令
setenv命令
sleep命令
tftpboot命令
cmp命令 erase命令 loadb命令
6.3.1 硬件调试器
使用BDI2000调试U-boot的方法如下。 (1)配置BDI2000和目标板初始化程序,连接目标
板。 (2)添加U-Boot的调试编译选项,重新编译 (3)下载U-Boot到目标板内存。 (4)启动GDB调试。
6.3.2 软件跟踪
假如U-Boot没有任何串口打印信息,手头又没有硬 件调试工具,那样怎么知道U-Boot执行到什么地 方了呢?可以通过开发板上的LED指示灯判断。
6.1 Bootloader
对于计算机系统来说,从开机上电到操作系统启动 需要一个引导过程。嵌入式Linux系统同样离不开 引导程序,这个引导程序就叫作Bootloader。
6.1.1 Bootloader介绍
Bootloader是在操作系统运行之前执行的一段小程序 。通过这段小程序,我们可以初始化硬件设备、 建立内存空间的映射表,从而建立适当的系统软 硬件环境,为最终调用操作系统内核做好准备。
1、bootloader概述
2、第十三讲bootloader的原理和vivi的移植
有以下几个内容:1、bootloader概述 2、vivi的启动过程分析 3、vivi的配置移植 4、vivi命令详解一个嵌入式Linux系统从软件的角度看通常分为4个层次:1、bootloader 2、Linux内核 3、文件系统 4、用户应用程序 bootloader是系统上电后执行的第一个程序,它用来初始化硬件,引导操作系统,也就是加载Linux内核,让系统跑起来,然后要挂载文件系统,这个用来管理操作系统硬件和应用程序,最后我们要实现特定的应用程序就是用户应用程序,那这些就涵盖了我们后面要讲的所有内容,这个图表示的是Flash设备上的磁盘分区,首先是bootloader,boot Parameters分区是系统的启动参数,它可以存放bootloader向内核kernel传递的命令行参数等等,然后是linux内核kernel、文件系统
1、第五部分嵌入式系统移植之Bootloader
从这一讲开始后面讲的都是和嵌入式操作系统相关的,也都是软件层面的,我们不用关心具体的硬件,因为我们的开发板已经做好了完善的硬件平台,我们现在要做的就是在这个硬件平台上跑操作系统,运行应用程序,所以现在大家要转变一下思想,不能像以前学习单片机那样纯粹的操作硬件,一定要把重点放在嵌入式操作系统和应用程序的开发上,不要以为操作系统对你来说不重要,如果给你台电脑,上面没有操作系统,只有一些硬件程序,那你会用吗,嵌入式也是一样,操作系统是它的核心,嵌入式的操作系统不像在PC机上安装Windows那样简单,是通过一点一点的配置、修改移植过来的,嵌入式移植有三部分,这一部分主要讲解bootloader
4、bootloader的操作模式
大多数bootloader都包含两种不同的操作模式,即启动加载模式和下载模式,二者的区别仅对开发人员才有意义,从最终用户的角度看,bootloader的作用就是加载操作系统,这就像我们使用的uboot一样,在开发板上电时会先运行uboot,那如果在几秒钟内,我在串口终端里按下了空格键,那么就会进入下载模式,我们可以下载内核和文件系统,或做一些其它的事,但这些都是我们开发人员需要做的,那用户需要用的是一个产品,是我们已经开发好的,就不需要用下载的功能,他们只需要系统上电后自动运行操作系统和应用程序,那也就是启动加载模式,通常bootloader对于硬件的依赖性非常强,建立一个通用的bootloader几乎是不可能的,它除了依赖于CPU的体系结构外,还依赖于嵌入式的硬件配置,所以不可能有一个bootloader支持所有的CPU和电路板
Bootloader过程简介
Bootloader过程简介1. 引言在计算机系统中,操作系统的启动过程是一个复杂而重要的过程。
在操作系统启动之前,计算机系统首先要执行一个称为Bootloader的程序。
Bootloader是一个小型的程序,负责加载操作系统并进行必要的准备工作。
在本文档中,我们将对Bootloader的过程进行简要介绍,包括其定义、功能和执行过程。
我们将使用Markdown格式来展示文档内容。
2. Bootloader的定义Bootloader是计算机系统引导的第一个程序。
它位于计算机内存的一个固定位置,通常是硬盘的引导扇区〔MBR〕或UEFI固件中的引导管理器。
3. Bootloader的功能Bootloader的主要功能可以归纳为以下几个方面:•硬件初始化:Bootloader负责初始化计算机的硬件,包括处理器、内存、外设等。
它会设置必要的存放器和内存映射表,以确保后续的操作系统可以正常运行。
•选择和加载操作系统:Bootloader通常会提供一个菜单或配置文件,供用户选择要启动的操作系统。
根据用户选择的操作系统,Bootloader会从硬盘或网络中加载相应的操作系统文件,并将控制权转交给操作系统。
•引导扩展程序:一些Bootloader还支持引导扩展程序。
它们可以加载和执行额外的程序,如驱动程序、启动菜单等。
这些扩展程序可以提供额外的功能和灵巧性。
•错误处理和恢复:Bootloader还负责错误处理和恢复机制。
如果在硬件初始化或操作系统加载过程中出现错误,Bootloader将负责处理错误,并显示相应的错误信息。
在某些情况下,Bootloader还可以提供恢复选项,例如从备份引导扇区或其他设备启动。
4. Bootloader的执行过程Bootloader的执行过程可以大致分为以下几个步骤:1.BIOS或UEFI固件启动:计算机加电后,首先执行BIOS或UEFI固件,这局部固件中包含了Bootloader的位置和初始化代码。
一步步教你移植uboot(超精华版)
#make gec2440_config #make 编译完成时最后两句如下:
arm-linux-objcopy -O srec u-boot u-boot.srec arm-linux-objcopy --gap-fill=0xff -O binary u-boot u-boot.bin 表示编译成功。
# if defined(CONFIG_S3C2410)
ldr r1, =0x7ff //0x3ff,根据 2410 芯片手册,INTSUBMSK 有 11 位可用,vivi 也是 0x7ff, u-boot 则是 0x3ff,不过芯片复位后所有中断都被屏蔽,故这无影响
ldr r0, =INTSUBMSK
>> 2
广州广嵌电子科技有限公司
u-boot移植要点 我们可以总结出bootloader的两大功能:
1 是下载功能,既通过网口、串口或者USB口下载文件到RAM中。 2 是对flash芯片的读写功能。 u-boot对S3C2440已经有了很好的支持,在移植过程中主要是完善u-boot对nand flash 的读写功能。 u-boot移植前的准备工作 1.下载源码 Uboot的源码可以从以下网址下载: /u-boot/u-boot-2009.11.tar.bz2?modtime=1134 752480&big_mirror=0 我们这里下载的是u-boot-2009.11.tar.bz2 工具链使用cross-4.1.2
samsung: 开发者/或经销商(vender)。
s3c24x0: 片上系统(SOC)。 板子起名叫gec2440,可以依自己的喜好修改
基于MPC5125的U-BOOT移植方法
基于MPC5125的U-BOOT移植方法摘要:本文介绍了U-BOOT在FREESCALE的嵌入式CPU芯片MPC5125上的移植方法。
通过分析U-BOOT的使用方法、运行机理以及源码架构,给出了U-BOOT在MPC5125上的移植方法和步骤。
应用结果表明,移植后的U-BOOT在目标板上稳定运行,能加载Linux内核和根文件系统。
关键词:U-BOOT;MPC5125;内核;移植1引言U-BOOT[1]是一种开源的BOOTLOADER,由德国DENX小组开发。
BOOTLOADER是在操作系统内核运行之前运行的一段小程序。
这段程序完成硬件的初始化和建立内存空间的映射图等重要工作,为内核的启动创建正确的环境,并最终启动内核[2]。
因此,U-BOOT的主体功能包括三个方面,一是初始化硬件,为启动操作系统提供合适的硬件环境;二是解释执行用户的命令,这既包括在与用户的交互中解释执行的用户指令,也包括UBOOT自动启动时执行的命令;三是启动操作系统。
U-BOOT提供了多个命令给用户使用。
通过这些命令可以查看目标系统的信息、设置环境变量等。
通过在U-BOOT的命令行中输入help可以查看所有支持的命令。
本文将这些命令分为六大类,分别是信息查询命令、内存控制命令、FLASH操作命令和运行控制命令、数据下载命令和环境变量设置命令。
本文基于FREESCALE的POWERPC核的嵌入式处理器MPC5125和U-BOOT源码资源,通过分析U-BOOT的源码架构以及启动操作系统的机理,得出在MPC5125上移植U-BOOT的方法,最后详细介绍了移植U-BOOT的操作步骤。
2 U-BOOT的源码分析2.1 U-BOOT的命令U-BOOT命令包括信息查询命令、内存控制命令、FLASH操作命令和运行控制命令、数据下载命令和环境变量设置命令[3]。
信息查询命令包括bdinfo、coninfo、flinfo、iminfo和help。
bdinfo用于打印板子信息,包括内存地址、时钟频率、MAC地址等,这些板级信息最终将传递给内核。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
简单地说,Boot Loader 就是在操作系统内核运行之前运行 的一段小程序。通过这段小程序,我们可以初始化硬件设备 、建立内存空间的映射图,从而将系统的软硬件环境带到一 个合适的状态,以便为最终调用操作系统内核准备好正确的 环境。
通常,Boot Loader 是严重地依赖于硬件而实现的,特别是 在嵌入式世界。因此,在嵌入式世界里建立一个通用的 Boot Loader 几乎是不可能的。尽管如此,我们仍然可以对 Boot Loader 归纳出一些通用的概念来,以指导用户特定的 Boot Loader 设计与实现。
TM
西南林学院计算机系 贺金平
19
19
2、stage2阶段(续)
(3)、将kernel和根文件系统映像从flash上读到RAM空间中 。 •由于像 ARM 这样的嵌入式 CPU 通常都是在统一的内存地 址空间中寻址 Flash 等固态存储设备的,因此从 Flash 上 读取数据与从 RAM 单元中读取数据并没有什么不同。这一 步骤包括两部分内容:规划kernel和根文件系统所占用的内 存范围和将它们从flash上进行拷贝。
TM
12
12
2、下载(Downloading)模式
像RedBoot或U-Boot等功能强大的Bootloader通常都可同 时支持这两种工作模式,而且允许用户在这两种工作模式之 间进行切换。 比如,RedBoot在启动时处于正常的启动加载模式,但是 它会延时3秒等待终端用户按下任意键而将RedBoot切换到 下载模式。如在等待时间内没有接收到用户按键,则继续启 动 Linux 内核。
西南林学院计算机系 贺金平
TM
20
20
2、stage2阶段(续)
(4)、为kernel设置启动参数。 •这是在调用内核之前应该做的准备工作。Linux 2.4.x 以后 的内核都期望以标记列表(tagged list)的形式来传递启动参 数。启动参数标记列表以标记 ATAG_CORE 开始,以标记 ATAG_NONE 结束。在嵌入式 Linux 系统中,通常需要由 Boot Loader 设置的常见启动参数有:ATAG_CORE、 ATAG_MEM(内存映射)、ATAG_NONE等。
启动加载模式称为“自举”(Autonomous)模式 。即Bootloader从目标机上的某个固态存储设备上 将操作系统加载到 RAM 中运行,整个过程并没有 用户的介入。 启动加载模式是 Bootloader的正常工作模式,在 嵌入式产品发布的时侯,Bootloader必须工作在这 种模式下。
西南林学院计算机系 贺金平
TM
18
18
2、stage2阶段(续)
(2)、检测系统内存映射(memory map)。 •所谓内存映射就是指在整个物理地址空间中有哪些地址范 围被分配用来作为寻址系统的 RAM 单元。虽然 CPU 通常 预留出一大段足够的地址空间给系统 RAM,但是在搭建具 体的嵌入式系统时却不一定会实现 CPU 预留的全部 RAM 地址空间。也就是说,具体的嵌入式系统往往只把 CPU 预 留的全部 RAM 地址空间中的一部分映射到 RAM 单元上, 而让剩下的那部分预留 RAM 地址空间处于未使用状态。 • 基于上述这个事实,因此 Boot Loader 的 stage2 必须在 它想干点什么 (比如,将存储在 flash 上的内核映像读到 RAM 空间中) 之前检测整个系统的内存映射情况,也即它 必须知道 CPU 预留的全部 RAM 地址空间中的哪些被真正 映射到 RAM 地址单元,哪些是处于 "unused" 状态的。
西南林学院计算机系 贺金平
TM
13
13
5.1.4 Bootloader的启动流程
Bootloader的启动通常可以分为stage1和stage2 两个阶段。
西南林学院计算机系 贺金平
TM
14
14
1、stage1阶段
stage1主要包含依赖于CPU的体系结构,比如设备初始化 代码等。通常都用汇编语言来实现。这个阶段的任务有:
西南林学院计算机系 贺金平
TM
6
6
Boot Loader 的安装媒介 (Installation Medium)
系统加电或复位后,所有的 CPU 通常都从某个由 CPU 制造商预先安排的地址 上取指令。比如,基于 ARM7TDMI core 的 CPU 在复位时通常都从地址 0x00000000 取它的第一条指令。而基于 CPU 构建的嵌入式系统通常都有某种 类型的固态存储设备(比如:ROM、EEPROM 或 FLASH 等)被映射到这个预先 安排的地址上。因此在系统加电后,CPU 将首先执行 Boot Loader 程序。 下图就是一个同时装有 Boot Loader、内核的启动参数、内核映像和根文件系 统映像的固态存储设备的典型空间分配结构图。
大多数Bootloader都包含两种不同的操作模式:“ 启动加载”模式和“下载”模式,这种区别仅对于 开发人员才有意义。 •从最终用户的角度看,Bootloader的作用就是用 来加载操作系统,而并不存在所谓的启动加载模式 与下载工作模式的区别。
西南林学院计算机系 贺金平
TM
10
10
1、启动加载(Bootloading)模式
西南林学院计算机系 贺金平
TM
21
21
2、stage2阶段(续)
(5)、调用内核。
•Bootloader调用Linux kernel的方法是直接跳转到内核的 第一条指令处。在跳转时必须满足下列条件。
Bootloader通常固化在硬件上某个固态存储设备上 ,加电后自启动。 通过Bootloader这段代码,我们可以初始化硬件设 备、建立内存空间的映射图,从而将系统的软硬件 环境带到一个合适的状态,以便为最终调用操作系 统内核准备好正确的环境。
西南林学院计算机系 贺金平
TM
5
5
Bootloader介绍
第五章 bootloader移植
TM 版权所有 西南林学院计算机系 贺金平
1
主要内容
5.1 Bootloader
5.1.1 Bootloader介绍 5.1.2 Bootloader的种类 5.1.3 Bootloader的操作模式 5.1.4 Bootloader的启动流程 5.1.5 BootLoader 与主机之间的通信协议 5.1.6 关于串口
TM
西南林学院计算机系 贺金平
15
15
1、stage1阶段(续)
(2)、为stage2准备包括RAM空间。 •为了获得更快的执行速度,通常把 stage2 加载到 RAM 空 间中来执行,因此必须为加载 Boot Loader 的 stage2 准备 好一段可用的 RAM 空间范围。 •由于stage2通常是C语言执行代码,因此在考虑空间大小 时,除了stage2可执行映像的大小外,还必须把堆栈空间 也考虑进来。此外,空间大小最好是 memory page 大小( 通常是4KB)的倍数。一般而言,1M的RAM空间已经足够了 。具体的地址范围可以任意安排,但是,将stage2安排到 整个RAM空间的最顶1M是一种值得推荐的方法。此外,还 必须确保所安排的地址范围确实是可读写的RAM空间。
西南林学院计算机系 贺金平
TM
16
16
1、stage1阶段(续)
•为了后面的叙述方便,这里把RAM 空间范围的大小记为: stage2_size(字节),把起始地址和终止地址分别记为: stage2_start 和 stage2_end(这两个地址均以 4 字节边界 对齐)。因此,stage2_end=stage2_start+stage2_size 。 (3)、拷贝stage2到RAM空间。 •(4)、设置好堆栈。 •堆栈指针的设置是为了执行 C 语言代码作好准备。通常我 们可以把 sp 的值设置为(stage2_end-4),也即前面所提到 的1MB 的 RAM 空间的最顶端(堆栈向下生长)。 •(5)、跳转到stage2的C入口点。 在上述一切都就绪后,就可以跳转到 Boot Loader 的 stage2 去执行了。
•(1)、基本的硬件设备初始化。
•这是 Boot Loader 一开始就执行的操作,其目的是为 stage2 的执行以及随后kernel 的执行准备好一些基本的硬 件环境。 它通常包括以下步骤:屏蔽所有的中断(为中断提供服务通 常是操作系统设备驱动程序的责任,因此在Bootloader 的 执行全过程中可以不必响应任何中断。)、设置 CPU 的速 度和时钟频率、关闭处理器内部指令/数据cache(通常使用 内部指令和cache可以提高系统性能,但由于cache的使用 可能改变访问主存的数量、类型和时间,因此Bootloader 的执行通常不需要。)等。
西南林学院计算机系 贺金平
TM
11
11
2、下载(Downloading)模式
在这种模式下,目标机上的Bootloader将通过串口连接或 网络连接等通信手段从主机上下载文件。
比如:下载内核映像和根文件系统映像等。从主机下载的文 件通常首先被Bootloader保存到目标机的RAM中,然后再 被 Bootloader写到目标机上的FLASH 类固态存储设备中。
3、U-Boot
U-Boot(Universal Bootloader)是一款目前功能较为强 大的开源Bootloader程序,它支持多种处理器平台,包括 ARM、MIPS等。
西南林学院计算机系 贺金平
TM
8
8
其他Bootloader