UBOOT基础知识.ppt

上传人:苏美尔 文档编号:9293501 上传时间:2021-02-16 格式:PPT 页数:71 大小:182KB
返回 下载 相关 举报
UBOOT基础知识.ppt_第1页
第1页 / 共71页
UBOOT基础知识.ppt_第2页
第2页 / 共71页
UBOOT基础知识.ppt_第3页
第3页 / 共71页
UBOOT基础知识.ppt_第4页
第4页 / 共71页
UBOOT基础知识.ppt_第5页
第5页 / 共71页
点击查看更多>>
资源描述

《UBOOT基础知识.ppt》由会员分享,可在线阅读,更多相关《UBOOT基础知识.ppt(71页珍藏版)》请在三一文库上搜索。

1、UBOOT,中 嵌 Teacher Xie,提 纲,理论: BootLoader介绍 Uboot介绍 Uboot命令 Uboot工作流程 Uboot移植 Uboot烧写 实验: 移植Uboot Uboot使用,第一节 BootLoader介绍,概念,什么是BootLoader?,软件层次,一个嵌入式系统从软件角度来看分为三个层次: 1. 引导加载程序 包括固化在固件(firmware)中的 boot 代码(可选),和 BootLoader 两大部分。 2. Linux 内核 特定于嵌入式平台的定制内核。 3. 文件系统 包括了系统命令和应用程序。,软件层次,一个同时装有 BootLoader、

2、内核的启动参数、内核映像和根文件系统映像的固态存储设备的典型空间分配结构图:,回忆PC,PC机中的引导加载程序由BIOS(其本质是一段固件程序)和位于硬盘MBR中的引导程序(GRUB或LILO)一起组成。BIOS在完成硬件检测和资源分配后,将硬盘中的引导程序读到系统内存中然后将控制权交给引导程序。引导程序的主要任务是将内核从硬盘上读到内存中,然后跳转到内核的入口点去运行,即启动操作系统。,定义,在嵌入式系统中,通常没有像BIOS那样的固件程序,因此整个系统的加载启动任务就完全由BootLoader来完成。比如在一个基于ARM7TDMIcore的嵌入式系统中,系统在上电或复位时都从地址0 x00

3、000000开始执行。而在这个地址处安排的通常就是系统的BootLoader程序。,定义,简单地说,BootLoader就是在操作系统运行之前运行的一段小程序。通过这段小程序,可以初始化硬件设备,从而将系统的软硬件环境带到一个合适的状态,以便为最终调用操作系统做好准备。,功能,BootLoader 的主要任务是初始化硬件(如:串口,内存),然后将内核映象从 Flash 中读到 RAM 中,然后跳转到内核的入口点去运行,也就是启动操作系统。,安装,系统加电或复位后,所有的CPU通常都从CPU制造商预先安排地址开始执行。比如,S3C2410在复位后从地址0 x00000000起开始执行。而嵌入式系

4、统则将固态存储设备(比如:FLASH)安排在这个地址上,而bootloader程序又安排在固态存储器的最前端,这样就能保证在系统加电后,CPU首先执行BootLoader程序。,移植,Q:什么叫bootloader移植? Q:为什么需要移植?,移植,每种不同的CPU体系结构都有不同的BootLoader。除了依赖于CPU的体系结构外,BootLoader 还依赖于具体的嵌入式板级设备的配置,比如板卡的硬件地址分配,外设芯片的类型等。这也就是说,对于两块不同的开发板而言,即使它们是基于同一种CPU而构建的,但如果他们的硬件资源或配置不一致的话,要想在一块开发板上运行的BootLoader程序也能

5、在另一块板子上运行,还是需要作修改。,流程,BootLoader 的启动过程可分为单阶段(Single-Stage)和多阶段(Multi-Stage)两种,通常多阶段的 BootLoader 具有更复杂的功能,更好的可移植性。从固态存储设备上启动的 BootLoader 大多采用两阶段,即启动过程可以分为 stage 1和 stage2:stage1完成初始化硬件,为stage2准备内存空间,并将stage2复制到内存中,设置堆栈,然后跳转到stage2。,流程,BootLoader 的 stage1 通常包括以下步骤: 硬件设备初始化 为加载 BootLoader 的 stage2 准备 R

6、AM 空间 拷贝 BootLoader 的 stage2 到 RAM 空间中 设置好堆栈(why?) 跳转到 stage2 的 C 入口点,流程,BootLoader 的 stage2 通常包括以下步骤: 初始化本阶段要使用到的硬件设备将内核映像和根文件系统映像从 flash 上读到 RAM 中 调用内核,内存分布,第二节 UBOOT介绍,作用,Uboot是德国DENX小组开发的用于多种嵌入式CPU( MIPS、x86、ARM、XScale等)的bootloader程序, UBoot不仅支持嵌入式Linux系统的引导,还支持VxWorks, QNX等多种嵌入式操作系统。,下载,从下面地址可以下

7、载到uboot的源代码:,目录树,进入到UBOOT目录,可以得到如下的目录结构: |board |common |cpu |disk |doc |drivers |dtt |examples |fs |include,目录树,|lib_arm |lib_generic |lib_i386 |lib_m68k |lib_microblaze |lib_mips |lib_nios |lib_nios2 |lib_ppc |net |post |rtc tools,目录结构(展示),Board 和开发板有关的文件。每一个开发板都以一个子目录出现在当前目录中,比如:SMDK2410,子目录中存放与开

8、发板相关的文件。 Common 实现Uboot支持的命令。 Cpu 与特定CPU架构相关的代码,每一款Uboot下支持的CPU在该目录下对应一个子目录,比如有子目录arm920t等。,Disk 对磁盘的支持。 Doc 文档目录。Uboot有非常完善的文档,推荐大家参考阅读。 Drivers Uboot支持的设备驱动程序都放在该目录,比如各种网卡、支持CFI的Flash、串口和USB等。,目录结构(展示),目录结构(展示),Fs 文件系统的支持。 Include Uboot使用的头文件。该目录下configs目录有与开发板相关的配置头文件,如smdk2410.h。该目录下的asm目录有与CPU体

9、系结构相关的头文件。,目录结构(展示),Net 与网络协议栈相关的代码,例如:TFTP协议、RARP协议的实现。 Tools 生成Uboot的工具,如:mkimage, crc等等。,编译,Uboot的Makefile从功能上可以分成两个部分: 1、执行每种board相关的配置 2、编译生成uboot.bin文件,编译(演示),Uboot.bin的生成也分为两步,以smdk2410为例来说明,如下: 1.对于board进行配置: $make smdk2410_config 2.进行编译生成u-boot.bin: $make CROSS_COMPILE=arm-linux-,第三节 UBOOT命

10、令,常用命令(演示),尽管UBOOT提供了丰富的命令集,但不同的单板所支持的命令并不一定一样(可配置,How?后面章节),help 命令可用于察看当前单板所支持的命令。 2410 # help autoscr -run script from memory base -print or set address offset bdinfo -print Board Info structure boot -boot default,i.e.,run bootcmd bootm -boot application image from memory bootp -boot image via ne

11、twork using BootP/TFTP protocol,环境变量相关(演示),Printenv 打印环境变量 usage:printenv - print values of all environment variablesprintenv name . - print value of environment variable name Uboot printenvbaudrate=115200ipaddr=192.168.1.1ethaddr=12:34:56:78:9A:BCserverip=192.168.1.5,环境变量相关(演示),Setenv 设置新的变量(修改已有变量

12、) setenv name value . - set environment variable name to value . setenv name - delete environment variable name Uboot setenv myboard AT91RM9200DKUboot printenv ethaddr=12:34:56:78:9A:BCserverip=192.168.1.5 myboard=AT91RM9200DK,环境变量相关(演示),Saveenv 保存变量 将当前定义的所有变量及其值存入flash中。,文件下载(演示),Tftp 通过网络下载文件 *使用

13、tftp,需要先配置好网络 Uboot setenv ethaddr 12:34:56:78:9A:BC Uboot setenv ipaddr 192.168.1.1 Uboot setenv serverip 192.168.1.254(tftp服务器的地址) 例: Uboot tftp 32000000 vmlinux把server(IP=环境变量中设置的serverip)中服务目录 下的vmlinux通过TFTP读入到0 x32000000处。,内存操作命令(演示),Md 显示内存区的内容。 md采用十六进制和ASCII码两种形式来显示存储单元的内容。 这条命令还可以采用长度标识符 .

14、l, .w和.b : md .b, .w, .l address md.w 100000 00100000: 2705 1956 5050 4342 6f6f 7420 312e 312e .VPPCBoot 1.1. 00100010: 3520 284d 6172 2032 3120 3230 3032 202d 5 (Mar 21 2002 - 00100020: 2031 393a 3535 3a30 3429 0000 0000 0000 19:55:04).,内存操作命令(演示),Mm 修改内存,地址自动递增。 mm .b, .w, .l address Mm 提供了一种互动修改存

15、储器内容的方法。它会显示地址和当前值,然后提示用户输入。如果你输入了一个合法的十六进制数,这个新的值将会被写入该地址。然后提示下一个地址。如果你没有输入任何值,只是按了一下回车,那么该地址的内容保持不变。如果想结束输入,则输入空格,然后回车。 = mm 100000 00100000: 27051956 ? 0 00100004: 50504342 ? AABBCCDD 00100008: 6f6f7420 ? 01234567,Flash操作命令(演示),Flinfo 查看Flash扇区信息 Usage:Uboot Flinfo,Flash操作命令(演示),Protect Flash写保护

16、打开或关闭扇区写保护 用法: protect off all 关闭所有扇区的写保护 protect on all 打开所有扇区的写保护 protect off start end 关闭从start 到 end 扇区的写保护(start为要关闭的第1个扇区的起始地址,end为要关闭的最后一个扇区的结束地址) protect on start end 打开从start 到 end 扇区的写保护,Flash操作命令(演示),Erase 擦除flash扇区 用法: erase start end 擦除从start 到 end 的扇区,start 为要擦除的第1个扇区的起始地址,end 为要擦除的最后一

17、个扇区的结束地址(在使用cp命令向Nor型Flash写入数据之前必须先使用erase 命令擦除flash,因为nor flash 按字节写入时,无法写入1,所以必须通过擦除来写入1)。 例:erase 30000 1effff 。,Flash操作命令(演示),Cp 数据拷贝。 Cp .b, .w, .l saddress daddress len Cp 提供了一种内存与内存,内存与Flash之间数据拷贝的方法。 例: cp.b 30008000 20000 100000 将内存地址0 x30008000处的数据(长度为0 x100000)拷贝到 地址0 x20000处(Flash中) cp.b

18、 30800000 130000 70000 将内存地址0 x30800000处的数据(长度为0 x70000)拷贝到 地址0 x130000处(Flash中),程序执行指令(演示),Go 执行内存中的二进制代码,一个简单的跳转到指定地址 go addr arg . - start application at address addr,passing arg as arguments,程序执行指令,Bootm 执行内存中的二进制代码 bootm addr arg . - boot application image stored in memorypassing arguments arg

19、.; when booting a Linux kernel, arg can be the address of an initrd image 要求二进制代码为制定格式的。通常为mkimage处理过的二进制文件。,信息类指令,bdinfo 显示开发板信息 bdinfo命令(简写为bdi)将在终端显示诸如内存地址和大小、时钟频率、MAC地址等信息。这些信息在传递给Linux内核一些参数时可能会用到。,技巧(演示),设置自动启动 sbc2410=setenv bootcmd tftp 30008000 zImage ; go 30080000 sbc2410=saveenv,第四节 Uboot

20、工作流程,工作模式,大多数BootLoader都包含两种不同的操作模式:“启动模式” 和“下载模式”,这种区别仅对于开发人员才有意义,但从最终用户的角度看,BootLoader的作用就是用来加载操作系统,而不存在所谓的启动模式与下载模式。,启动模式,这种模式也称为“自主” 模式,是指 BootLoader 从目标机上的某个固态存储设备上将操作系统自动加载到 RAM 中运行,整个过程并没有用户的介入。这种模式是 BootLoader 的正常工作模式,因此在嵌入式产品发布的时侯,BootLoader 显然必须工作在这种模式下。,下载模式,在这种模式下,目标机上的 BootLoader 将通过串口或

21、网络等通信手段从主机(Host)下载文件 ,然后控制启动流程。,流程,参考文档uboot启动流程,第五节 Uboot 移植,单板配置,Q:为什么需要对Uboot做移植? A: BootLoader 依赖于具体的嵌入式板级设备的配置 Q:具体的板级设备的配置在哪里? A:单板的配置文件位于include/configs/.h 用相应的BOARD定义代替(例:smdk2410.h),单板配置,Q:Uboot移植都需要做些什么? A:根据开发板硬件特性修改配置文件是其中最重要的一项工作 Q:配置文件中都有些什么信息? A:请看下页范例 (smdk2410.h),Smdk2410.h,#define

22、CONFIG_ARM920T1 /* CPU 类型*/ #define CONFIG_S3C2410 1 /* MCU类型 */ #define CONFIG_SMDK24101 /* 开发板型号 */,Smdk2410.h,#define USE_920T_MMU 1 /* 使用MMU */ #undef CONFIG_USE_IRQ /* 不使用 IRQ/FIQ */ /* malloc 池大小*/ #define CFG_MALLOC_LEN (CFG_ENV_SIZE + 128*1024) #define CFG_GBL_DATA_SIZE128 /* 数据段大小 128字节 */,

23、Smdk2410.h,#define CONFIG_DRIVER_CS89001 /* 一个 CS8900 网卡 */ #define CS8900_BASE0 x19000300 /* CS8900A 基地址 */ #define CONFIG_SERIAL1 1 /* 使用串口1 */ #define CONFIG_BAUDRATE115200 /* 波特率 */,Smdk2410.h,#define CONFIG_COMMANDS (CONFIG_CMD_DFL | CFG_CMD_CACHE | /*CFG_CMD_NAND |*/ /*CFG_CMD_EEPROM |*/ /*CFG

24、_CMD_I2C |*/ /*CFG_CMD_USB |*/ CFG_CMD_REGINFO | CFG_CMD_DATE | CFG_CMD_ELF) /*定义使用的命令,可添加额外命令,如PING*/,Smdk2410.h,#define CONFIG_BOOTDELAY 3 /* 启动等待时间 */ #define CONFIG_BOOTARGS root=ramfs devfs=mount console=ttySA0,9600“ /* 内核启动参数 */ #define CONFIG_ETHADDR08:00:3e:26:0a:5b #define CONFIG_NETMASK 25

25、5.255.255.0 #define CONFIG_IPADDR 10.0.0.110 #define CONFIG_SERVERIP10.0.0.1,Smdk2410.h,#define CONFIG_BOOTCOMMANDtftp; bootm #defineCFG_PROMPTSMDK2410 # #define PHYS_SDRAM_1 0 x30000000 /* SDRAM Bank #1 */ #define PHYS_SDRAM_1_SIZE0 x04000000 /* 64 MB */ #defineCFG_LOAD_ADDR 0 x33000000 /* 默认的加载地址

26、*/ #define CFG_BAUDRATE_TABLE 9600, 19200, 38400, 57600, 115200 /*可用的波特率*/,Smdk2410.h,#define CONFIG_NR_DRAM_BANKS1 /* 有一片SDRAM */ #define PHYS_FLASH_1 0 x00000000 /* FLASH 1的基地址 */ #define CFG_FLASH_BASEPHYS_FLASH_1 /*FLASH 的基地址*/,移植,Q: 怎么做Uboot的移植呢?,移植方法,移植U-Boot工作包括添加开发板硬件相关的文件、配置选项,然后配置编译。,移植方法,

27、开始移植之前,首先要分析U-Boot已经支持的开发板,选择出硬件配置最接近的开发板。选择的原则是,首先处理器相同,其次处理器体系结构相同,然后是以太网接口等外围接口相同。 还要验证一下这个参考开发板的U-Boot,至少能够配置编译通过。,移植范例,以SBC2410开发板为例,该开发板采用S3c2410芯片。而UBoot-1.1.4版本支持SMDK2410开发板,并且SMDK2410同样采用S3c2410芯片,因此选取SMDK2410作为移植参考。,移植步骤,移植U-Boot的基本步骤如下: 在顶层Makefile中为开发板添加新的配置选项,使用已有的配置项目为例 smdk2410_config

28、 : unconfig ./mkconfig $(:_config=) arm arm920t smdk2410 NULL s3c24x0 参考上面2行,添加下面2行: sbc2410_config : unconfig ./mkconfig $(:_config=) arm arm920t sbc2410 NULL s3c24x0,移植步骤,arm:CPU 架构 arm920t:CPU 类型,对应cpu/arm920t目录 sbc2410:开发板型号,对应board/sbc2410目录 NULL:开发者 s3c24x0:片上系统(SOC),移植步骤,2. 创建一个新目录存放开发板相关的代码,

29、并且添加文件(如果以上文件从其他目录copy来的,注意修改Makefile)。 board/sbc2410/config.mk board/sbc2410/flash.c board/sbc2410/sbc2410.c board/sbc2410/Makefile board/sbc2410/u-boot.lds,移植步骤,3.为开发板添加新的配置文件 先复制参考开发板的配置文件,再修改。例如: $cp include/configs/smdk2410.h include/configs/sbc2410.h 4.配置开发板 $ make sbc2410_config 5.编译U-Boot 执行make CROSS_COMPILE=arm-linux- 命令,编译成功可以得到U-Boot映像。,移植步骤,6.烧写Uboot 参考手册sjf2410_v4.pdf 大功告成,启动开发板!,常见问题,编译时出现 “invalid option abi=apcs-gnu”错误 解决办法:make时指定CROSS_COMPILE=arm-linux-,实验一,移植Uboot 移植Uboot到SBC2410板 具备Ping命令,实验二,Uboot命令 使用Uboot提供的命令,

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

当前位置:首页 > 科普知识


经营许可证编号:宁ICP备18001539号-1