《UBoot开发》PPT课件.ppt_第1页
《UBoot开发》PPT课件.ppt_第2页
《UBoot开发》PPT课件.ppt_第3页
《UBoot开发》PPT课件.ppt_第4页
《UBoot开发》PPT课件.ppt_第5页
已阅读5页,还剩33页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、嵌入式Linux系统移植,课程名称,Agenda,2,U-Boot开发 U-Boot移植 Linux内核分析 构建Linux根文件系统,U-Boot开发,第1章,本章目标,了解U-Boot的代码基本结构、常用命令 了解环境参数的配置 掌握U-Boot的启动流程,本章结构,1-1 BootLoader 的概念,Boot Loader 就是在操作系统内核运行之前运行的一段小程序 目的:为最终调用操作系统内核准备好正确的环境 初始化硬件设备 建立内存空间的映射图 特点: Boot Loader 是严重地依赖于硬件而实现的,BootLoader操作模式,大多数 Boot Loader 都包含两种不同的

2、操作模式: “启动加载”模式 (Boot loading) 下载”模式 (Downloading),BootLoader的位置,嵌入式Linux系统从软件的角度看通常可以分为4个层次: 引导加载程序。 Linux 内核。 根文件系统。 用户应用程序。,嵌入式Linux系统典型分区结构,BootLoader的两个阶段,BootLoader第一阶段的功能 硬件设备初始化。 为加载Bootloader的第二阶段代码准备RAM空间。 复制Bootloader的第二阶段代码到RAM空间中。 设置好栈。 跳转到第二阶段代码的C入口点。,BootLoader的两个阶段,BootLoader第二阶段的功能 初

3、始化本阶段要使用到的硬件设备。 检测系统内存映射(memory map)。 将内核映象和根文件系统映象从Flash上读到RAM空间中。 为内核设置启动参数。 调用内核。,void (*theKernel)(int zero, int arch, u32 params_addr) = (void (*)(int, int, u32)KERNEL_RAM_BASE); theKernel(0, ARCH_NUMBER, (U32) kernel_params_start);,BootLoader与内核的交互,Bootloader与内核的交互是单向的,Bootloader将各类参数传给内核。由于它们

4、不能同时运行,传递办法只有一个:Bootloader将参数放在某个约定的地方之后,再启动内核,内核启动后从这个地方获得参数。 标记列表 标记列表以标记ATAG_CORE开始,以标记ATAG_NONE结束。 标记的数据结构为tag,它由一个tag_header结构和一个联合(union)组成。,struct tag_header u32 size; u32 tag; ; struct tag struct tag_header hdr; union struct tag_corecore; struct tag_mem32mem;,标志列表,设置标记ATAG_CORE,params = (str

5、uct tag *) 0 x30000100; params -hdr.tag = ATAG_CORE; params -hdr.size = tag_size(tag_core); params-u.core.flags = 0; params-u.core.pagesize = 0; params-u.core.rootdev = 0; params = tag_next(params);,标志列表,设置内存标记,params -hdr.tag = ATAG_MEM; params -hdr.size = tag_size(tag_mem32); params -u.mem.start =

6、 0 x30000000; params -u.mem.size = 0 x40000000 params = tag.next(params);,标志列表,设置命令行标记,char *p = “root=/dev/mtdblock 2 init=/linuxrc console=ttySAC0”; params-hdr.tag = ATAG_CMDLINE; params-hdr.size = (sizeof (struct tag_header)+ strlen(p)+1+4) 2; strcpy(params-u.cmdline.cmdline, p); params = tag_nex

7、t(params);,标志列表,设置标记ATAG_NONE,params-hdr.tag = ATAG_NONE; params-hdr.size = 0;,常用BootLoader介绍,1-2 U-Boot工程简介,U-Boot,全称为Universal Boot Loader,即通用Bootloader,是遵循GPL条款的开放代码项目。 “通用”有两层含义: 可以引导多种操作系统 支持多种架构的CPU。 它支持如下操作系统:Linux、NetBSD、VxWorks、QNX、RTEMS、ARTOS、LynxOS等 支持如下架构的CPU:PowerPC、MIPS、x86、ARM、NIOS、XS

8、cale等。 获取U-Boot源码 ,U-Boot源码结构,U-Boot-1.1.6根目录下共有26个子目录,可以分为4类。 (1)平台相关的或开发板相关的。 (2)通用的函数。 (3)通用的设备驱动程序。 (4)U-Boot工具、示例程序、文档。,U-Boot源码结构,U-Boot初体验,make _config make all U-Boot.bin:二进制可执行文件,它就是可以直接烧入ROM、NOR Flash的文件。 U-Boot.bin:ELF格式的可执行文件。 U-Boot.srec:Motorola S-Record格式的可执行文件。,U-Boot的配置过程,顶层Makefile

9、 执行make smdk2410_config实际上执行如下命令:,SRCTREE:= $(CURDIR) . MKCONFIG:= $(SRCTREE)/mkconfig . smdk2440_config:unconfig $(MKCONFIG) $(:_config=) arm arm920t smdk2440 NULL s3c24x0,./mkconfig smdk2440 arm arm920t smdk2440 NULL s3c24x0,分析mkconfig作用,确定开发板名称BOARD_NAME 创建到平台/开发板相关的头文件的链接 创建顶层Makefile包含的文件includ

10、e/config.mk 创建开发板相关的头文件include/config.h,echo ARCH = $2 config.mk echo CPU = $3 config.mk echo BOARD = $4 config.mk $5 gd-bd-bi_dram0.size = PHYS_SDRAM_1_SIZE; return 0; ,U-Boot第二阶段代码分析,U-Boot命令的格式 U-Boot中每 个命令都通过U_BOOT_CMD宏来定义,格式如下: 各项参数的意义如下: name:命令的名字,注意,它不是一个字符串(不要用双引号括起来)。 maxargs:最大的参数个数。 repe

11、atable:命令是否可重复,可重复是指运行一个命令后,下次敲回车即可再次运行。 command:对应的函数指针,类型为(*cmd)(struct cmd_tbl_s*,int,int,char* usage:简短的使用说明,这是个字符串。 help:较详细的使用说明,这是个字符串。,U_BOOT_CMD(name,maxargs,repeatable,command,”usage”,”help”),U-Boot第二阶段代码分析,为内核设置启动参数 U-Boot也是通过标记列表向内核传递参数。 在配置文件include/configs/smdk2440.h中增加如下两个配置项: 对于ARM架构

12、的CPU,都是通过lib_arm/armlinux.c中的do_bootm_linux函数来启动内核,#define CONFIG_SETUP_MEMORY_TAGS1 #defineCONFIG_CMDLINE_TAG 1,theKernel (0, bd-bi_arch_number, bd-bi_boot_params),机器类型ID,标记列表的开始地址,1-4 U-Boot的常用命令,帮助命令help 下载命令 tftpboot命令使用TFTP协议从服务器下载文件 nfs命令使用NFS协议下载文件,help 命令名, 比如: help bootm,tftpboot loadAddres

13、s bootfilename,nfs 1oadAddresshost ip addr:bootfilename,U-Boot的常用命令,Nand Flash操作命令 环境变量命令,“nand info” 查看NAND Flash信息 “nand erase clean off size”擦除NAND Flash “nand read.jffs2 addr off size” “nand write.yaffs addr off size” “nand read.yaffs addr off size” “nand write.yaffs addr off size”,“printenv”命令打

14、印全部环境变量 “setenv name value”设置名字为 name的环境变量的值为value。 “setenv name”删除名字为name的环境变量 “saveenv”将更改后的所有环境变量写入Nand Flash中,U-Boot的常用命令,启动命令,“bootm addrarg” 命令启动存放在地址adds处的U-Boot格式的映象文件 “go addrarg” 启动存放在地址addr处的二进制文件 “nbootloadAddr dev offset” 命令将NAND Flash设备dev上偏移地址off处的映象文件复制到内存loadAddr处,然后,如果环境变量autostart

15、的值为“yes”,就启动这个映象,U-Boot命令使用实例,制作内核镜像文件 烧写内核镜像文件uImage,arm-linux-objcopy o binary R .note R .comment S vmlinux linux.bin gzip -9 linux.bin mkimage A arm O linux T kernel C gzip a 0 x30008000 e 0 x30008000 n “Linux Kernel Image” d linux.bin.gz uImage,tftp 0 x30000000 uImage 或 nfs 0 x30000000 192.168.1

16、.201:/work/nfs_root/uImage nand erase 0 x0 0 x00200000 nand write.jffs2 0 x30000000 0 x0 $(filesize),U-Boot命令使用实例,烧写yaffs文件系统镜像 烧写jffs2文件系统镜像,tftp 0 x30000000 yaffs.img 或 nfs 0 x30000000 01:/ work/nfs_root/yaffs.img nand erase 0 xA00000 0 x3600000 nand write.yaffs 0 x30000000 0 xA00000 $(filesize),tftp 0 x30000000 jffs2.img 或 nfs 0 x30000000 01:/ work/nfs_

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论