1. 程式人生 > >一、文檔目錄分析

一、文檔目錄分析

設計 tmp 部分 ack oar BE 會有 HA color

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

一、文檔目錄分析