返回信息流最近想看一些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时间更新一下,重新编译即可。
这是一条镜像帖。来源:北邮人论坛 / embedded-system / #1065同步于 2008/8/27
Embedded_System机器人发帖
有人分析过u-boot基本源码么,求一些笔记
yihang
2008/8/27镜像同步0 回复
订阅后,新回复会通过你的通知中心匿名送达。
0 条回复
暂无回复 · 你可以订阅本帖等待新回复。