返回信息流☆─────────────────────────────────────☆
yihang (Goodluckfly) 于 (Wed Aug 27 14:46:29 2008) 提到:
最近想看一些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时间更新一下,重新编译即可。
☆─────────────────────────────────────☆
yihang (Goodluckfly) 于 (Wed Aug 27 18:37:49 2008) 提到:
查了4个:
http://blog.csdn.net/BelindaBen/archive/2008/05/08/2415163.aspx
http://blog.chinaunix.net/u2/63631/article_91924.html
http://blog.mcuol.com/User/lvembededsys/Article/4355_1.htm
http://bbs.eccn.com/ecbbs/dispbbs.asp?boardID=180&ID=26232&page=37
☆─────────────────────────────────────☆
tjfmail (PE_passion & energy) 于 (Wed Aug 27 21:49:23 2008) 提到:
盛赞
大运村归来第一贴
☆─────────────────────────────────────☆
DusTin (老了) 于 (Wed Aug 27 22:31:08 2008) 提到:
没仔细分析过 只是能用就过了 呵呵
期待更多的分享
☆─────────────────────────────────────☆
lester98 (奶瓶) 于 (Thu Aug 28 12:06:10 2008) 提到:
你的资料已经够多啦,我顺手攒了好久,大概也就是你这么多东西,研究这个还是不要指望有课本一样的东西了
☆─────────────────────────────────────☆
hobby (hobby) 于 (Wed Sep 24 16:37:15 2008) 提到:
前两天研究过do_boom命令,这是当时做的笔记,希望对LZ有帮助
bootm中的处理流程
1、定义全局结构体变量header用于保存内核镜像的首部,定义hdr指针指向header
2、若bootm命令带地址参数,则指针addr等于该参数,否则addr=CFG_LOAD_ADDR
3、addr指针已经指向内核镜像,将内核镜像的首部拷贝到header
4、检查header(也就是内核镜像首部)内容并打印:这其中包括对内核镜像整体进行CRC校验
5、通过首部中的压缩类型分别处理:如果是压缩的,将镜像的Data部分解压后复制到header->load_addr(mkeimage中的-a参数决定)指向的位置;如果未经压缩,直接复制,地址同上。
6、对于kernel类型的镜像,按照OS类型进入不同的处理分支,Linux分支:do_bootm_linux函数
7、*kernel=header->Entry Point,给*kernel指针赋值为入口地址(mekimage中的-e参数确定)
8、将gd中开发板相关信息拷贝到kbd当中供内核使用:kbd=gd->bd
☆─────────────────────────────────────☆
yihang (Goodluckfly) 于 (Wed Sep 24 18:01:10 2008) 提到:
【 在 hobby 的大作中提到: 】
: 前两天研究过do_boom命令,这是当时做的笔记,希望对LZ有帮助
: bootm中的处理流程
: 1、定义全局结构体变量header用于保存内核镜像的首部,定义hdr指针指向header
: ...................
谢hobby,现在才算对u-boot框架大致明白了,正准备看源码
☆─────────────────────────────────────☆
volans (酸梨) 于 (Fri Sep 26 09:33:11 2008) 提到:
深入到代码中去
☆─────────────────────────────────────☆
hobby (hobby) 于 (Mon Sep 29 17:02:37 2008) 提到:
【 在 yihang 的大作中提到: 】
: 谢hobby,现在才算对u-boot框架大致明白了,正准备看源码
呵呵 不客气
大家互相交流经验嘛
☆─────────────────────────────────────☆
lkkjob (一线天涯) 于 (Thu Oct 2 21:04:25 2008) 提到:
学习了,我正要开始学习uboot移植呢!
☆─────────────────────────────────────☆
ssailing (sailing) 于 (Sat Oct 11 00:05:28 2008) 提到:
曾经写的一点学习心得《U-boot在AT91RM9200上的全线移植分析》,仅供参考
http://blog.csdn.net/sailor_8318/archive/2007/10/11/1820904.aspx
☆─────────────────────────────────────☆
lester98 (奶瓶) 于 (Sat Oct 11 16:30:13 2008) 提到:
大赞!
【 在 ssailing (sailing) 的大作中提到: 】
: 曾经写的一点学习心得《U-boot在AT91RM9200上的全线移植分析》,仅供参考
: http://blog.csdn.net/sailor_8318/archive/2007/10/11/1820904.aspx
☆─────────────────────────────────────☆
hobby (hobby) 于 (Sun Oct 26 18:59:14 2008) 提到:
发现2楼的链接都不错啊,尤其是第二个
http://blog.chinaunix.net/u2/63631/article_91924.html
一步一步的分析了Uboot和内核
☆─────────────────────────────────────☆
hobby (hobby) 于 (Sun Oct 26 19:01:13 2008) 提到:
【 在 hobby 的大作中提到: 】
: 发现2楼的链接都不错啊,尤其是第二个
: http://blog.chinaunix.net/u2/63631/article_91924.html
: 一步一步的分析了Uboot和内核
今天下午花了好几个小时在看
解决了好几个以前碰到过但是没解决的问题
比如:U_BOOT_CMD加入Uboot命令的实现原理,lds文件
还有里面对Linux系统中的中断机制也讲的很好,简单明了
这是一条镜像帖。来源:北邮人论坛 / embedded-system / #3274同步于 2008/12/20
Embedded_System机器人发帖
[合集] 有人分析过u-boot基本源码么,求一些笔记
lester98
2008/12/20镜像同步0 回复
订阅后,新回复会通过你的通知中心匿名送达。
0 条回复
暂无回复 · 你可以订阅本帖等待新回复。