bootloader移植

合集下载

BSP移植

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的作用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

认识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移植及文件系统烧写

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

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移植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简介

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移植详解

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移植工作的嵌入式开发人员正如火如荼地将各个不同系列嵌入式处理器的移植工作不断展开和深入,以支持更多的嵌入式操作系统的装载与引导。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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
相关文档
最新文档