U-BOOT-1.1.6文件结构分析注释
U-BOOT-1.1.6可在denx的git仓库中下载: http://git.denx.de/?p=u-boot.git;a=summary
写作注释:
- 使用斜体字表示文件名
- 使用黑体字表示目录名
下面以三星SMDK2410开发板为例分析u-boot-1.1.6**主要项目结构:
该开发板参数:
BOARDNAME=SMDK2410, ARCH=arm,CPU=ARM920t, BOARD=SMDK2410, VENDOR=NULL, SOC=S3C24X0
完整文件结构:
- u-boot-1.1.6 >
-
- board >
-
-
- smdk2410 >
-
-
-
-
- config.mk
-
-
-
-
-
- flash.c
-
-
-
-
-
- lowlevel_init.s
-
-
-
-
-
- Makefile
-
-
-
-
-
- smdk2410.c
-
-
-
-
-
- u-boot.lds
-
-
-
-
- (*BOARD) >
-
-
- common >
-
-
- command.c
-
-
-
- main.c
-
-
-
- Makefile
-
-
-
- console.c
-
-
-
- flash.c
-
-
-
- usb.c
-
-
-
- cmd_*.c
-
-
-
- env_*.c
-
-
- cpu >
-
-
- arm920t >
-
-
-
-
- s3c24x0 >
-
-
-
-
-
-
- serial.c
-
-
-
-
-
-
-
- interrupts.c
-
-
-
-
-
-
-
- i2c.c
-
-
-
-
-
-
-
- *.c
-
-
-
-
-
-
- config.mk
-
-
-
-
-
- cpu.c
-
-
-
-
-
- interrupts.c
-
-
-
-
-
- start.s
-
-
-
-
-
- Makefile
-
-
-
-
-
- (*SOC) >
-
-
-
- disk >
-
- doc >
-
-
- README.*
-
-
- drivers >
-
-
- nand >
-
-
-
-
- nand.c
-
-
-
-
-
- Makefile
-
-
-
-
-
- nand_*.c
-
-
-
- * nand_legacy >
-
-
-
- nand_legacy.c
-
-
-
-
-
- Makefile
-
-
-
-
- device*.c
-
-
-
- deviec*.h
-
-
- dtt >
-
- examples >
-
- fs >
-
-
- ext2 >
-
-
-
- cramfs >
-
-
-
- jffs2 >
-
-
-
- fs* >
-
-
-
- Makefile
-
-
- include >
-
-
- asm-arm >
-
-
-
-
- arch-s3c24x0 >
-
-
-
-
-
-
- memory.h
-
-
-
-
-
-
- proc-armv >
-
-
-
-
-
- arch-* >
-
-
-
-
- configs >
-
-
-
-
- smdk2410.h
-
-
-
-
-
- (BOARD*).h
-
-
-
-
- Makefile
-
-
- lib_generic >
-
- lib_arm >
-
-
- board.c
-
-
-
- cache.c
-
-
-
- armlinux.c
-
-
-
- Makefile
-
-
- lib_<*ARCH>
-
- nand_spl >
-
- net >
-
- post >
-
- rtc >
-
- tools >
-
- Makefile
-
- config.mk
-
- arm_config.mk
-
- (*ARCH)_config.mk
-
- mkconfig
-
- rules.mk
-
- readme.mk
-
- COPYING
-
- CREDITS
-
- CHANGELOG
-
- CHANGELOG-before-U-Boot-1.1.5
分别注释几个主要文件
board 目录
- u-boot-1.1.6 >
-
- board >
-
-
- smdk2410 >
-
-
-
-
- config.mk
-
-
-
-
-
- flash.c
-
-
-
-
-
- lowlevel_init.s
-
-
-
-
-
- Makefile
-
-
-
-
-
- smdk2410.c
-
-
-
-
-
- u-boot.lds
-
-
-
-
- (*BOARD) >
-
board目录主要包含特定于开发板的文件,其中config.mk中定义了代码段的链接地址:
25: TEXT_BASE = 0X33F80000
u-boot.lds 中定了以具体的链接规则, lowlevel_init.s中负责SDRAM的初始化,flash.c的底层驱动等,并含有负责本级目录下编译的Makefile文件,将本目录下需要被编译的项目添加进COBJS、SOBJS目标,指定依赖项,定义当前目录下的clean,distclean目标,后续的各个目录下的Makefile文件所完成工作基本和这个相同,就不在挨个注释了。
common 目录
- u-boot-1.1.6 >
-
- common >
-
-
- command.c
-
-
-
- main.c
-
-
-
- Makefile
-
-
-
- console.c
-
-
-
- flash.c
-
-
-
- usb.c
-
-
-
- cmd_*.c
-
-
-
- env_*.c
-
common目录下为处理器开发板无关的通用上层指令,基本为对底层驱动的封装。指令处理函数cmd_*.c,环境变量的处理函数e*nv_*.c*,其中 command.c中可以根据宏U_BOOT_CMD()自定义u-boot的指令,main.c中定义了main_loop()函数。
cpu 目录
- u-boot-1.1.6 >
-
- cpu >
-
-
- arm920t >
-
-
-
-
- s3c24x0 >
-
-
-
-
-
-
- serial.c
-
-
-
-
-
-
-
- interrupts.c
-
-
-
-
-
-
-
- i2c.c
-
-
-
-
-
-
-
- *.c
-
-
-
-
-
-
- config.mk
-
-
-
-
-
- cpu.c
-
-
-
-
-
- interrupts.c
-
-
-
-
-
- start.s
-
-
-
-
-
- Makefile
-
-
-
-
-
- (*SOC) >
-
-
cpu目录下为与具体处理器体系结构,soc相关的文件。 针对smdk2410开发板,所用cpu为属于arm920t,外围的搭配外设构成了sop及片上系统,这个soc具体为s3c24x0型。
目录中start.s为整个程序的入口点,完成最初的系统初始化,针对具体的s3c24x0处理器,含有对应的一些外设的驱动函数。
drivers 目录
- u-boot-1.1.6 >
-
- drivers >
-
-
- nand >
-
-
-
-
- nand.c
-
-
-
-
-
- Makefile
-
-
-
-
-
- nand_*.c
-
-
-
-
- nand_legacy >
-
-
-
-
- nand_legacy.c
-
-
-
-
-
- Makefile
-
-
-
-
- device*.c
-
-
-
- deviec*.h
-
drivers目录为各种通用驱动文件,基本上包含了全部的外围驱动,如网卡、USB、串口、LCD、Nand Flash等等。它们通过宏定义引用与具体开发板处理器相关的底层驱动。
include 目录
- u-boot-1.1.6 >
-
- include >
-
-
- asm-arm >
-
-
-
-
- arch-s3c24x0 >
-
-
-
-
-
-
- memory.h
-
-
-
-
-
-
- proc-armv >
-
-
-
-
-
- arch-* >
-
-
-
-
- configs >
-
-
-
-
- smdk2410.h
-
-
-
-
-
- (BOARD*).h
-
-
-
-
- Makefile
-
include目录包含系统的配置文件与头文件,其中configs子目录下的smdk2410.h文件完成了对整个U-BOOT的功能的裁剪配置,子目录 asm-arm -> arch-s3c24x0 >下的memory.h 完成了对各段大小的配置。
lib_arm 目录
- u-boot-1.1.6 >
-
- lib_arm >
-
-
- board.c
-
-
-
- cache.c
-
-
-
- armlinux.c
-
-
-
- Makefile
-
lib_arm目录下为与处理器结构相关的一些初始化文件,比较重要的如board.c文件,在后面分析u-boot的启动流程时会用到其中的很多初始化函数。
tools 目录
- u-boot-1.1.6 >
-
- tools >
tools目录下包含了一些相关工具。
其他目录与文件
- u-boot-1.1.6 >
-
- doc >
-
-
- README.*
-
-
- dtt >
-
- examples >
-
- fs >
-
-
- ext2 >
-
-
-
- cramfs >
-
-
-
- jffs2 >
-
-
-
- fs* >
-
-
-
- Makefile
-
-
- lib_generic >
-
- lib_<*ARCH>
-
- nand_spl >
-
- net >
-
- post >
-
- rtc >
-
- Makefile
-
- config.mk
-
- arm_config.mk
-
- (*ARCH)_config.mk
-
- mkconfig
-
- rules.mk
-
- readme.mk
-
- COPYING
-
- CREDITS
-
- CHANGELOG
-
- CHANGELOG-before-U-Boot-1.1.5
Makefile负责整个项目的构建,mkconfig脚本根据Makefile中调用它是传入的参数来配置整个项目,config.mk对整个项目的编译工具链及编译选项进行配置,arm_config.mk针对具体arm架构进行更细的编译参数配置,rules.mk定义了对目标_depend的编译规则。具体编译过程可参考前一篇文章 U-BOOT-1.1.6编译过程分析 。
net下为支持各种网络协议的文件,post下为开发板的上电自检程序,rtc下为实时时钟的驱动文件,doc下为特定于各个开发板的README文件,dtt目录下包含数字温度传感器等驱动文件, fs目录下为文件系统, lib_generic目录下为通用的库函数,像printf函数等。