




已阅读5页,还剩2页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
Bootloader小结Vivi 是mizi公司一款bootloader,总体说了,这是一个轻量级的bootloader,代码的规模比较小,非常适合用于学习研究,不想uboot,万行的代码,不是那么容易读的,同时,vivi还有一个优点,就是它的Makefile文件结构,完全是仿照kernel的Makefile,所以,学习vivi的Makefile是很有价值的,可以从vivi的makefile看出,很多的Makefile是直接从kernel的文件中的粘贴过来的。废话不说了,我们开始解析下vivi的Makefile文件吧。首先需要看一些vivi的文件组织形式:|- COPYING /这是一个GPL文件|- CVS /这是一个版本控制软件的文件夹|- Documentation /相关说明文档|- Makefile /Makefile文件|- Rules.make /Makefile通用规则|- arch /与平台板卡相关的文件|- drivers /驱动文件|- include /头文件|- init / 系统初始化文件|- lib /库文件|- scripts /一些vivi的配置脚本,同时包含有menuconfig的源代码|- util /二进制工具,这里有两个工具:imagewrite 和ecc上边就是vivi的文件组织结构,有一些文件是与编译无关的,一些说明文档、版本控制文件以及其他一些文件,我们把不需要的文件删除,util这里边的工具用在其他的地方,可以选择性的编译,但这些文件是与vivi的编译无关的,当然,GPL协议是非常重要的,这里不是说GPL不重要,删除只是为了列举与vivi编译有关的文件。下边是精简的文件组织形式:|- Makefile /主Makefile|- Rules.make /通用Makefile规则|- arch /与平台板卡相关的文件|- drivers /驱动文件|- include /头文件|- init /初始化文件|- lib /库文件|- scripts /配置脚本与menuconfig的源码我们来分析下vivi从配置到最后生成的总体流程:make menuconfig或者 make config 或者 make oldconfig | /生成 vivi/.config文件【保存了配置文件】 |/ 然后make ,这时候make根据.config的内容进行编译。至于编译的流程需要我们看看makefile文件。由于Makefile文件比较长,不方便全部贴在这里。我们分段进行分析。VERSION = 0PATCHLEVEL = 1SUBLEVEL = 4VIVIRELEASE=$(VERSION).$(PATCHLEVEL).$(SUBLEVEL)ARCH := armCONFIG_SHELL := $(shell if -x $BASH ; then echo $BASH; else if -x /bin/bash ; then echo /bin/bash; else echo sh; fi ; fi)TOPDIR:= $(shell /bin/pwd)# change this to point to the Linux include directory#LINUX_INCLUDE_DIR= /usr/local/arm/2.95.3/include/VIVIPATH = $(TOPDIR)/includeHOSTCC = gccHOSTCFLAGS = -Wall -Wstrict-prototypes -O2 -fomit-frame-pointerCROSS_COMPILE = /usr/local/arm/2.95.3/bin/arm-linux-#CROSS_COMPILE = /opt/host/armv4l/bin/armv4l-redhat-linux-# Include the make variables (CC, etc.)#AS = $(CROSS_COMPILE)asLD = $(CROSS_COMPILE)ldCC = $(CROSS_COMPILE)gccCPP = $(CC) -EAR = $(CROSS_COMPILE)arNM = $(CROSS_COMPILE)nmSTRIP = $(CROSS_COMPILE)stripOBJCOPY = $(CROSS_COMPILE)objcopyOBJDUMP = $(CROSS_COMPILE)objdumpMAKEFILES = $(TOPDIR)/.configMD5SUM= md5sumPERL = perlAWK= awkexport VERSION PATCHLEVEL SUBLEVEL KERNELRELEASE CONFIG_SHELL TOPDIR VIVIPATH HOSTCC HOSTCFLAGS CROSS_COMPILE AS LD CC CPP AR NM STRIP OBJCOPY OBJDUMP MAKE MAKEFILES MD5SUM PERL AWK# 版本号 在生成的vivi中,开头的版本号就是有这个地方的变量来决定VERSION = 0PATCHLEVEL = 1SUBLEVEL = 4 # VIVI 这里设置输出版本信息的格式。VIVIRELEASE=$(VERSION).$(PATCHLEVEL).$(SUBLEVEL)# := 与=的区别: ”:=“为直接展开,”=“为递归展开,详细内容看GNU make中文手册6.2.2# ”:=“在此处会定义一个变量,直接对其赋值,对于引用会直接找到引用的源,表示立即展开#”:“只是简单的替换,不会直接找到引用的源,在以后,如果引用的源发生变化,此处的变量也会发生变化。表示递归展开# 举例 # # VAR1=TMP1;# TMP=$(VAR1) # VAR1=TMP2# TMP1:=$(VAR1) #ECHO $(TMP) =显示 TMP2#ECHO $(TMP1)=显示 TMP1#ARCH是定义体系结构, VIVI此处的定义是说明该VIVI是针对ARM平台 ARCH := arm# 这里一处make函数的调用,该函数为shell,该行语句的主要作用是设置shell命令解释器#这条命令的作用是执行函数把结果给变量#make函数的调用语法为:$()或者$ #shell函数的作用是”执行命令,把命令的执行结果作为变量的内容“#COMFIG_SHELL 指定命令解释器CONFIG_SHELL := $(shell if -x $BASH ; then echo $BASH; else if -x /bin/bash ; then echo /bin/bash; else echo sh; fi ; fi)# 设置当前顶层目录, 该Makefile所在目录 shell函数的用法,把命令pwd的结果赋值给TOPDIRTOPDIR:= $(shell /bin/pwd)# change this to point to the Linux include directory# 指定LINUX内核的INCLUDE目录,在vivi中,没有起作用,可以删除该语句#LINUX_INCLUDE_DIR= /usr/local/arm/2.95.3/include/# 指定vivi的头文件所在目录#VIVIPATH = $(TOPDIR)/include# 定义本地的编译器 这里指定编译器为gccHOSTCC = gcc#定义本地的编译器的编译参数,vivi的编译需用使用arm-linux-gcc(交叉编译器),那么定义gcc有什么作用?#解答: 在一次使用make menuconfig的时候,需要使用gcc编译menuconfig选项程序,只为配置服务。#跳转到scripts/lxdialog #执行该目录下的make all # make menuconfig :-#跳转到scripts/lxdialog #执行该目录下的make all #make -C scripts/lxdialog all#make1: Entering directory /tmp/vivi/scripts/lxdialog # 跳转入目录#make1: Leaving directory /tmp/vivi/scripts/lxdialog # 编译完后,离开目录#/bin/sh scripts/Menuconfig arch/config.in #执行Menuconfig arch/config.in #Using defaults found in .config#Preparing scripts: functions, parsing.done.HOSTCFLAGS = -Wall -Wstrict-prototypes -O2 -fomit-frame-pointer#定义交叉编译器的路径,要注意一些公认的定义方法,一般CROSS_COMPILE就是交叉编译器 ARCH就是于体系结构相关的CROSS_COMPILE = /usr/local/arm/2.95.3/bin/arm-linux-#CROSS_COMPILE = /opt/host/armv4l/bin/armv4l-redhat-linux-# Include the make variables (CC, etc.)# 定义工具链 tools chains # AS = $(CROSS_COMPILE)asLD = $(CROSS_COMPILE)ldCC = $(CROSS_COMPILE)gccCPP = $(CC) -EAR = $(CROSS_COMPILE)arNM = $(CROSS_COMPILE)nmSTRIP = $(CROSS_COMPILE)stripOBJCOPY = $(CROSS_COMPILE)objcopyOBJDUMP = $(CROSS_COMPILE)objdumpMAKEFILES = $(TOPDIR)/.config#MD5 MD5SUM= md5sum# PERL 脚本PERL = perlAWK= awk# 导出前边定义的变量 主要是因为主makefile需要调用很多子makefile,# 这样导出后,就可以让子makefile使用这些以前定义的变量了。export VERSION PATCHLEVEL SUBLEVEL KERNELRELEASE CONFIG_SHELL TOPDIR VIVIPATH HOSTCC HOSTCFLAGS CROSS_COMPILE AS LD CC CPP AR NM STRIP OBJCOPY OBJDUMP MAKE MAKEFILES MD5SUM PERL AWK# 定义就宣告结束了总结 :VIVI的剪裁Bootloader有很多种,如vivi,uboot,redboot,lilo等等。vivi 是韩国mizi公司专门为三星s3c2410芯片设计的Bootloader。下面我们以它为例讲述一下Bootloader的裁剪和烧写首先是上网下载vivi,我的版本是v0.1.4。http:/
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年心理咨询与治疗技术综合检测模拟考试卷答案及解析
- 2025年放射治疗剂量计算与调整模拟试题答案及解析
- 人工智能对工业生产的影响训练
- 充电桩智能化技术规范手册
- 中小企业人力资源管理问题分析
- PID控制理论与应用技巧总结
- 2025年口腔医学口腔疾病治疗方案考核答案及解析
- 河北省对口高考数学真题收藏集
- 嵌入式软件选型规范
- 运用营销自媒体塑造品牌形象
- 人工造林项目投标方案(技术方案)
- 自动扶梯维护培训课件
- 铁丝镀锌工操作规程培训
- 严防管制刀具 对自己和他人负责-校园安全教育主题班会课件
- 医院培训课件:《护患沟通技巧》
- 公路技术状况检测与评定-公路技术状况评定
- 正式员工正规劳动合同范本
- 人工搬运风险与控制培训课件
- 新能源材料与器件PPT完整全套教学课件
- 肺癌中医护理常规(整理)
- 住宅专项维修资金管理系统方案
评论
0/150
提交评论