BBYR Achieve
返回信息流
这是一条镜像帖。来源:北邮人论坛 / embedded-system / #1065同步于 2008/8/27
Embedded_System机器人发帖

有人分析过u-boot基本源码么,求一些笔记

yihang
2008/8/27镜像同步0 回复
最近想看一些u-boot的基本功能和工作流程,想从代码上来分析一下,想快点入手,比如u-boot源码文件的顺序,重要代码的基本分析:cmd_boom.c等启动kernelimage等等,不知道有人做过分析笔记没,共享一下 :) 基于任何平台的都行,还有我对其中的汇编部分有些不懂,看哪些书或资料会比较好呢,谢谢! 贴一个吧 2008年07月09日 星期三 11:57 1. 粗读代码 首先,凭经验结合调试器,对从系统上电到u-boot启动完成整个过程做了一次跟踪,了解u-boot执行的大致路线: u-boot-1.1.4/cpu/arm920t/start.S:首先初始化CPU、内存、异常/中断向量表等; u-boot-1.1.4/lib_arm/board.c:重新初始化主频和外设; u-boot-1.1.4/common/main.c:启动shell。 有 了这些初步了解,接下来就按次序,将这几个关键文件以及里面的函数扫一遍;再接下来,结合分析Makefile文件,了解它是怎样实现多平台配置的;到 此,对u-boot 基本就有个完整的概貌了。下一步可以进入深入阅读阶段,至上而下或至下而上阅读都可以,重点是理解掌握那些靠近底层的抽象数据结构,它们是整个上层应用的 基础,其实不外乎是一些链表及对它们进行各种操作的函数。 2. 分析Makefile 从上面的描述可知,其实我最先看的并不是Makefile,但从逻辑上来说,它是系统最基本的框架,所以还是放在前面来分析。 2.1 u-boot-1.1.4/Makefile 它负责配置u-boot的编译方式,具体说来包括:使用何种指令集,需包含哪些接口驱动、库等。 Makefile的内容从上到下分别是:分定义编译环境:使用何种编译器、编译方式、目标文件的生成及它们最终镜像中的链接次序等。下面对Makefile代码作注: 2.2 u-boot-1.1.4/mkconfig 它根据Makefile是相关的板卡定义,生成config.mk文件,即make xxx_config实际上就是调用它完成的。 注意一下u-boot对板卡的分类方法: Target:宿主机平台 Architecture:定义芯片架构(如MIPS、POWERPC、ARM等) CPU:定义芯片指令集版本(如ARM7、ARM9、ARM11等) Board:芯片厂商,它细分为两类 [VENDOR]:按厂商划分(如AT9200、S3C44B0等) [SOC]:按SOC类型(如S3C2440、S3C2410等) 2.3 u-boot-1.14/config.mk 应 该说这才是真正的Makefile,以上介绍的两个脚本完成了环境配置之后,在该文件中才定义具本的编译规则,所以你会发现在各个子模块(board、 cpu、lib_xxx、net、disk...)目录中的Makefile第一句就是:include $(TOPDIR)/config.mk 附:对u-boot-1.1.4/Makefile文件的简单注释 #检查宿主机环境 HOSTARCH := $(shell uname -m | \ sed -e s/i.86/i386/ \ -e s/sun4u/sparc64/ \ ...... #如果include/config.mk文件已存在,就从里面获取目标板构架信息, #否则就要执行make xxx_config来生成该文件 ifeq (include/config.mk,$(wildcard include/config.mk)) # load ARCH, BOARD, and CPU configuration include include/config.mk ...... #定义交叉编译器 ifndef CROSS_COMPILE ifeq ($(HOSTARCH),ppc) CROSS_COMPILE = ...... # U-Boot objects....order is important (i.e. start must be first) #针对不同架构,安排目标文件的布局 OBJS = cpu/$(CPU)/start.o ifeq ($(CPU),i386) OBJS += cpu/$(CPU)/start16.o ...... #最后是针对类板卡的生成特定的配置文件,实现不同的编译方案。 #======================================================================== # PowerPC #======================================================================== ######################################################################### ## MPC5xx Systems ######################################################################### canmb_config: unconfig @./mkconfig -a canmb ppc mpc5xxx canmb cmi_mpc5xx_config: unconfig 附: 当你的GNU Make从3.80升级到3.81时,会遇到“*** No rule to make target `xxxxxx'......”类似提示而无法完成编译,只需将该目标文件所在的目录中的Makefile时间更新一下,重新编译即可。
订阅后,新回复会通过你的通知中心匿名送达。
0 条回复
暂无回复 · 你可以订阅本帖等待新回复。