欢迎来到天天文库
浏览记录
ID:27544893
大小:186.08 KB
页数:15页
时间:2018-12-03
《u-boot引导linux内核的分析》由会员上传分享,免费在线阅读,更多相关内容在学术论文-天天文库。
1、u-boot引导linux内核的分析u-boot引导linux内核有两个核心内容:1、制作Uimage格式的内核镜像2、设置环境变量bootcmd、bootargs和设置CONFIG_SETUP_XXXX_TAGS宏以支持标记列表的参数传递。本文针对u-boot-1.1.6。一、制作Uimage格式的内核镜像u-boot能在多种CPU架构上引导多种操作系统,如linux、vxworks>QNX、netbsd等。映象文件必须满足U-Boot的格式要求,才能被识别和引导,u-boot只能引导Uimage格式的镜像。但是GCCT具链编译生成的内核镜像格式;
2、为Zimage或image,所以u-boot提供了mkimage这个工具来给Zimage或image格式镜像内核添加~个header,添加headerU的image通常叫uimage,uimage是可以被U-boot直接引导的lAl核镜像。这个头部(header)由结构体image_header_t描述,image_header_t定义在文件include/image.h屮:typedefstructimage_header{uint32_tih.magic;/*镜像头部幻数*/uint32_tih_hcrc;/*镜像头部校验和*/uint32_ti
3、h_time;/*镜像头部创建时间戳*/uint32_tih_size;/*镜像文件大小*/uint32_tihjoad;/*指定镜像头信息的加载地址*/uint32_tih_ep;/*内核的入口地址*/uint32_tih_dcrc;/*镜像文件校验和*/uint8_tih_os;/*操作系统类型*/uint8_tih.arch;/*CPU架构类型*/uint8_tih_type;/*镜像类型*/uint8_tih_comp;/*镜像压缩格式*/uint8_tih_name[IH_NMLEN];/*镜像名称*/}image_header_t;这个头
4、部结构体屮包含了全部bootm命令引导系统内核所需要的重要参数。这其屮大部分参数由执行mkimage命令的参数来填写确定。下面我们来看看的mkimage命令的执行格式:mkimage[-x]-Aarch-0os-Ttype-Ccomp-aaddr-eep-nname-ddata_file[:data_file...]image-A==>setarchitectureto'arch'//用于指定CPU类型,在include/image.h定义了许多CPU类型的宏定义,比如ARM、MIPS、PPC、M68K等-0==>setoperatingsystem
5、to'os'//用于指定操作系统,在include/image.h定义了许多操作系统的宏定义,比如Linux、NETBSD、VXWORKS等-T==>setimagetypeto’type1//用于指定image类型,在include/image.h定义了许多image类型的宏定义,比如Kernel、RAMDISK、STANDALONE、FIRMWARE等-C==>setcompressiontype'comp'//指定压缩类型,在include/image.h定义了许多image类型的宏定义,比如:NONE、GZIP、BZIP2。U-boot引导l
6、inux内核吋一般不解压而由内核被引导运行后执自行解压,所以这个参数一般指定为NONE-a==>setloadaddressto*addr'(hex)//指定ulmage格式闪核镜像文件的加载地址,―般指定为0x30008000-e==>setentrypointto'ep*(hex)//linux内核启动的真正入口地址,它不包括ulmage内核镜像文件的头部,所以一般情况下应指定为addr+0x40。但是当指定压缩类型为none时,该参数必须与-a参数一致,因为对非压缩镜像文件的处理是:不解压,但是把镜像文件除去头部后复制到加载地址1addr’。-
7、n==>setimagenameto'name'//镜像文件的命名-d==>useimagedatafrom’datafile'//无头信息镜像文件名-x==>setXIP(executeinplace)//设置执行位置,可省略有上川*见,mkimage命令的执行参数与头部结构体中的参数大多为对应的关系,事实上:执行mkimage命令,制作Uimage格式内核镜像实质上就是通过mkimage命令的参数的形式来初始化header结构体,并将其作为bootm命令识别和引导操作系统内核的重要参数。mkimage命令的参数的形式来初始化header结构体这项
8、工作在tool/mkimage.c屮的image_set_xxx()函数来完成。下而我们看一看mkimage
此文档下载收益归作者所有