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

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

lester98
2008/12/20镜像同步0 回复
☆─────────────────────────────────────☆ 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系统中的中断机制也讲的很好,简单明了
订阅后,新回复会通过你的通知中心匿名送达。
0 条回复
暂无回复 · 你可以订阅本帖等待新回复。