Transcript Document
第5章 U-Boot的编译和使用 本章目标 理解什么是Bootloader,它的作用是什么; U-Boot的结构; 掌握如何编译U-Boot; 掌握使用U-Boot的命令、工具。 本章结构 嵌入式系统引导 U-Boot简介 U-Boot配置与编译 U-Boot烧录 U-Boot的编译和使用 U-Boot主要目录结构 U-Boot主要功能 U-Boot的命令使用 TFTP工具使用 5.1、初识BootLoader 5.1.1、初识BootLoader 5.1.2、Bootloader的种类 5.1.3、 Bootloader的启动 5.1.1、初识BootLoader 嵌入式linux系统从软件的角度看通常可以分为4个层次: 1、引导加载程序。 2、Linux 内核。 3、文件系统。 4、用户应用程序。 5.1.2 、Bootloader的种类(1) 5.1.2、Bootloader的种类(2) (1)X86 X86 的工作站和服务器上一般使用LILO 和GRUB。 (2)ARM ARM 处理器的芯片商很多,所以每种芯片的开发板都有自己的Bootloader。 常用VIVI、 U-BOOT。 (3)PowerPC PowerPC 平台的处理器有标准的Bootloader,就是ppcboot。PPCBOOT 在合并 armboot等之后,创建了U-Boot,成为各种体系结构开发板的通用引导程序。 (4)MIPS MIPS公司开发的YAMON 是标准的Bootloader,也有许多MIPS芯片商为自己的开发板 写了Bootloader。现在,U-Boot 也已经支持MIPS平台。 (5)SH SH 平台的标准Bootloader 是sh-boot。Redboot在这种平台上也很好用。 (6)M68K M68K 平台没有标准的Bootloader。Redboot能够支持m68k系列的系统。 5.1.3、Bootloader的启动(1) 大多数 Boot Loader 都包含两种不同的操作模式: 1、“启动加载”模式 2、“下载”模式 这种区别仅对于开发人员才有意义。但从最终用户的角度看,Boot Loader 的作用就是用来加载操作系统,而并不存在所谓的启动加载模式与 下载工作模式的区别。下面介绍各种启动模式。 5.1.3、Bootloader的启动(2) 1.网络启动方式 这种方式的开发板不需要配置较大的 存储介质,跟无盘工作站有点类似。 但是使用这种启动方式之前,需要把 Bootloader 安装到板上的EPROM 或 者Flash中。Bootloader 通过以太网 接口远程下载Linux 内核映像或者文 件系统。这种方式对于嵌入式系统开 发来说非常重要。 5.1.3、Bootloader的启动(3) 2.磁盘启动方式 传统的Linux 系统运行在台式机或者服务器上,这些计算 机一般都使用BIOS 引导,并且使用磁盘作为存储介质。 如果进入BIOS设置菜单,可以探测处理器、内存、硬盘 等设备,可以设置BIOS从软盘、光盘或者某块硬盘启动。 也就是说,BIOS并不直接引导操作系统。 5.1.3、Bootloader的启动(4) 3.Flash启动方式 大多数嵌入式系统上都使用Flash存储介质。Flash有很多 类型,包括NOR Flash、NANDFlash和其他半导体盘。 Bootloader 一般是存储在Flash芯片上的。另外,Linux内 核映像和RAMDISK 也可以存储在Flash上。通常需要把 Flash分区使用,每个区的大小应该是Flash擦除块大小的 整数倍。 5.1.3、Bootloader的启动(5) Boot Loader的启动流程: Boot Loader 的 stage1 通常包括以下步骤(以执行的先后顺序): 1. 硬件设备初始化。 2. 为加载 Boot Loader 的 stage2 准备 RAM 空间。 3. 拷贝 Boot Loader 的 stage2 到 RAM 空间中。 4. 设置好堆栈。 5. 跳转到 stage2 的 C 入口点。 5.1.3、Bootloader的启动(6) Boot Loader 的 stage2 通常包括以下步骤(以执行的先后 顺序): 1. 初始化本阶段要使用到的硬件设备。 2. 检测系统内存映射(memory map)。 3. 将 kernel 映像和根文件系统映像从 flash 上读到 RAM 空间中。 4. 为内核设置启动参数。 5. 调用内核。 5.1.3、Bootloader的启动(7) 5.2、U-Boot简介 U-Boot,全称Universal Boot Loader,是遵循GPL条款的开放源码项 目,从FADSROM、8xxROM、PPCBOOT逐步发展演化而来,其源码目录、编译 形式与Linux内核很相似。事实上,不少U-Boot源码就是相应Linux内核源 程序的简化,尤其是一些设备的驱动程序,从UBoot源码的注释中能体现这 一点。但是U-Boot不仅仅支持嵌入式Linux系统的引导,当前,它还支持 NetBSD、VxWorks、QNX、RTEMS、ARTOS、LynxOS嵌入式操作系统。 5.3、U-Boot配置与编译 make distclean 清除与平台相关的文件 make smdk2440_config 配置使用SMDK2440 make CROSS_COMPILE=arm-linux交叉编译 如果编译过程中没有出现错误。那么将创建u-boot文件, 并通过objcopy将其转换为二进制格式和16进制文件格式。最 后将u-boot.bin下载到开发板的Flash中引导操作系统。 5.4、U-Boot烧录(1) U-Boot不仅可以在NorFlash上运行,也可以在Nand Flash 中运行,一切取决于代码的编写。 通过仿真器烧入uboot 通过仿真器uboot烧写到flash中就可以从NAND flash启动 了。 通过JTAG接口,由工具烧入flash 5.4、U-Boot烧录(2) JTAG简介 JTAG(Joint Test Action Group)是IEEE制定的用于检测PCB和IC的标准。通过这个标 准,可对JTAG接口芯片的硬件电路进行边界扫描和故障检测。详细内容可查阅IEEE1149.1 协议。目前,很多高档微处理器都带有JTAG接口,像ARM7,ARM9,DSP等。 5.5、U-Boot主要目录 目录树 |--board |--include |--net |--common |--lib_arm |--post |--cpu |--lib_generic |--rtc |--disk |--lib_i386 `--tools |--doc |--lib_m68k |--drivers |--lib_microblaze |--dtt |--lib_mips |--examples |--lib_nios |--fs |--lib_nios2 |--lib_ppc 5.6、 U-Boot主要功能 系统引导 支持NFS挂载、RAMDISK 系统引导 (压缩或非压缩)形式的根文件系 统 支持从Flash中引导压缩或非压缩系统内核 基本辅助 强大的操作系统接口功能,可灵活设置、传递多个关键参数给操作 系统, 适合系统在不同开发阶段的调试要求与产品发布,尤其对 Linux支持最为功能强劲 支持目标板环境参数的多种存储方式,如Flash、NVRAM、EEPROM CRC32校验,可校验Flash中内核、RAMDISK镜像文件是否完好 设备驱动 串口、SDRAM、Flash、以太网、LCD、NVRAM、EEPROM、键盘、USB、 PCMCIA、PCI、RTC等驱动支持 上电自检功 SDRAM、Flash大小自动检测;SDRAM 故障检测;CPU型号 能 特殊功能 XIP内核引导 5.7、U-Boot命令使用 5.7.1、U-Boot主要命令 5.7.2、常用命令使用说明 5.7.3、 TFTP工具使用 5.7.1、U-Boot主要命令(1) 使用命令help---[uboot1.1.4]# help ? - alias for 'help' autoscr - run script from memory base - print or set address offset bdinfo - print Board Info structure boot - boot default, i.e., run 'bootcmd' bootd - boot default, i.e., run 'bootcmd' bootelf - Boot from an ELF image in memory bootm - boot application image from memory bootp - boot image via network using BootP/TFTP protocol bootvx - Boot vxWorks from an ELF image cmp - memory compare coninfo - print console devices and information cp - memory copy 7.7.1、U-Boot主要命令(2) crc32 - checksum calculation date - get/set/reset date & time dcache - enable or disable data cache echo - echo args to console erase - erase FLASH memory flinfo - print FLASH memory information go - start application at address 'addr' help - print online help icache - enable or disable instruction cache iminfo - print header information for application image imls - list all images found in flash itest - return true/false on integer compare mw - memory write (fill) 5.7.1、 U-Boot主要命令(3) mw - memory write (fill) nand - NAND sub-system nboot - boot from NAND device nfs - boot image via network using NFS protocol nm - memory modify (constant address) ping - send ICMP ECHO_REQUEST to network host printenv- print environment variables protect - enable or disable FLASH write protection rarpboot- boot image via network using RARP/TFTP protocol reset - Perform RESET of the CPU run - run commands in an environment variable saveenv - save environment variables to persistent storage 5.7.1、 U-Boot主要命令(4) setenv - set environment variables sleep - delay execution for some time tftpboot- boot image via network using TFTP protocol version - print monitor version 5.8、U-Boot常用命令(1) 1、tftp(tftpboot) 即将内核镜像文件从PC中下载到SDRAM的指定地址,然后 通过bootm来引导内核,前提是所用PC要安装设置tftp服 务。 下载信息: [uboot1.1.4]# tftp 0x30008000 zImage 2、bootm 内核的入口地址开始引导内核。 [uboot1.1.4]# bootm 0x30008000 5.8、U-Boot常用命令(2) 3、go 直接跳转到可执行文件的入口地址,执行可执行文件。 [uboot1.1.4]# go 0x30008000 4、cp 内存拷贝,cp 源地址 目的地址 拷贝大小(字节) [uboot1.1.4]# cp 0x30008000 0x3000f000 64 5.8、U-Boot常用命令(3) 5、erase(F) 擦除FLASH MEMORY。 erase start end erase bank N -erase FLASH bank # N erase all -erase all FLASH banks 7.8、 U-Boot常用命令(4) 6、printenv 打印环境变量 7、saveenv(F) 保存设定的环境变量 8、setenv 设置环境变量 5.8、U-Boot常用命令(5) 9、nand read 11、nand write nand read InAddr FlAddr size nand write InAddr FlAddr size InAddr: 从nand flash中读到内存 的起始地址。 InAddr: 写到Nand Flash中的数据 在内存的起始地址 FlAddr: nand flash 的起始地址。 FlAddr: Nand Flash的起始地址 size: 从nand flash中读取的数据 的大小。 size: 数据的大小 10、nand erease nand erase FlAddr size FlAddr: nand flash 的起始地址 size: 从nand flash中擦除数据块 的大小 5.8、U-Boot常用命令(6) 12、TFTP工具使用 TFTP协议是简单的文件传输协议,适合目标板Bootloader的使用。 TFTP文件传输基于UDP。我们通过TFTP来传输目标板启动需要的 内核映象文件zImage和ramdisk。 U-Boot> tftp 21000000 zImage TFTP from server 192.168.1.2; our IP address is 192.168.1.100 Filename 'zImage'. Load address: 0x21000000 Loading: ################################################################# done Bytes transferred = 1324260 (1434e4 hex) 本章总结 本章讲述了Bootloader的概念,重点分析U-Boot主要功能 和命令使用。最后介绍了在开发过程中常用的手段: TFTP。