- 1、本文档共36页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
u-boot-116源码学习
[转]u-boot-1.1.6源码学习(1)?(2013-03-14 14:59:15)转载▼原文摘自:/thread-3646095-1-1.htmlU-Boot启动内核的过程可以分为两个阶段,两个阶段的功能如下:?????1. 第一阶段的功能:????????(1)硬件设备初始化;????????(2)加载U-Boot第二阶段代码到RAM空间;????????(3)设置好栈;????????(4)跳转到第二阶段代码入口;???2. 第一阶段的功能:????????(1)初始化本阶段使用的硬件设备;????????(2)检测系统内存映射;????????(3)将内核从Flash读取到RAM中;????????(4)为内核设置启动参数;????????(5)调用内核。?1. 了解u-boot主要的目录结构和启动流程,如下图。源码解压以后,我们可以看到以下的文件和文件夹:??cpu与处理器相关的文件。每个子目录中都包括cpu.c和interrupt.c、start.S、u-boot.lds。cpu.c初始化CPU、设置指令Cache和数据Cache等interrupt.c设置系统的各种中断和异常start.S是U-boot启动时执行的第一个文件,它主要做最早其的系统初始化,代码重定向和设置系统堆栈,为进入U-boot第二阶段的C程序奠定基础u-boot.lds链接脚本文件,对于代码的最后组装非常重要?board已经支持的所有开发板相关文件,其中包含SDRAM初始化代码、Flash底层驱动、板级初始化文件。其中的config.mk文件定义了TEXT_BASE,也就是代码在内存的其实地址,非常重要。?common与处理器体系结构无关的通用代码,U-boot的命令解析代码/common/command.c、所有命令的上层代码cmd_*.c、U-boot环境变量处理代码env_*.c、等都位于该目录下drivers包含几乎所有外围芯片的驱动,网卡、USB、串口、LCD、Nand Flash等等diskfsnet支持的CPU无关的重要子系统:磁盘驱动的分区处理代码文件系统:FAT、JFFS2、EXT2等网络协议:NFS、TFTP、RARP、DHCP等等include头文件,包括各CPU的寄存器定义,文件系统、网络等等configs子目录下的文件是与目标板相关的配置头文件docU-Boot的说明文档,在修改配置文件的时候可能用得上lib_arm处理器体系相关的初始化文件比较重要的是其中的board.c文件,几乎是U-boot的所有架构第二阶段代码入口函数和相关初始化函数存放的地方。lib_avr32lib_blackfinlib_genericlib_i386lib_m68klib_microblazelib_mips lib_nioslib_nios2lib_ppclib_shlib_sparc?apiexamples外部扩展应用程序的API和范例nand_splonenand_iplpost一些特殊构架需要的启动代码和上电自检程序代码libfdt支持平坦设备树(flattened device trees)的库文件tools编译S-Record或U-Boot映像等相关工具,制作bootm引导的内核映像文件工具mkimage源码就在此MakefileMAKEALLconfig.mkrules.mkmkconfig控制整个编译过程的主Makefile文件和规则文件CHANGELOGCHANGELOG-before-U-Boot-1.1.5COPYINGCREDITSMAINTAINERSREADME一些介绍性的文档、版权说明标为红色的是移植时比较重要的文件或文件夹。u-boot的stage1代码通常放在cpu/xxxx/start.S文件中,他用汇编语言写成;u-boot的stage2代码通常放在lib_xxxx/board.c文件中,他用C语言写成。各个部分的流程图如下:?2. u-boot源码分析——Makefile简要分析?????u-boot下所有目录的编译连接都是由顶层目录的Makefile来决定的。在执行make之前,先要执行?make $(board)_config?对工程进行配置,以确定特定于目标板的各个子目录和头文件。$(board)_config?是Makefile 中的一个伪目标,它传入指定的CPU,ARCH,BOARD,SOC参数去执行mkconfig脚本。这个脚本的主要功能在于连接目标板平台相关的头文件夹,生成config.h文件包含板子的配置头文件,使得Makefile能根据目标板的这些参数去编译正确的平台相关的子目录。?????以smdk2410为例:make??smdk2410_config?????该配置主
文档评论(0)