下载  >  操作系统  >  Linux  > UBOOT 移植(53页PDF全面)

UBOOT 移植(53页PDF全面) 评分:

 了解嵌入式BootLoader 的基本概念和嵌入式体系结构  掌握BootLoader 的启动流程与使用方法  了解U-Boot 的源代码结构  掌握U-Boot 的编译过程和启动过程  掌握BootLoader 移植的基本方法和移植要的  掌握通过查看芯片手册、硬件原理图来配置相关寄存器的方法  熟悉U-Boot 常用命令的使用
S3C2110处理器开发板上的vivi等。现在 armboot已经并入了U-Boot,所以U-Boot也支持 ARM/ XSCALE平台。U-B0ot已经成为ARM平台事实上的标准 Bootloader Powerpc PowerPc平台的处理器有标准的 Bootloader,就是 ppcboot。 ppcboot和 armboot合并 创建了U-Bot,成为各种体系结构开发板的通用引导程序。 V MIPS MIPS公司开发的 YAMON是标准的 Boot loader,也有许多MIPS芯片商为自己的开发板写 了 Bootloader。现在, U Boot也已经支持MPS平台 SH SH平台的标准 Boot loader是sh-boot M68K平台没有标准的 Bootloader。 Redboot能够支持m68k系列的系统。 213 Boot loader的安装媒介( Installation medium) 系统加电或复位后,所有的CPU通常都从某个由CPU制造商预先安排的地址上取指 令。比如,基于ARM9 TDMI cOre的CPU在复位时通常都从地址0x000000它的第一条 指令。而基于CPU构建的嵌入式系统通常都有某种类型的固态存储没备(比如:ROM、 EEPROM 或 FLASH等)被映射到这个预先安排的地址上。因此在系统加电后,CP将首先执行Boot Loader程序。 下图2-2就是一个同时装有 Boot loader、内核的启动参数、内核映像和根文件系统映 像的固态存储设备的典型空间分配结构图。 Goot Darameters Rc-ot filesystem Bootloader 图2-2固态存储设备的典型空间分配结构 21.4 Boot loader的启动过程 通常多阶段的 Bootloader能提供更为复杂的功能,以及更妤的可移植性。从固态存储 设备上启动的 Boot loader大多都是2阶段的启动过程,也即启动过程可以分为 stage 1 和 stage2两部分。而至于在 stage1和 stage2具体完成哪些任务将在下一节中讨论 215 Boot loader的操作模式 大多数 Boot loader都包含两种不同的操作模式:"启动加载"模式和″下载"模式,这种 差别仅对于研发人员才有意义。但从最终用户的角度看,B0 ot loader的作用就是用来加载 操作系统,而并不存在所谓的启动加载模式和下载工作模式的差别 启动加载模式:这种模式也称为”"自主"( Autonomous)模式。也即 Boot loader从目标 机上的某个固态存储设备上将操作系统加载到RAM中运行,整个过程并没有用户的介入。这 和模式是 Bootloader的正常工作模式,因此在嵌入式产品发布的时侯, Bootloader显然必 须上作在这种模式下。 下载模式:在这种模式下,口标机上的 Bootloader将通过串口连接或网络迕接等通信手 段从主机(Host)下载文件,比如:下狨内核职像和根文件系统映像,测试程序等。从主机 下载的文件通常首先被 Bootloader保存到目标机的RAM中,然后再被 Boot loader写到 目标机上的}LASH类固态存储设备中。 Bootloader的这种模式通常在系统更新和第次安装 内核和根文件系统时被使用;工作于这种模式下的 Bootloader通常都会向他的终端用户提 供一个简单的命令行接山。比如U-B00T、ⅥIⅥ等。 22U-Boot分析 22.1了解U-Boot U-Boot( Universal boot loader)是遵循GPL协议的一个开源项,通称为通用 Boot loader。 之所有将它称之为“通用”是因为它可以引导多种操作系统和支持大多数的CPU架构。 它所支持的常见操作系统: Linux、 NetBSD、Ⅴ Works等,支持的CPU有:ARM、AVR32、 blackfin、x86、NIOS、 PowerPC等。 读者可以从htp/ sourceforge. net/projects./ U-Boot网站获取U-Bot源代码。同时在 使用中遇到问题,请读者多多思考,利用好网终资源来解决问题 222U-Boot源代码结构 从网站上卜载得到U-Boot源码包,例如:U-Boot-1.1.6.tar.bz2.解压就可以得到仝 部U-Boot源程序。在顶层口录下有18个子日录,分别存放和管理不同的源程序。这些录 中所要存放的文件有其规则,可以分为3类。 √第1类目录与处理器体系结构或者开发板硬件直接相关; 第2类日录是一些通用的函数和驱动程序; 第3类目录是 U Boot.的应用程序、工具或者文档。 衣2-3列出了U-Boot顶层目录下各级目录放规则 表2-3U-Boot的源码顶层目录说明 日录特性解释说明 board 平台依敕存放电路板相关的日录文件,例如:RPX1ite(mpc8x) smdk2410(arm920t)、sc520cdp(x86)等目录 cpu 平台依赖存放CP相关的目录文件,例如:m08xpc4x、rm20t、 arm920t、 xscale、i386等目录 lib ppc 平台依赖存放对 PowerpC体系结构通用的文件,主要用于实现 PowerPC 平台通用的函数 lib arm 平台依赖存放对ARM体系结构通用的文件,主要用于实现ABM平台通 用的函数 lib i386 半台依赖存放对X6体系结构通用的文件,⊥要用于实现X6平台通 用的函数 include 通用 头文件和开发板配置文件,所有开发板的配置文件都在 configs日录下 common 通用 通用的多功能函数实现 目录 特性解释说明 1 ib generic通用 通用库函数的实现 Net 通用 存放网络的程序 F: 通用 存放文什系统的程序 Post 通用 存放上电自检程序 drivers 通用 通用的设各驱动程序,主要有以太网接口的驱动 Disk 通用 硬盘接凵程序 Rt 通用 RTC的驱动程序 Dtt 通用 数字温度测量器或者传感器的驱动 examples 应用例程些独立运行的应用程序的例了,例如 helloworld 存放制作S- Record或者U-Boot格式的映像等工具,例如: tools 工具 animage Doc 文档 开发使用文档 U-Boot支持十几种架构,包含对几十种处理器、数百种开发板的支持。可是对于特定 的开发板,配置缤译过程只需要其中部分程序。在 board目录下找到与自己的开发板相近的 配置,然后在这基础上徹些修改就可以实现相应的功能。 223U-Boot的编译过程 以smdk2410板为例,编译的过程可分为两部份: #make smdk2410 config #make √在编译U-BT之前,先要执行 make smdk2410 config smdk2410 config是 Makefile的一个目标,定义如卜: smdk2410 config: unconfig @(MKCONFIG)$(@: config-) arm arm920t smdk2410 NULL S3c24x0 unconfig: Orm f $(obj) include/ config. h (obj)include/config. mk s(obj)board/*/ config. tmp $(obj)board/*/*/config. tmp 当执行 Mlake sidk24l0 config时,先执行 unconfig日标,注意不指定输出日标时, bi,src变量均为空, unconfig命令清理上一次执行make* config时生成的头文件和 makefile的包含文件。主要是 include/ config.h和 include/ config.mk文件 然后才执行命令 @(MKCONFIG) S(@: config-) arm arm920t smdk2410 NULL S3c24xO MKCONFIG是顶层目录下的 mkcofig脚本文件,后面五个是传入的参数。 各项说明如 arm:CPU的架构(ARCH) army20t:CPU的类型CPU),其对应于cpu/arm920t了目录 smdk2410:开发板的型号( BOARD),对应于 board/smdk2410目录 NUL:开发者/或经销商( vender) s3c24x0:片上系统(SOC) 对于smdk2410 config而言, mkconfig主要完成三个任务: (1)在 inc lude文件夹下建立相应的软连接: #1n-s asmara asm arch-s3c24x0 asm-arm/arch #1n-s proc-armv asm-arm/proc (2)生成 Makefile包含文件 include/ config.mk,内容很简单,定义了四个变量: arm CPU arm920t BOARD smdk2410 SOC s3c24X0 (3)生成 include/ config.h头文件,只有一行: / Automatically generated- do not edit */ #include config/smdk2410. h mkconfig脚本文件的执行至此结束,继续分析 Makefile剩下部分 指定交叉编译器前缀: ife(S (ARCH), arm #这里根据ARCH变量,指定编译器前缀。 CROSS COMPILE arm-linux endif √U-boot需要的目标文件 OBJS= cpu/$(CPU)/start o #顺序很重要, start.o必须放第一位 √需要的文件: LIBS- lib generic/libgenerica LIBS + board/S(BOARDDIR)/libS(BOARD).a LIBS + cpu/$(CPU)/libS(CPU).a LIBS + common/libcommon a LIBS +-$(BOARDLIBS) LIBS :-$(addprefix $(obj), S LIBS) PHONY: S(LIBS) 最终生成的各种镜像文件: ALL= S(obj)u-boot srec $(obj)u-boot bin s(obj)System. map (U BOOT NAND all: S(ALL) S(obj)u-boot. hex: S (obj)u-boot S(OBJCOPY)S OB.JCFLAGSI-0 ihex SS@ s(obj)u-boot srec: (ob j)u-boot S (OBJCOPY)SOBJCFLAGSJ-0 srcc $< $@ S(obj)u-boot bin: $(obj)u-boot S(OBJCOPY)S[OBJCFLAGSJ-0 srec S $a 下面我们分析最关键的 u boot eli文件镜像的生成 @依赖目标 depend:生成各个子目录的. depend文件,, depend列出每个目标文件的依赖 文件。生成方法,调用每个子目录的 make depend depend dep for dir in (subdirs) do S(MAKe)-c Sdir depend done 依赖目标 version:生成版本信息到版本文件 VERSI0 N FILE中。 version @echo n #define U BOOT VERSION\U Boot>$(VERSION FILE) echo-n"$( J BOOT VERS10从)">>$( VERSON F⊥LE); echo -n $ (she ll s(CONFIG SHELL) S(TOPDIR/ tools/ setlocalversion S(TOPDIR))>> S(VERSION FILE);\ echo\>> S (VERSION FILE 伪日标 SUBDIRS:执行 tools, examples,post,post\cpu子日录下面的make文件。 SUBDIRS= tools examples post post/cpu PIIONY: $(SUBDIRS $(SLBD⊥RS) $(MAKE)-C$@al⊥ 依赖目标$(0BJS),即cpu/ start.0 S(OBJS) S(MAKE)-C cpu/s(CPU) S(if $(REMOTE BUILD), $@, S (notdir $@) 依赖目标$(LIBS),这个目标太多,都是每个子目录的库文件*.a,通过执行相应子目 录下的make米完成: S(LIBS) S(MAKE)-c (dir (subst $(obj),, a)) @依赖日标$( LDSCRIPT) LDSCRIPT =$(TOPDIR)/board/s(BOaRDDiR)/u-boot Ids LDFLAGS +=-Bstatic-T S(LDSCRIPT)-Ttext S(TEXT BASE)S(PLATFORM LDFLAGS) 对于smdk2410, LDSCRIP即连接肘本文件是 board/smdk2410/u-boot.lds,定义了连接 时各个目标文件是如何组织的 内容如下 OUTPUT FORMAT("elf32-littlearm",elf32-littlearm""elf32-littlearm") /*OUTPUT FORMAT("elf32-armelf32-arm",elf32-arm")*/ OUTPUT ARCIl(arm) ENTRY( start) SECTIONS ,=0×00000000 ALIGN(4) cpu arm920t/start o ( text *(. text #text的基地址由 LDFLAGS中 Ttext S( TEXT BASE)指定 smdk2410指定的基地址为0x33f80000 ALIGN (4) odata: *(. rodata)) ALIGN (4) ta: * ( data)) ALIGN(4) ot :i *(. got)) u boot cnd start u boot cmd: *(.u boot cmd) u boot cmd end IGN(4) bss start bss:{米(.bss) ent 〔执行连接命令 cd s (indir)&& $(LD)S (LDFLAGS)$UNDEF SYM S( OBJS)\ start-group S( LIBS)-end-group S (PLATFORM LIBS Map u-boot map -o u-boot 上把 start.o和各个子目录 makefile生成的库文件按照 LDFLAGS连接在一起,生成 EL文件 u boot和连接时内存分配图文件ubot.map 简而言之:MA巸E工程的编译流程就是通过执行执行一个make* config传入ARC,CPU BOARD,SUC参数,然后 mkconfig根据参数将 inc lude头文件夹相应的头文件夹连接好,生 成 config.h。然后执行make分别调用各了目录的 makefile生成所有的obj文件和obj库 文件*过.最后连接所有目标文件,生成镜像。不同格式的镜像都是调用相应工具由eir镜像 生成。 224U-Boot的启动过程 U-Bot启动过程可以分成两个阶段( stage) 卜面是u-υoot启动过程的流程图其中左右两部分分别是启动过程的两个阶段 义入 调用初始化函数攵 设置畀常向量 初始化闪存设备 设置PU速度时钟中断 初始化内存分酤 初始化内存控制器 初始化 Nand Flash 设置 初始化显示设备 「搬移ROM码到RAM中 初始化网络设备 进入c代码 等待用户命令 图2-3Iaat启动流程(2个 stage〕

...展开详情
2011-10-18 上传 大小:1.1MB
举报 收藏 (1)
分享

评论 下载该资源后可以进行评论 共1条

delarce worth to have a look
2013-01-03
回复