BootLoader引导程序.docx

上传人:b****5 文档编号:7430972 上传时间:2023-01-23 格式:DOCX 页数:12 大小:421.64KB
下载 相关 举报
BootLoader引导程序.docx_第1页
第1页 / 共12页
BootLoader引导程序.docx_第2页
第2页 / 共12页
BootLoader引导程序.docx_第3页
第3页 / 共12页
BootLoader引导程序.docx_第4页
第4页 / 共12页
BootLoader引导程序.docx_第5页
第5页 / 共12页
点击查看更多>>
下载资源
资源描述

BootLoader引导程序.docx

《BootLoader引导程序.docx》由会员分享,可在线阅读,更多相关《BootLoader引导程序.docx(12页珍藏版)》请在冰豆网上搜索。

BootLoader引导程序.docx

BootLoader引导程序

BootLoader引导程序

一、实验目的

1.学会配置linux下的minicom和windows下的超级终端

2.了解bootloader的基本概念和框架结构

3.了解bootloader引导操作系统的过程

4.掌握bootloader程序的编译方法

5.掌握bootloader程序的使用方法

二、实验内容

1.学习x-loader作用和编译过程

2.学习uboot作用和编译过程

3.学习bootloader的操作

三、实验设备

PentiumII以上的PC机,LINUX操作系统

四、BOOTLOADER程序说明

完整的系统由x-loader、u-boot、kernel(内核)、rootfs(根文件系统)组成,x-loader是一级引导程序,其作用是初始化CPU,拷贝u-boot到内存,然后把控制权交给u-boot。

当OMAP3530上电时,memorycontroller(内存控制器)还未初始化,这个任务便由完成的x-loader。

初始化外部RAM控制器,把u-boot读到外部RAM,之后把控制入口交给。

u-boot是二级引导程序,其作用主要是引导内核,提供映像更新,同用户进行交互。

系统结构图如下:

1.BootLoader的作用

在嵌入式系统中,BootLoader的作用与PC机上的BIOS类似,其主要作用:

(1)初始化硬件设备;

(2)建立内存空间的映射图;(3)完成内核的加载,为内核设置启动参数。

通过BootLoader可以完成对系统板上的主要部件如CPU、SDRAM、Flash、串行口等进行初始化,也可以下载文件到系统板上,对Flash进行擦除与编程。

当运行操作系统时,它会在操作系统内核运行之前运行,通过它,可以分配内存空间的映射,从而将系统的软硬件环境带到一个合适的状态,以便为最终调用操作系统准备好正确的环境。

通常,BootLoader是依赖于硬件而实现的,特别是在嵌入式系统中。

因此,在嵌入式系统里建立一个通用的BootLoader几乎是不可能的,不同的处理器架构都有不同的BootLoader。

BootLoader不但依赖于CPU的体系结构,而且依赖于嵌入式系统板级设备的配置。

对于2块不同的嵌入式板而言,即使它们使用同一种处理器,要想让运行在一块板子上的BootLoader程序也能运行在另一块板子上,一般也都需要修改BootLoader的源程序。

正如前面所述,BootLoader是在操作系统内核运行之前运行的一段小程序。

通过这段小程序,我们可以初始化硬件设备,从而将系统的软硬件环境带到一个合适的状态,以便为最终调用操作系统内核准备好正确的环境,最后从别处(Flash、以太网、UART)载入内核映像并跳到入口地址。

但是,仍然可以对BootLoader归纳出一些通用的概念来,以指导用户特定的BootLoader设计与实现。

通常,它们都能够自动从存储介质上启动,都能够引导操作系统,并且大部分都可以支持串口和以太网接口。

因此,正确建立linux的移植的前提条件是具备一个与linux配套、易于使用的Bootloader,它能够正确完成硬件系统的初始化和linux的引导。

为能够实现正确引导linux系统的运行,以及当编译完内核后,快速的下载内核和文件系统,uboot通过网口下载内核和文件系统。

同时,它也具有功能较为完善的命令集,对系统的软硬件资源进行合理的配置与管理。

2.BootLoader程序结构框架

 嵌入式系统中的bootLoader的实现完全依赖于CPU的体系结构,因此大多数BootLoader都分为第一阶段和第二阶段两大部分,依赖于CPU体系结构的代码,比如设备初始化代码等,通常都放在阶段1中,而且通常都用汇编语言来实现,以达到短小精悍的目的。

而阶段2则通常用C语言来实现,这样可以实现一些复杂的功能,而且代码会具有更好的可读性和可移植性。

uboot是功能最多、灵活性最强并且开发最积极的开放源码的bootLoader。

下载得到uboot的源码包,解压就可以得到全部uboot源程序。

在顶层目录下有18个子目录,分别存放和管理不同的源程序。

这些目录中所要存放的文件有一定的规则,可以分为3类。

a)第1类目录与处理器体系结构或者开发板硬件直接相关。

b)第2类目录是一些通用的函数或者驱动程序。

c)第3类目录是uboot的应用程序、工具或者文档。

其各级目录的存放在原则如下表所示:

特性

解释说明

board

平台依赖

存放电路板相关的目录文件

cpu

平台依赖

存入CPU相关的目录文件

lib_ppc

平台依赖

存放对PowerPC体系结构通用的文件,主要用于实现PowerPC平台通用的函数

lib_arm

平台依赖

存放对ARM体系结构通用的文件,主要用于实现ARM平台通用的函数

lib_i386

平台依赖

存放对X86体系结构通用的文件,主要用于实现X86平台通用的函数

include

通用

头文件和开发板配置文件,所有开发板配置文件都在configs目录下

common

通用

通用的多功能函数实现

lib_generic

通用

通用库函数的实现

net

通用

存放网络的程序

fs

通用

存放文件系统的程序

post

通用

存放上电自检程序

drivera

通用

通用的设备驱动程序,主要有以太网接口的驱动

disk

通用

硬盘接口程序

rtc

通用

TRC的驱动程序

dtt

通用

数了温度测量器或者传感器的驱动

examples

应用例程

一些独立运行的应用程序的例子

tools

工具

存放制作s-record或者uboot格式的映像等工具

doc

文档

开发使用文档

3、bootLoader程序架构分析

bootLoader本质上也是一个程序,也需要通过交叉编译工具生成控制性二进制代码。

但是bootLoader和一般C语言程序存在区别。

在Linux操作系统中,一般的c语言可执行程序是依赖于操作系统的。

可执行程序本身的格式一般不是纯粹的二进制代码,而是包含一些头信息的二进制代码(如ELF格式nux通过文件的头信息运行程序。

一般应用程序中还可能使用C语言基础函数的库,这个库以文件的形式放在linux的文件系统中。

而bootLoader是不依赖操作系统的。

相反,linux内核是由bootloader调用的,从这个角度上看,Linux内核是作为bootloader的一个“应用程序”在执行。

因此,在bootloader中不能依赖于任何环境,包括C语言的函数库。

Bootloader中所有的功能,都需要在其本身的代码中包含。

此外,bootloader编译-链接的结果将是一个目标机的纯二进制代码文件,直接在系统的初始化地址处运行。

由于BootLoader的实现依赖与CPU的体系结构,因此大多数的BootLoader都分为stage1和stage2两个阶段:

(1)、BootLoader的stage1通常主要包括以下步骤:

a)硬件设备初始化;

b)代码重定位,为加载BootLoader的stage2准备RAM空间;

c)加载bootloaderr第二阶段代码到RAM空间;

d)设置堆栈跳转到第二阶段代码入口。

(2)、BootLoader的stage2通常主要包括以下步骤:

a)初始化本阶段要使用到的硬件设备;

b)系统内存映射(memorymap);

c)将kernel映像和根文件系统映像从Flash读到RAM空间中;

d)为内核设置启动参数;

e)调用内核。

4.omap3530中各个引导程序的特征及作用分析

1)、x-loader是一级引导程序,系统上电后由CPU内部ROM自动拷贝内部RAM并执行。

主要作用为初始化CPU,拷贝U-BOOT到内存中,然后把控制权交给U-BOOT(补充x-load源码分析)。

2)、uboot是二级引导程序,主要用于和用户进行交互,提供映像更新,引导内核等功能。

5、bootloader移植

1)u-boot烧写

Uboot能够支持多种体系结构的处理器,支持的开发板也越来越多。

因此bootloader完全依赖硬件平台的,所以在新电路板上需要移植uboot程序。

开始移植uboot之前熟悉硬件电路板和处理器。

确认uboot是否已经支持新开发板的处理器和i/o设备。

移植uboot工作就是添加开发板硬件相关的文件、配置选项,然后配置编译。

开妈移植之前,需要先分析一下uboot已经支持的开发板,比较出硬件配置最接近的开发板。

选择的原则是:

首先处理器相同,其次处理器体系结构相同,然后是以太网接口等外接口。

还要验证一下这个参考开发板的uboot,至少能够配置编译通过。

这里我们使用已经编译通过且和实验箱对应的uboot。

u-boot的烧写方法有好几种,这里介绍我们可能会用到的两种方法。

1、从UART3烧写u-boot的方法;2、对已经烧写好了u-boot的目标板进行u-boot更新的方法。

omap35xx大板上用mini-USB端子引出了两个UART接口,其中P9端子对应omap35xx的UART3,P3端子对应omap35xx的UART1。

说明:

Omap35xx可以从UART3启动。

如果需要利用此启动方式把把u-boot下载到目标板,需要使用公司提供的串口线把P9(UART3)和PC机串口连接起来。

UART1一般在调试中使用,调试时使用一根公司提供的串口线连接P3(UART1)和PC机。

烧写步骤:

1)、断电,设置omap3530CPU小板上的拨码开关SW1为:

SW1.1

SW1.2

SW1.3

SW1.4

SW1.5

SW1.6

OFF

OFF

ON

OFF

ON

OFF

2)、使用串口线一头连接板子的P9另一头连接PC机的串口1(串口号可以根据实际情况来更改)。

3)、打开超级终端,选择端口(和板子的P9端口相连的串口端口号,在这里是com1)

操作:

设置相应的参数如下,点确定打开:

4)、把光盘中,实验目录下的UartBootTool目录拷贝到电脑上,运行应用程序/UartBootTool/Utilities/DownloadUtility.exe如下图

在Transport栏选择使用的串口号(和板子的P9端口相连的串口端口号,在这里是com1)在File栏点击open,选择u-boot.bin文件(说明:

把事先在虚拟机linux操作系统中编译好的存放在/home/u-boot-1.3.3/目录下的u-boot.bin文件复制到windouws操作系统的某个位置)。

如下图:

点击Download按钮弹出下图所示的确定对话框。

如果提示不能下载是因为存在超级终端上两个按钮的切换。

5)、点击确定按钮,同时板子上电;

如果正常,会看到下载进度条在变动。

下载完后回弹出完成对话框。

6)、u-boot.bin下载完后会自动启动。

在刚才打开的超级终端中可以看到u-boot启动后的信息,提示不能显示是因为存在超级终端上两个按钮的切换。

如果是新板子,系统没有配置过,会自动停止在命令行位置(如上图);如果以前烧写过u-boot,由于在FLASH中有配置信息,将会继续启动,需要立即点击键盘使u-boot停下来。

2)添加uboot命令

uboot的命令为用户提供了交互功能,并且已经实现了几十个常用命令。

如果需要很特殊的操作,可以添加新的uboot命令。

uboot的每一个命令都是能U_Boot_CMD宏定义的。

这个宏在include/command.h头文件中定义,每一个命令定义一个cmd_tbl_t结构体。

3)uboot的常用命令

setenvipaddr192.168.3.157(板子IP,根据实际情况设)

setenvserverip192.168.3.166(虚拟机的IP,根据实际情况设)

setenvnetmask255.255.255.0

setenvbootdelay3

setenvethaddr00:

50:

c2:

7e:

8A:

1D

setenvgatewayip192.168.3.1(网关,根据实际情况设)

setenvbootargsconsole=ttyS2,115200n8ubi.mtd=4root=ubi0:

rootfsrootfstype=ubifsvideo=omapfb:

mode:

8inch_LCD

setenvbootcmdnandread.i80300000280000210000\;bootm80300000

saveenv(保存设置好的参数)

Printenv打印环境变量。

Uboot>printenv

baudrate=115200

ipaddr=192.168.1.1

ethaddr=12:

34:

56:

78:

9A:

BC

serverip=192.168.1.5

Environmentsize:

80/8188bytes

Setenv设置新的变量

Uboot>setenvmyboardAT91RM9200DK

Uboot>printenv

baudrate=115200

ipaddr=192.168.1.1

ethaddr=12:

34:

56:

78:

9A:

BC

serverip=192.168.1.5

myboard=AT91RM9200DK

Environmentsize:

102/8188bytes

Saveenv保存变量

命令将当前定义的所有的变量及其值存入flash中。

用来存储变量及其值的空间只有8k字节,应不要超过。

Loadb通过串口Kermit协议下载二进制数据。

Tftp通过网络下载程序,需要先设置好网络配置

Uboot>setenvethaddr12:

34:

56:

78:

9A:

BC

Uboot>setenvipaddr192.168.1.1

Uboot>setenvserverip192.168.1.254    (tftp服务器的地址)

下载bin文件到地址0x20000000处。

Uboot>tftp20000000application.bin(application.bin应位于tftp服务程序的目录)

Uboot>tftp32000000vmlinux

把server(IP=环境变量中设置的serverip)中/tftpboot/下的vmlinux通过TFTP读入到物理内存32000000处。

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 农林牧渔 > 林学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1