(1).gitignore。git工具的檔案,git是一個版本管理工具(類似的還有個svn),這個檔案和git有關,和uboot本身無關的,不用去管。
(2)arm_config.mk。字尾是.mk,是一個Makefile檔案,将來在某個Makefile中會去調用它。
(3)三個Changelog檔案,修改記錄檔案,該檔案記錄了這個uboot項目的版本變遷以及每個版本較上個版本修改的記錄。正式的項目都有這些記錄的。可以直接忽略,主要是給維護uboot的人用的。
(4)config.mk。和arm_config.mk差不多性質。
(5)COPYING。版權聲明,uboot本身是GPL許可證的。
(6)CREDITS。鳴謝,裡面記錄了對uboot有貢獻的人,感謝目錄。
(7)image_split。一個腳本,看說明是用來分割uboot.bin到BL1的,暫時用不到,先不管。
(8)MAINTAINERS。維護者,就是目前在參與維護uboot源碼的社群工作者。
(9)MAKEALL。一個腳本,應該是幫助編譯uboot的。
(10)Makefile。這個很重要,是uboot源代碼的主Makefile,将來整個uboot被編譯時就是用這個Makefile管理編譯的,是以我們在下個課程中研究uboot配置編譯過程時就要分析這個Makefile。
(11)mk。快速編譯的腳本,其實就是先清理然後配置然後編譯而已。
(12)mkconfig。這個很重要,是uboot配置階段的主要配置腳本。uboot的可移植性很大程度就是靠這個配置腳本在維護的。我們在下個課程中研究uboot配置編譯過程時就要分析這個配置腳本。
(13)mkmovi。暫時不去管他,一個腳本,和iNand/SD卡啟動有關
(14)README。所有的軟體都有README,一般拿到一個東西要先讀README,這個東西其實就是個簡單的使用說明書。
(15)rules.mk。這個檔案是我們uboot的Makefile使用的規則,本身非常重要,但是我們不去分析他,不去看他。
總結:以上這些檔案中,對我們比較重要,需要認真看的有2個:mkconfig和Makefile。一個負責uboot的配置,一個負責編譯。
(1)api. 硬體無關的功能函數的API。uboot移植時基本不用管,這些函數是uboot本身使用的。
(2)api_examples. API相關的測試事例代碼。
(3)board。board是闆的意思,闆就是開發闆。board檔案夾下每一個檔案都代表一個開發闆,這個檔案夾下面放的檔案就是用來描述這一個開發闆的資訊的。board目錄下有多少個檔案夾,就表示目前這個uboot已經被移植到多少個開發闆上了(目前的uboot支援多少個開發闆)。
(4)common。common是普遍的普通的,這個檔案夾下放的是一些與具體硬體無關的普遍适用的一些代碼。譬如控制台實作、crc校驗的。但是更多的主要是兩類:一類是cmd開頭的,是用來實作uboot的指令系統的;另一類是env開頭的,是用來實作環境變量的。
(5)cpu。這個目錄是SoC相關的,裡面存放的代碼都是SoC相關初始化和控制代碼(譬如CPU的、中斷的、序列槽等SoC内部外設的,包括起始代碼start.S也在這裡)。裡面很多子檔案夾,每一個子檔案夾就是一個SoC系列。
注意:這個問價是嚴格和硬體相關的,是以移植時也是要注意的。但是因為這個檔案夾内都是SoC有關的,我們自己的開發闆和三星的開發闆雖然闆子設計不同但是SoC都是同一個,是以實際移植時這個目錄幾乎不用動。
(6)disk。磁盤有關的,沒研究過,沒用過。
(7)doc。文檔目錄,裡面存放了很多uboot相關文檔,這些文檔可以幫助我們了解uboot代碼。但是因為是純英文的,而且很雜亂,是以幾乎沒用。
(8)drivers。顧名思義,驅動。這裡面放的就是從linux源代碼中扣出來的原封不動的linux裝置驅動,主要是開發闆上必須用到的一些驅動,如網卡驅動、Inand/SD卡、NandFlash等的驅動。要知道:uboot中的驅動其實就是linux中的驅動,uboot在一定程度上移植了linux的驅動給自己用。但是linux是作業系統而uboot隻是個裸機程式,是以這種移植會有不同,讓我說:uboot中的驅動其實是linux中的驅動的一部分。
(9)examples。示例代碼,沒用過。
(10)fs。filesystem,檔案系統。這個也是從linux源代碼中移植過來的,用來管理Flash等資源。
(11)include。頭檔案目錄。uboot和linux kernel在管理頭檔案時都采用了同一個思路,就是把所有的頭檔案全部集中存放在include目錄下,而不是頭檔案跟着自己對應的c檔案。是以在uboot中頭檔案包含時路徑結構要在這裡去找。
(12)lib_開頭的一坨。(典型的lib_arm和lib_generic)架構相關的庫檔案。譬如lib_arm裡面就是arm架構使用的一些庫檔案。lib_generic裡是所有架構通用的庫檔案。這類檔案夾中的内容移植時基本不用管。
(13)libfdt。裝置樹有關的。linux核心在3.4左右的版本的時候更改了啟動傳參的機制,改用裝置樹來進行啟動傳參,進行硬體資訊的描述了。
(14)nand_spl。nand相關的,不講。
(15)net。網絡相關的代碼,譬如uboot中的tftp nfs ping指令 都是在這裡實作的。
(16)onenand開頭的,是onenand相關的代碼,是三星加的,标準uboot中應該是沒有的。
(17)post。沒關注過,不知道幹嘛的。
(18)sd_fusing。這裡面代碼實作了燒錄uboot鏡像到SD卡的代碼。後面要仔細研究的。
(19)tools。裡面是一些工具類的代碼。譬如mkimage。
總結:檔案夾裡面比較重要的,後面會分析涉及到的有:board、common、cpu、drivers、include、lib_arm、lib_generic、sd_fusing