uboot的目录分析
以下內(nèi)容源于朱有鵬嵌入式課程的學(xué)習(xí),如有侵權(quán),請(qǐng)告知?jiǎng)h除。
一、文件分析
1、九鼎官方uboot和三星原版uboot對(duì)比
- 不同版本的uboot或者同一版本不同人移植的uboot,目錄結(jié)構(gòu)和文件內(nèi)容都會(huì)有所不同,即可以自己根據(jù)需要去添加/刪除/更改目錄結(jié)構(gòu)。
- 九鼎在以三星的uboot為原材料進(jìn)行移植時(shí),刪除了很多不必要的文件夾/文件。
2、各文件介紹
(1).gitignore。git是一個(gè)版本管理工具(類似的還有svn),這個(gè)文件和git有關(guān),和uboot本身無(wú)關(guān)的,不用去管。
(2)arm_config.mk。后綴是.mk,是一個(gè)Makefile文件,將來(lái)在某個(gè)Makefile中會(huì)去調(diào)用它。
(3)三個(gè)Changelog文件。修改記錄文件,記錄uboot項(xiàng)目的版本變遷,以及每個(gè)版本較上個(gè)版本修改的記錄。正式的項(xiàng)目都有這些記錄的。主要是給維護(hù)uboot的人用的。
(4)config.mk。和arm_config.mk性質(zhì)差不多。
(5)COPYING。版權(quán)聲明,uboot本身是GPL許可證的。
(6)CREDITS。鳴謝,里面記錄了對(duì)uboot有貢獻(xiàn)的人,感謝目錄。
(7)image_split。一個(gè)腳本,看說(shuō)明是用來(lái)分割uboot.bin到BL1的,暫時(shí)用不到,先不管。
(8)MAINTAINERS。維護(hù)者,就是當(dāng)前在參與維護(hù)uboot源碼的社區(qū)工作者。
(9)MAKEALL。一個(gè)腳本,應(yīng)該是幫助編譯uboot的。
(10)Makefile:此文件是uboot源代碼的主Makefile,用此文件來(lái)管理uboot的編譯。
(11)mk。快速編譯的腳本,其實(shí)就是先清理然后配置然后編譯而已。
#!/bin/sh make distclean make x210_sd_config make -j4 (12)mkconfig:此文件是uboot配置階段的主要配置腳本。uboot的可移植性很大程度依靠這個(gè)配置腳本。(13)mkmovi。一個(gè)腳本,和iNand/SD卡啟動(dòng)有關(guān)。
(14)README。所有的軟件都有README,其實(shí)就是個(gè)簡(jiǎn)單的使用說(shuō)明書。
(15)rules.mk。這個(gè)文件是uboot的Makefile的使用規(guī)則。本身非常重要,但是不用分析。
總結(jié):重要文件有mkconfig和Makefile,一個(gè)負(fù)責(zé)uboot的配置,一個(gè)負(fù)責(zé)編譯。
二、目錄分析
(1)api。硬件無(wú)關(guān)的功能函數(shù)的API。uboot移植時(shí)基本不用管,這些函數(shù)是uboot本身使用的。
(2)api_examples。 API相關(guān)的測(cè)試事例代碼。
(3)board
- board文件夾下每一個(gè)文件都代表一個(gè)開發(fā)板,這個(gè)文件夾下面放的文件就是用來(lái)描述這一個(gè)開發(fā)板的信息的。
- board目錄下有多少個(gè)文件夾,就表示當(dāng)前的uboot支持多少個(gè)開發(fā)板。
- 這個(gè)文件夾存放一些與具體硬件無(wú)關(guān)的、普遍適用的一些代碼。
- 譬如控制臺(tái)實(shí)現(xiàn)、crc校驗(yàn)的。
- 但是更多的主要是兩類:一類是cmd開頭的,是用來(lái)實(shí)現(xiàn)uboot的命令系統(tǒng)的;另一類是env開頭的,是用來(lái)實(shí)現(xiàn)環(huán)境變量的。
(5)cpu
- 這個(gè)目錄是SoC相關(guān)的,存放與SoC相關(guān)初始化和控制的代碼(譬如CPU的、中斷的、串口等SoC內(nèi)部外設(shè)的,包括起始代碼start.S)。
- 里面很多子文件夾,每一個(gè)子文件夾就是一個(gè)SoC系列。
- 這個(gè)文件和硬件嚴(yán)格相關(guān),移植時(shí)也是要注意的。
(6)disk。與磁盤有關(guān)。
(7)doc。文檔目錄,里面存放了很多uboot相關(guān)文檔,這些文檔可以幫助理解uboot代碼。
(8)drivers
- 存放的是從linux源代碼中拷貝過(guò)來(lái)的linux設(shè)備驅(qū)動(dòng),主要是開發(fā)板上必須用到的一些驅(qū)動(dòng),如網(wǎng)卡驅(qū)動(dòng)、Inand/SD卡、NandFlash等的驅(qū)動(dòng)。
- uboot中的驅(qū)動(dòng)其實(shí)就是linux中的驅(qū)動(dòng),uboot在一定程度上移植了linux的驅(qū)動(dòng)。
(9)examples。示例代碼。
(10)fs
- filesystem,文件系統(tǒng)。
- 也是從linux源代碼中移植過(guò)來(lái)的,用來(lái)管理Flash等資源。
(11)include,頭文件目錄
- uboot和linux kernel在管理頭文件時(shí)都采用了同一個(gè)思路,即把所有的頭文件全部集中存放在include目錄下,而不是頭文件跟著自己對(duì)應(yīng)的c文件。
- 因此在uboot中頭文件包含時(shí)路徑結(jié)構(gòu)要在這里去找。
(12)lib_開頭的目錄,典型的如lib_arm和lib_generic
- 這是架構(gòu)相關(guān)的庫(kù)文件。
- 譬如lib_arm里面就是arm架構(gòu)使用的一些庫(kù)文件。lib_generic里是所有架構(gòu)通用的庫(kù)文件。
- 這類文件夾中的內(nèi)容移植時(shí)基本不用管。
(13)libfdt
- 與設(shè)備樹有關(guān)。linux內(nèi)核在3.4左右的版本的時(shí)候更改了啟動(dòng)傳參的機(jī)制,改用設(shè)備樹來(lái)進(jìn)行啟動(dòng)傳參,進(jìn)行硬件信息的描述。
(14)nand_spl。nand相關(guān)的。
(15)net。
- 網(wǎng)絡(luò)相關(guān)的代碼,譬如uboot中的tftp nfs ping都是在這里實(shí)現(xiàn)的。
(16)onenand開頭的,是onenand相關(guān)的代碼,是三星加的,標(biāo)準(zhǔn)uboot中應(yīng)該是沒(méi)有的。
(17)post。
(18)sd_fusing
- 燒錄uboot鏡像到SD卡的代碼。
(19)tools。里面是一些工具類的代碼。譬如mkimage。
總結(jié):重要的目錄有board、common、cpu、drivers、include、lib_arm、lib_generic、sd_fusing等文件夾。
總結(jié)
以上是生活随笔為你收集整理的uboot的目录分析的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 互联网晚报 | 1月21日 星期五 |
- 下一篇: 对Tabular方法的总结