4嵌入式操作系统

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

嵌入式操作系统-U-Boot分析李春杰主要内容U-Boot简介U-Boot源码结构U-Boot的编译U-Boot的移植U-Boot启动过程U-Boot简介U-boot简述:U-boot是在ppcboot以及armboot的基础上发展而来的支持很多处理器,比如PowerPC、ARM、MIPS、x86最新的主页现在U-Boot已经能够支持PowerPC、ARM、X86、MIPS体系结构的上百种开发板,已经成为功能最多、灵活性最强并且开发最积极的开放源码Bootloader。U-Boot简介u-boot的使用U-boot的手册TheDENXU-BootandLinuxGuide(DULG)forcanyonlands(DULG文档,从如何安装建立交叉开发环境和解决U-Boot移植中常见问题都一一给出详尽的说明)1)安装交叉开发环境ELDK:EmbeddedLinuxDevelopmentKit2)通过串口/网络连接到目标端3)配置、编译并安装u-boot4)配置、编译并安装Linux编译u-bootI下载源码u-boot-2009.08.tar.bz2解压缩tarjvxfu-boot-2009.08.tar.bz2编译u-boot使用交叉编译器:arm-linux-tools-20061213.tar.gz(gcc版本为3.4.4)makeep7312configmakeall编译u-bootII查看目录中的文件U-Boot源码结构从网站上下载得到U-Boot源码包,例如:U-Boot-1.1.2.tar.bz2解压就可以得到全部U-Boot源程序。在顶层目录下有多个子目录,分别存放和管理不同的源程序。目录可以分为3类:第1类目录与处理器体系结构或者开发板硬件直接相关;第2类目录是一些通用的函数或者驱动程序;第3类目录是U-Boot的应用程序、工具或者文档。U-Boot的源码顶层目录说明目录特性解释说明board平台依赖存放电路板相关的目录文件,例如:RPXlite(mpc8xx)、smdk2410(arm920t)、sc520_cdp(x86)等目录cpu平台依赖存放CPU相关的目录文件,例如:mpc8xx、ppc4xx、arm720t、arm920t、xscale、i386等目录lib_ppc平台依赖存放对PowerPC体系结构通用的文件,主要用于实现PowerPC平台通用的函数目录特性解释说明lib_arm平台依赖存放对ARM体系结构通用的文件,主要用于实现ARM平台通用的函数lib_i386平台依赖存放对X86体系结构通用的文件,主要用于实现X86平台通用的函数include通用头文件和开发板配置文件,所有开发板的配置文件都在configs目录下common通用通用的多功能函数实现lib_generic通用通用库函数的实现Net通用存放网络的程序Fs通用存放文件系统的程序Post通用存放上电自检程序drivers通用通用的设备驱动程序,主要有以太网接口的驱动Disk通用硬盘接口程序Rtc通用RTC的驱动程序Dtt通用数字温度测量器或者传感器的驱动examples应用例程一些独立运行的应用程序的例子,例如helloworldtools工具存放制作S-Record或者U-Boot格式的映像等工具,例如mkimageDoc文档开发使用文档U-Boot的编译U-Boot的源码是通过GCC和Makefile组织编译的。顶层目录下的Makefile首先可以设置开发板的定义,然后递归地调用各级子目录下的Makefile,最后把编译过的程序链接成U-Boot映像。Makefile的编译选项和规则在顶层目录的config.mk文件中定义。各种体系结构通用的规则直接在这个文件中定义。通过ARCH、CPU、BOARD、SOC等变量为不同硬件平台定义不同选项。不同体系结构的规则分别包含在ppc_config.mk、arm_config.mk、mips_config.mk等文件中。它负责U-Boot整体配置编译。按照配置的顺序阅读其中关键的几行。一、顶层目录下的Makefile顶层目录下的Makefile首先可以设置开发板的定义,然后递归地调用各级子目录下的Makefile,最后把编译过的程序链接成U-Boot映像。Makefile的编译选项和规则在顶层目录的config.mk文件中定义。各种体系结构通用的规则直接在这个文件中定义。通过ARCH、CPU、BOARD、SOC等变量为不同硬件平台定义不同选项。不同体系结构的规则分别包含在ppc_config.mk、arm_config.mk、mips_config.mk等文件中。在U-BOOT中主目录中的Makefile是对整个工程的编译链接规则进行描述。子目录中的Makfile主要是编译一些源文件并进行归档,生成一些静态库。config.mk定义了主目录和子目录makefile通用的变量。Mkconfig是个脚本文件,负责对主目录中makefile进行配置的文件。创建一些符号链接,并在include目录下创建了两个文件:config.mk和config.h。它负责U-Boot整体配置编译。按照配置的顺序阅读其中关键的几行1、开发板在Makefile中配置的定义顶层目录下的Makefile中有板子配置的定义。例如smdk2410开发板的定义如下。smdk2410_config:unconfig@./mkconfig$(@:_config=)armarm920tsmdk2410NULLs3c24x0执行配置U-Boot的命令makesmdk2410_config通过./mkconfig脚本生成include/config.mk和config.h的配置文件。1、开发板在Makefile中配置的定义以smdk2410板为例,执行makesmdk2410_config,主要完成三个功能:@在include文件夹下建立相应的文件(夹)软连接,#如果是ARM体系将执行以下操作:#ln-sasm-armasm#ln-sarch-s3c24x0asm-arm/arch#ln-sproc-armvasm-arm/proc@生成Makefile包含文件include/config.mk@生成include/config.h头文件,只有一行:/*Automaticallygenerated-donotedit*/#includeconfig/smdk2410.hinclude/config.mk文件内容正是根据Makefile对开发板的配置生成的。在此文件中将确定参数如下:ARCH=armCPU=arm920tBOARD=smdk2410SOC=s3c24x0config.mk包含了uboot运行的环境,包括体系结构、处理器和板子。Config.h中指明了板子相关的配置头文件。U-Boot源码中SMDK2410平台相关目录如下:board/smdk2410/cpu/arm920t/cpu/arm920t/s3c24x0/lib_arm/include/asm-arm/include/configs/smdk2410.h//开发板相关配置2、顶层Makefile中交叉编译器的定义顶层目录的Makefile中还定义了交叉编译器。ifeq($(ARCH),arm)CROSS_COMPILE=arm-linux-//交叉编译器的前缀//arm-elf-则要修改#endifexportCROSS_COMPILE3、顶层Makefile中定义编译U-Boot所依赖的目标文件#U-Bootobjects....orderisimportant(i.e.startmustbefirst)OBJS=cpu/$(CPU)/start.o//处理器相关的目标文件…LIBS=lib_generic/libgeneric.a//定义依赖的目录,每个目录下先把目标文件连接成*.a文件。LIBS+=board/$(BOARDDIR)/lib$(BOARD).aLIBS+=cpu/$(CPU)/lib$(CPU).aifdefSOCLIBS+=cpu/$(CPU)/$(SOC)/lib$(SOC).aendifLIBS+=lib_$(ARCH)/lib$(ARCH).a4、顶层Makefile中定义U-Boot映像编译的依赖关系ALL=u-boot.srecu-boot.binSystem.mapall:$(ALL)u-boot.srec:u-boot$(OBJCOPY)${OBJCFLAGS}-Osrec$$@u-boot.bin:u-boot$(OBJCOPY)${OBJCFLAGS}-Obinary$$@……u-boot:depend$(SUBDIRS)$(OBJS)$(LIBS)$(LDSCRIPT)UNDEF_SYM='$(OBJDUMP)-x$(LIBS)\|sed-n-e's/.*\(__u_boot_cmd_.*\)/-u\1/p'|sort|uniq`;\$(LD)$(LDFLAGS)$$UNDEF_SYM$(OBJS)\--start-group$(LIBS)$(PLATFORM_LIBS)--end-group\-Mapu-boot.map-ou-bootMakefile缺省的编译目标为all,包括u-boot.srec、u-boot.bin、System.map。u-boot.srec和u-boot.bin又依赖于U-Boot。U-Boot就是通过ld命令按照u-boot.map地址表把目标文件组装成u-boot。二、开发板配置头文件:include/configs/board_name.h这个头文件中主要定义了两类变量。一类是选项,前缀是CONFIG_,用来选择处理器、设备接口、命令、属性等。例如:#defineCONFIG_ARM920T1#defineCONFIG_DRIVER_CS89001另一类是参数,前缀是CFG_,用来定义总线频率、串口波特率、Flash地址等参数。例如:#defineCFG_FLASH_BASE0x00000000编译第1步配置,makesmdk2410_config;第2步编译,执行make一般u-boot.bin最为常用,直接按照二进制格式下载,并且按照绝对地址烧写到Flash中就可以了。U-Boot编译生成的映像文件U-Boot的移植U–Boot的移植工作主要分成处理器相关部分和开发板相关部分。U–Boot支持目前绝大多数处理器,因此处理器移植工作相对较少,主要是修改一些配置。开发板相关部分的移植,需要参考硬件线路外围器件的手册。U-Boot的移植U–Boot移植的一般步骤:检查U–Boot工程是否支持目标平台分析目标平台类似目录结构分析目标平台代码建立新的开发平台目录对照手册修改平台差异部分代码调试代码检查U–Boot工程是否支持目标平台检查U–Boot根目录下的readme文件是否提到目标平台处理器CPU目录下是否有目标平台的处理器目录Board目录下是否有目标平台类似的工程如果存在与目标平台类似的工程文件,移植工作将大大减轻分析目标平台类似目录结构如果U–Boot有与目标平台类似的工程,需要分析一下目标板工程目录的结构,分析目录中有哪些文件可以被新的目标板利用。分析目标平台代码目标平台代码分析按照U-Boot启动流程分析,确定哪些代码是额外的,是否需要去掉额外的代码。建立新的开发板平台目录在board目录下建立新的开发板平台目录,目录下的文件可以从现有类似的开发板平台目录下复制得到,并根据目标板差异部分修改。对照手册修改平台差异部分代码调试代码:JTAG基于SMDK2410移植开发板fs2410(U-B

1 / 58
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功