第一章U-Boot开发课件

上传人:我*** 文档编号:140920363 上传时间:2020-08-02 格式:PPT 页数:38 大小:284KB
返回 下载 相关 举报
第一章U-Boot开发课件_第1页
第1页 / 共38页
第一章U-Boot开发课件_第2页
第2页 / 共38页
第一章U-Boot开发课件_第3页
第3页 / 共38页
第一章U-Boot开发课件_第4页
第4页 / 共38页
第一章U-Boot开发课件_第5页
第5页 / 共38页
点击查看更多>>
资源描述

《第一章U-Boot开发课件》由会员分享,可在线阅读,更多相关《第一章U-Boot开发课件(38页珍藏版)》请在金锄头文库上搜索。

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第一阶段的功能 硬件设备初始化。(关闭看门狗、关闭中断、设置cpu速度与时钟频率、RAM初始化) 为加载Bootloader的第二阶段代码准备RAM空间。 复制Bootloader的第二阶段代码到RAM空间中。 设置好栈。 跳转到第二阶段代码的C入口点。,Boo

3、tLoader的两个阶段,BootLoader第二阶段的功能 初始化本阶段要使用到的硬件设备。 检测系统内存映射(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与内核的交互,约定参数存放地址Bootlo

4、ader与内核的交互是单向的,Bootloader将各类参数传给内核。由于它们不能同时运行,传递办法只有一个: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; struc

5、t tag_mem32mem; struct tag_cmdline cmdline;,标志列表,设置标记ATAG_CORE,params = (struct 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);,其中, tag_next定义如下: #define

6、 tag_next(t) (struct tag *)(u32 *)(t) + (t)-hdr.size),标志列表,设置内存标记,params -hdr.tag = ATAG_MEM; params -hdr.size = tag_size(tag_mem32); params -u.mem.start = 0 x30000000; params -u.mem.size = 0 x40000000 params = tag.next(params);,标志列表,设置命令行标记,char *p = “root=/dev/mtdblock 2 init=/linuxrc console=ttyS

7、AC0”; 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_next(params);,标志列表,设置标记ATAG_NONE,params-hdr.tag = ATAG_NONE; params-hdr.size = 0;,常用BootLoader介绍,1-2 U-Boot工程简介,U-Boot,全称为Universal Boot Loader,即通用B

8、ootloader,是遵循GPL条款的开放代码项目。 “通用”有两层含义: 可以引导多种操作系统 支持多种架构的CPU。 它支持如下操作系统:Linux、NetBSD、VxWorks、QNX、RTEMS、ARTOS、LynxOS等 支持如下架构的CPU:PowerPC、MIPS、x86、ARM、NIOS、XScale等。 获取U-Boot源码 ,U-Boot源码结构,U-Boot-1.1.6根目录下共有26个子目录,可以分为4类。 (1)平台相关的或开发板相关的。 (2)通用的函数。 (3)通用的设备驱动程序。 (4)U-Boot工具、示例程序、文档。,U-Boot源码结构,U-Boot初体验

9、,make _config make all U-Boot.bin:二进制可执行文件,它就是可以直接烧入ROM、NOR Flash的文件。 U-Boot.bin:ELF格式的可执行文件。 U-Boot.srec:Motorola S-Record格式的可执行文件。,U-Boot的配置过程,顶层Makefile 执行make smdk2410_config实际上执行如下命令:,SRCTREE:= $(CURDIR) . MKCONFIG:= $(SRCTREE)/mkconfig . smdk2440_config:unconfig $(MKCONFIG) $(:_config=) arm ar

10、m920t smdk2440 NULL s3c24x0,./mkconfig smdk2440 arm arm920t smdk2440 NULL s3c24x0,分析mkconfig作用,确定开发板名称BOARD_NAME 创建到平台/开发板相关的头文件的链接 创建顶层Makefile包含的文件include/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_

11、SDRAM_1_SIZE; return 0; ,U-Boot第二阶段代码分析,U-Boot命令的格式 (include/command.h) U-Boot中每 个命令都通过U_BOOT_CMD宏(include/command.h) 来定义,格式如下: 各项参数的意义如下: name:命令的名字,注意,它不是一个字符串(不要用双引号括起来)。 maxargs:最大的参数个数。 repeatable:命令是否可重复,可重复是指运行一个命令后,下次敲回车即可再次运行。 command:对应的函数指针,类型为(*cmd)(struct cmd_tbl_s*,int,int,char* usage:

12、简短的使用说明,这是个字符串。 help:较详细的使用说明,这是个字符串。,U_BOOT_CMD(name,maxargs,repeatable,command,”usage”,”help”),U-Boot第二阶段代码分析,为内核设置启动参数 U-Boot也是通过标记列表向内核传递参数。 在配置文件include/configs/smdk2440.h中增加如下两个配置项: 对于ARM架构的CPU,都是通过lib_arm/armlinux.c中的do_bootm_linux函数来启动内核,#define CONFIG_SETUP_MEMORY_TAGS1 #defineCONFIG_CMDLIN

13、E_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 loadAddress bootfilename,nfs 1oadAddresshost ip addr:bootfilename,U-Boot的常用命令,Nand Flash操作命令 环境变量命令,“nand info” 查看N

14、AND 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”命令打印全部环境变量 “setenv name value”设置名字为 name的环境变量的值为value。 “setenv name”删除名字为name的环境变量 “saveenv”将更改后的所有环境变量写入Nan

15、d Flash中,U-Boot的常用命令,启动命令,“bootm addrarg” 命令启动存放在地址adds处的U-Boot格式的映象文件 “go addrarg” 启动存放在地址addr处的二进制文件 “nbootloadAddr dev offset” 命令将NAND Flash设备dev上偏移地址off处的映象文件复制到内存loadAddr处,然后,如果环境变量autostart的值为“yes”,就启动这个映象,U-Boot命令使用实例,制作内核镜像文件 烧写内核镜像文件uImage,arm-linux-objcopy o binary R .note R .comment S vml

16、inux 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.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 192.168.1.201:/ work/nfs_root/yaffs.img nand erase 0 xA00000

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 办公文档 > PPT模板库 > PPT素材/模板

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号