构建嵌入式linux系统bootloa.ppt

上传人:牧羊曲112 文档编号:6474631 上传时间:2023-11-03 格式:PPT 页数:49 大小:297.32KB
返回 下载 相关 举报
构建嵌入式linux系统bootloa.ppt_第1页
第1页 / 共49页
构建嵌入式linux系统bootloa.ppt_第2页
第2页 / 共49页
构建嵌入式linux系统bootloa.ppt_第3页
第3页 / 共49页
构建嵌入式linux系统bootloa.ppt_第4页
第4页 / 共49页
构建嵌入式linux系统bootloa.ppt_第5页
第5页 / 共49页
点击查看更多>>
资源描述

《构建嵌入式linux系统bootloa.ppt》由会员分享,可在线阅读,更多相关《构建嵌入式linux系统bootloa.ppt(49页珍藏版)》请在三一办公上搜索。

1、嵌入式Linux移植,广东省嵌入式软件公共技术中心2007年7月14日,课程介绍,主要介绍嵌入式系统结构嵌入式软件开发Bootloader设计,一 嵌入式系统结构,嵌入式系统是一个计算机系统;嵌入式系统一般包括硬件和软件两部分这里的硬件是以一个高性能的处理器(通常是32位处理器)为基础;软件是以一个多任务操作系统为基础的综合平台;这样一个软、硬件平台是单片机无法比拟的,可称之为“嵌入式系统”。,(1)嵌入式硬件平台,其他外设,SDRAM,Flash,外部总线控制器,SDRAM控制器,时钟,复位,中断控制器,处理器核,片上系统,(2)嵌入式系统软件,嵌入式软件可以分为两大类:系统软件:控制和管理

2、嵌入式系统资源,一般是内核。应用软件:在系统软件之上,如GUI(图形界面),网络服务器软件等。,(2)嵌入式软件结构,应用程序,硬件平台,嵌入式软件,内核子程序(进程调度、内存管理、文件系统、网络、进程间通信),动态库,BSP包(驱动程序),系统调用,内核软件,嵌入式软件开发,嵌入式应用开发过程一个嵌入式应用项目的开发过程是一个硬件和软件设计的综合过程,是一个系统设计过程,主要经历以下步骤:硬件设计与实现引导加载程序的设计操作系统的移植(主要是驱动程序移植)应用程序的设计系统调试,样机交付其中,引导加载程序,操作系统移植,应用程序设计是软件设计,具有自己的特点。,嵌入式软件开发的特点,需要交叉

3、编译硬件平台处理器较慢,内存和外存容量小等等;把软件开发放在高性能的PC机上进行;PC机上CPU指令集与嵌入式CPU的指令集是不同的,因此,在PC机上开发嵌入式软件需要交叉编译。需要移植由于嵌入式系统是一个软硬件定制的系统,硬件平台各不相同,软件设计需要根据不同的硬件设备来添加或修改相应的代码,这就是移植。,基于linux的嵌入式软件设计,在一个硬件平台上设计一个基于linux的软件系统,需要的工作可以分为以下三部分:Bootloader设计Linux内核的定制移植,驱动程序的开发应用程序的设计,根据GEC2410开发板,构建嵌入式linux系统,接下来,我们以gec2410开发板为硬件平台,

4、介绍构建一个嵌入式linux系统的原理和过程。系统软件有以下部分组成Bootloader为u-bootLinux内核的版本为应用程序由busybox、bash等构成,Bootloader设计,Bootloader介绍,Bootloader程序是系统加电后运行的第一段代码;通常嵌入式CPU上电或者复位时都会跳到一个特定的地址开始执行;如:ARM是0 x0地址;通常用某种类型的固态存储设备(FLASH)映射到这个预先安排的地址上;因此在系统加电后,CPU 将首先执行的是这个特定地址上的 Boot Loader 程序。Bootloader依赖于硬件平台,因此bootloader程序一般都需要移植。,

5、Bootloader程序结构,Bootloader程序的结构一般分为两个阶段:Stage 1:汇编语言编写,达到短小精悍的目的;Stage 2:C语言编写,实现更加复杂的功能;实验:结合gec2410的bootloader程序分析bootloader程序的结构;,U-boot的介绍,Uboot是德国DENX软件工程小组开发的、支持多种嵌入式CPU的bootloader程序。可引导的嵌入式操作系统:UBoot不仅仅支持嵌入式Linux系统的引导,当前,它还支持NetBSD,VxWorks,QNX,RTEMS,ARTOS,LynxOS嵌入式操作系统。支持的处理器:UBoot支持PowerPC、MI

6、PS、x86、ARM、NIOS、XScale等诸多常用系列的处理器。特点:功能多、灵活性强、开发积极、开放源代码、属于“monitor”,U-boot的介绍,uboot的获得:从下面地址下载uboot的源代码。http:/,U-boot的源码结构,uboot的目录结构顶层有18个子目录,分别存放和管理不同的源代码。这些目录分三类:与处理器体系结构或者开发板硬件直接相关存放通用的函数或者驱动程序的目录存放uboot的应用程序、工具、文档的目录,U-boot的源码结构,uboot的目录结构board:存放与开发板有关的文件。每一个开发板都以一个子目录出现在当前目录中。如smdk2410common

7、:实现uboot支持的命令,每一条命令都对应一个文件。例如bootm命令-cmd_bootm.c。cpu:与特定CPU架构相关目录,每一款Uboot下支持的CPU在该目录下对应一个子目录,比如有子目录arm920t等。doc:文档目录。Uboot有非常完善的文档,推荐大家参考阅读。drivers:Uboot支持的设备驱动程序都放在该目录,比如各种网卡、串口和USB等。,U-boot的源码结构,uboot的目录结构fs:支持的文件系统,Uboot现在支持cramfs、fat、fdos、jffs2和registerfs。lib_xxxx:与体系结构相关的库文件。如与ARM相关的库放在lib_arm

8、中。net:与网络协议栈相关的代码,BOOTP协议、TFTP协议、RARP协议和NFS文件系统的实现。tools:生成Uboot的工具,如:mkimage,crc等等,问题,问题:u-boot支持多种体系结构的CPU,那么怎么在配置编译u-boot的时候选择自己的平台呢?,U-boot的配置编译,U-Boot 的源码是通过 GCC 和 Makefile 组织编译的。首先顶层 Makefile 设置开发板的定义;然后递归地调用各级子目录下的 Makefile;最后把编译生成的目标文件链接成U-Boot 映像。,U-boot的配置编译,顶层目录下的 Makefile负责U-Boot整体配置编译。每

9、一种开发板在 Makefile 都需要有板子配置的定义。执行配置U-Boot的命令make smdk2410_config,则通过./mkconfig脚本生成include/config.mk 的配置文件。实际上是定义了ARCH、CPU、BOARD、SOC这些变量ARCH=armCPU=arm920tBOARD=smdk2410SOC=s3c24x0,U-boot的配置编译,顶层目录下的 MakefileMakefile文件开始的部分包含了这些变量的定义和输出。#load ARCH,BOARD,and CPU configurationinclude include/config.mkexpo

10、rtARCH CPU BOARD VENDOR SOC,U-boot的配置编译,顶层目录下的 Makefile硬件平台依赖的目录文件就是根据这些定义来确定。SMDK2410平台相关目录如下。board/smdk2410/cpu/arm920t/cpu/arm920t/s3c24x0/lib_arm/include/asm-arm/include/configs/smdk2410.h,U-boot的配置编译,顶层目录下的 MakefileMakefile文件还定义uboot映象编译的依赖关系。ALL=u-boot.srec u-boot.bin System.mapall:$(ALL)u-boo

11、t.hex:u-boot$(OBJCOPY)$OBJCFLAGS-O ihex$u-boot.srec:u-boot$(OBJCOPY)$OBJCFLAGS-O srec$u-boot.bin:u-boot$(OBJCOPY)$OBJCFLAGS-O binary$Makefile缺省的编译目标是all,包括:u-boot.srecu-boot.bin System.map,U-boot的配置编译,开发板配置头文件编译之前,可通过修改头文件include/configs/.h,为开发板定义配置选项或者参数。例如smdk2410板的头文件是smdk2410.h。这个头文件主要定义了两类变量一类是

12、选项,前缀是CONFIG_,用来选择处理器、设备接口、命令、属性等。#define CONFIG_DRIVER_CS89001另一类是参数,前缀是 CFG_,用来定义总线频率、串口波特率、Flash 地址等参数。#define PHYS_FLASH_10 x00000000#define CFG_FLASH_BASE PHYS_FLASH_1,U-boot的配置编译,U-boot编译分2步export PATH=/usr/local/arm/2.95.3/bin:$PATH第1步配置,例如:make smdk2410_config;第2步编译,执行make,得到U-Boot各种格式的映像文件和

13、符号表。System.mapU-Boot映像的符号表u-boot.binU-Boot映像原始的二进制格式u-bootU-Boot 映像的 ELF 格式u-boot.srecU-Boot 映像是motorola的S-Record格式其中u-boot.bin可以按照绝对地址烧写到flash芯片中去。,U-boot的移植,什么叫做移植?当一个软件的运行环境发生变化时,软件跟硬件平台密切相关的代码需要经过修改,才能在新的平台上运行,这就是移植的工作。,U-boot的移植,为什么选择U-boot作为系统的bootloader?U-boot 源码在不断地更新,支持的开发板越来越多;U-boot 源码被反复

14、应用、测试和维护,具有很好的稳定性;U-boot 较新的版本已经支持smdk2410开发板,移植的工作量少,可以缩短移植周期,提高开发效率,降低开发成本。,U-boot的移植,下面就以GEC2410开发板为例介绍移植的过程,硬件环境如下:CPU:S3C2410SDRAM:HY57V561620Nand flash:K9F1208U0B(64MB)以太网芯片:CS8900A(10M/100MB),U-boot的移植过程,(1)在顶层Makefile中为开发板添加新的配置选项,例如,参考“smdk2410_config”选项,添加如下:gec2410_config:unconfig./mkconf

15、ig$(:_config=)arm arm920t gec2410 NULL s3c24x0各项的意思如下:arm:CPU的架构(ARCH)arm920t:CPU的类型(CPU),其对应于cpu/arm920t子目录。gec2410:开发板的型号(BOARD),对应于board/gec2410目录。NULL:开发者/或经销商(vender)。s3c24x0:片上系统(SOC)。,U-boot的移植过程,(2)在board目录中建立gec2410子目录,用于存放与开发板相关的代码,这里以smdk2410为例:#cp-rf board/smdk2410 board/gec2410#cd board

16、/gec2410#mv smdk2410.c gec2410.c修改board/gec2410/Makefile将:OBJS:=smdk2410.o flash.o改为:OBJS:=gec2410.o flash.o,U-boot的移植过程,(3)为gec2410开发板添加新的配置文件,存放在include/configs/中。#cp include/configs/smdk2410.h include/configs/gec2410.h(4)指定交叉编译工具的路径,并配置开发板#export PATH=/usr/local/arm/2.95.3/bin:$PATH#make gec2410_

17、config(5)编译u_boot#make执行make命令,测试编译能否成功,U-boot的移植过程,(6)添加驱动或者功能选项当测试编译能够通过的时候,还要实现u_boot的以太网接口,Flash擦除、读写等的功能;这些功能由于不同的开发板采用不同的芯片,因此需要修改源码。,U-boot的移植过程,添加网络功能修改include/configs/gec2410.h文件中对命令的支持参数CONFIG_COMMANDS,添加需要的网络命令。#define CONFIG_COMMANDS添加CFG_CMD_NETCFG_CMD_PING若要添加这些命令宏之外的新命令,则可参考书中的方法,U-bo

18、ot的移植过程,支持从nand flash启动首先,我们来了解一下s3c2410的nand flash特性:S3C2410的Nand Flash支持由两部分组成:Nand Flash控制器(集成在S3C2410 CPU);Nand Flash存储芯片(K9F1208U0B)两大部分组成。对Nand Flash存储芯片进行操作,必须通过Nand Flash控制器的专用寄存器才能完成;Nand Flash相当于一个外设,而不位于它的内存地址区;所以,不能对Nand Flash进行总线操作。,U-boot的移植过程,为了支持NAND flash起动,S3C2410内建了内部的4k的SRAM缓存“St

19、eppingstone”。当选择从nand flash启动的时候,Nand flash最初的4k字节将被读入“Steppingstone”然后开始执行起动代码。通常要求起动代码在前4k代码中把他本身从Nand flash中的拷到SDRAM中以便执行主代码。,U-boot的移植过程,U_boot为了支持从nand flash启动,必须在启动时把自己拷贝到SDRAM中,这个搬运的工作需要我们自己实现。具体就是在“cpu/arm920t/start.S”中添加搬运代码,U-boot的移植过程,支持nand flash的读写命令对nand flash操作的命令的实现在“common/cmd_nand.

20、c”文件中;移植的主要工作是在文件中添加:nand flash专用寄存器地址的宏定义nand flash 操作的一些命令等,U-boot的移植过程,(7)调试u_boot源码,直到u_boot能在开发板上正常运行起来。调试的过程可能很艰难,这就要求我们对U_BOOT的相当熟悉;可以用source insight建立一个u_boot的工程项目,深入分析u_boot的启动代码;在调试的过程中还可以使用一些调试技巧,比如:当遇到串口没有打印信息的时候,我们可以借助LED灯的亮灭来提示程序执行到那里。当遇到nand flash 芯片不能初始化的时候,可以在代码中插入一句“printf(“I am he

21、ren”)”语句,检查程序的执行。,实验,u-boot的配置编译,U-boot的引导,一旦u-boot被正确安装都目标板之后,接着可以使用串行线连接目标板,并且用终端程序连接目标板,然后用u-boot引导。下面是GEC2410开发板在引导期间的输出:U-Boot 1.1.4(Jul 16 2007-16:26:51)U-Boot code:33F80000-33F9C5D4 BSS:-33FA06BCRAM Configuration:Bank#0:30000000 64 MBFlash:512 kBnand flash:64 MB*Warning-bad CRC or NAND,using

22、default environmentIn:serialOut:serialErr:serialGEC2410#,U-boot的引导,正如所见,u-boot先是打印出版本信息;然后提供与硬件有关的细节;最后u-boot提供了一个命令提示符“GEC2410#”;用户可以在提示符下输入相应的命令,执行相应的操作。,U-boot的环境变量,一旦u-boot启动和执行之后,可以通过设定适当的环境变量来设定它的配置。查看目标板上环境变量的当前值的命令是“printenv”,U-boot的环境变量,例如:GEC2410#printenvbootargs=root=/dev/mtdblock2 init=/

23、linuxrc console=ttySAC0,115200bootdelay=5baudrate=115200ethaddr=12:24:56:78:9a:bcipaddrserveripnetmaskstdin=serialstdout=serialstderr=serial,U-boot的环境变量,各个环境变量的含义:bootargs 传递给linux内核的命令行参数baudrate 串口波特率ethaddr 开发板网口物理地址ipaddr 开发板IP地址serverip TFTP服务器地址netmask 开发板网关stdin、stdout、stderr 输入、输出、错误信息输出,一般都

24、是串口bootcmd 定义自动启动时执行的几条命令,U-boot的环境变量,设置环境变量设置环境变量用“setenv”命令例如:setenv ipaddr保存环境变量保存环境变量用“saveenv”命令例如在设置了环境变量之后输入:saveenv环境变量就会保存起来,U-boot常用命名介绍,printenv 打印环境变量 setenv 设置环境变量如:setenv ipaddrsetenv serveripsaveenv 保存设定的环境变量tftp即将内核镜像文件从PC中下载到SDRAM的指定地址,然后通过bootm来引导内核,前提是所用PC要安装设置tftp服务。如:tftp 30008000 zImage,U-boot常用命名介绍,nand erase 擦除nand flash中数据块如:nand erase 0 x40000 0 x1c0000nand write 把RAM中的数据写到Nand Flash中如:nand write 0 x30008000 0 x40000 0 x1c0000nand read 从nand flash中读取数据到RAM如:nand read 0 x30008000 0 x40000 0 x1c0000go 直接跳转到可执行文件的入口地址,执行可执行文件,实验,移植u-boot到2410开发板上,

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

当前位置:首页 > 生活休闲 > 在线阅读


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号