1.1 准备工作
解压缩:tar -xjf u-boot-1.1.6.tar.bz2
打补丁:patch -p1 < ../u-boot-1.1.6_jz2440.patch
1 patching file board/100ask24x0/100ask24x0.c 2 patching file board/100ask24x0/boot_init.c 3 patching file board/100ask24x0/config.mk 4 patching file board/100ask24x0/flash.c 5 patching file board/100ask24x0/lowlevel_init.S 6 patching file board/100ask24x0/Makefile 7 patching file board/100ask24x0/u-boot.lds 8 patching file board/MAI/bios_emulator/scitech/src/v86bios/lex.l 9 patching file common/cmd_bootm.c 10 patching file common/cmd_load.c 11 patching file common/cmd_menu.c 12 patching file common/cmd_nand.c 13 patching file common/cmd_nand_legacy.c 14 patching file common/cmd_usbslave.c 15 patching file common/env_nand.c 16 patching file common/main.c 17 patching file common/Makefile 18 patching file cpu/arm920t/cpu.c 19 patching file cpu/arm920t/s3c24x0/interrupts.c 20 patching file cpu/arm920t/s3c24x0/Makefile 21 patching file cpu/arm920t/s3c24x0/nand_flash.c 22 patching file cpu/arm920t/s3c24x0/nand_flash_legacy.c 23 patching file cpu/arm920t/s3c24x0/speed.c 24 patching file cpu/arm920t/start.S 25 patching file doc/README.SBC8560 26 patching file drivers/cfi_flash.c 27 patching file drivers/dm9000x.c 28 patching file drivers/jedec_flash.c 29 patching file drivers/Makefile 30 patching file drivers/nand/nand_base.c 31 patching file drivers/nand/nand_ids.c 32 patching file drivers/nand/nand_util.c 33 patching file drivers/nand_legacy/nand_legacy.c 34 patching file drivers/usb/2440usb.h 35 patching file drivers/usb/Makefile 36 patching file drivers/usb/mrgtmp0 37 patching file drivers/usb/usb.h 38 patching file drivers/usb/usbin.c 39 patching file drivers/usb/usbin.h 40 patching file drivers/usb/usbinit.c 41 patching file drivers/usb/usbinit.h 42 patching file drivers/usb/usblib.c 43 patching file drivers/usb/usblib.h 44 patching file drivers/usb/usbmain.c 45 patching file drivers/usb/usbmain.h 46 patching file drivers/usb/usbout.c 47 patching file drivers/usb/usbout.h 48 patching file drivers/usb/usbsetup.c 49 patching file drivers/usb/usbsetup.h 50 patching file include/asm-arm/mach-types.h 51 patching file include/asm-arm/types.h 52 patching file include/asm-arm/u-boot-arm.h 53 patching file include/configs/100ask24x0.h 54 patching file include/configs/SBC8560.h 55 patching file include/def.h 56 patching file include/flash.h 57 patching file include/nand.h 58 patching file include/s3c2410.h 59 patching file include/s3c24x0.h 60 patching file include/usb.h 61 patching file lib_arm/armlinux.c 62 patching file lib_arm/board.c 63 patching file Makefile
1.2 目录结构
1.2.1 根目录下文件
- arm_config.mk:后缀是.mk,是一个Makefile文件,将来在某个Makefile中会去调用它。用于 arm 架构
- avr32_config.mk:后缀是.mk,是一个Makefile文件,将来在某个Makefile中会去调用它。用于 avr32 架构
- blackfin_config.mk
- CHANGELOG:修改记录文件,该文件记录了这个uboot项目的版本变迁以及每个版本较上个版本修改的记录。正式的项目都有这些记录的。可以直接忽略,主要是给维护uboot的人用的。这个是 1.1.5 之后的 changelog
- CHANGELOG-before-U-Boot-1.1.5:修改记录文件,该文件记录了这个uboot项目的版本变迁以及每个版本较上个版本修改的记录。正式的项目都有这些记录的。可以直接忽略,主要是给维护uboot的人用的。
- config.mk:和 arm_config.mk ,makefile 文件
- COPYING:版权声明,uboot本身是GPL许可证的。
- CREDITS:鸣谢,里面记录了对uboot有贡献的人,感谢目录。
- i386_config.mk:后缀是.mk,是一个Makefile文件,将来在某个Makefile中会去调用它。用于 i386 架构
- m68k_config.mk:后缀是.mk,是一个Makefile文件,将来在某个Makefile中会去调用它。用于 m68k 架构
- MAINTAINERS:维护者,就是当前在参与维护uboot源码的社区工作者。
- MAKEALL:一个脚本,帮助编译uboot的。
- Makefile:是uboot源代码的主Makefile,将来整个uboot被编译时就是用这个Makefile管理编译的
- microblaze_config.mk:后缀是.mk,是一个Makefile文件,将来在某个Makefile中会去调用它。microblaze 架构使用
- mips_config.mk:后缀是.mk,是一个Makefile文件,将来在某个Makefile中会去调用它。mips 架构使用
- mkconfig:是uboot配置阶段的主要配置脚本。uboot的可移植性很大程度就是靠这个配置脚本在维护的。
- nios_config.mk:后缀是.mk,是一个Makefile文件,将来在某个Makefile中会去调用它。nios 架构使用
- nios2_config.mk:后缀是.mk,是一个Makefile文件,将来在某个Makefile中会去调用它。nios2 架构使用
- ppc_config.mk:后缀是.mk,是一个Makefile文件,将来在某个Makefile中会去调用它。ppc 架构使用
- README:所有的软件都有README,一般拿到一个东西要先读README,这个东西其实就是个简单的使用说明书。
- rules.mk:这个文件是我们uboot的Makefile使用的规则,本身非常重要,但是我们不去分析他,不去看他。
对我们分析 uboot 代码重要的有2个:mkconfig和Makefile。一个负责uboot的配置,一个负责编译。
1.2.2 目录
- board:board是板的意思,板就是开发板。board文件夹下每一个文件都代表一个开发板,这个文件夹下面放的文件就是用来描述这一个开发板的信息的。board目录下有多少个文件夹,就表示当前这个uboot已经被移植到多少个开发板上了(当前的uboot支持多少个开发板)。
- common:common 是普遍的普通的,这个文件夹下放的是一些与具体硬件无关的普遍适用的一些代码。譬如控制台实现、crc校验的。但是更多的主要是两类:一类是cmd开头的,是用来实现uboot的命令系统的;另一类是env开头的,是用来实现环境变量的。
- cpu:这个目录是SoC相关的,里面存放的代码都是SoC相关初始化和控制代码(譬如CPU的、中断的、串口等SoC内部外设的,包括起始代码start.S也在这里)。里面很多子文件夹,每一个子文件夹就是一个SoC系列。
- 注意:这个问价是严格和硬件相关的,因此移植时也是要注意的。但是因为这个文件夹内都是SoC有关的,我们自己的开发板和三星的开发板虽然板子设计不同但是SoC都是同一个,因此实际移植时这个目录几乎不用动。
- disk:磁盘有关的
- doc:文档目录,里面存放了很多uboot相关文档,这些文档可以帮助我们理解uboot代码。但是因为是纯英文的,而且很杂乱,所以几乎没用。
- drivers:顾名思义,驱动。这里面放的就是从linux源代码中扣出来的原封不动的linux设备驱动,主要是开发板上必须用到的一些驱动,如网卡驱动、Inand/SD卡、NandFlash等的驱动。要知道:uboot中的驱动其实就是linux中的驱动,uboot在一定程度上移植了linux的驱动给自己用。但是linux是操作系统而uboot只是个裸机程序,因此这种移植会有不同,其实,uboot中的驱动其实是linux中的驱动的一部分。
- dtt:
- examples:示例代码
- fs:filesystem,文件系统。这个也是从linux源代码中移植过来的,用来管理Flash等资源。
- include:头文件目录。uboot和linux kernel在管理头文件时都采用了同一个思路,就是把所有的头文件全部集中存放在include目录下,而不是头文件跟着自己对应的c文件。所以在uboot中头文件包含时路径结构要在这里去找。
- lib_arm:架构相关的库文件。lib_arm里面就是arm架构使用的一些库文件。
- lib_avr32:架构相关的库文件
- lib_blackfin:架构相关的库文件
- lib_generic:架构相关的库文件。lib_generic里是所有架构通用的库文件。
- lib_i386:架构相关的库文件
- lib_m68k:架构相关的库文件
- lib_microblaze:架构相关的库文件
- lib_mips:架构相关的库文件
- lib_nios:架构相关的库文件
- lib_nios2:架构相关的库文件
- lib_ppc:架构相关的库文件
- nand_spl:nand相关的
- net:网络相关的代码,譬如uboot中的tftp nfs ping命令 都是在这里实现的。
- post:不清除
- rtc:时钟驱动
- tools:里面是一些工具类的代码。譬如mkimage。
文件夹里面比较重要的,后面会分析涉及到的有:board、common、cpu、drivers、include、lib_arm、lib_generic