四.linux開發之uboot移植(四)——uboot初體驗記錄
一.X210官方uboot配置編譯實踐
將整個BSP打包檔案弄到linux的源生目錄中去解壓分析,不要在windows中的共享資料夾中解壓開。( 除非你的程式碼只在windows下去分析而不去編譯,如果你想編譯工程就一定不要在windows共享資料夾下,否則會出錯)
(1)將共享檔案下的bsp所有檔案及其子目錄複製複製到目錄/root/下:
(2)解壓:tar -zcvf /home/xahot.tar.gz /xahot
tar -zcvf 打包後生成的檔名全路徑 要打包的目錄
例子:把/xahot資料夾打包後生成一個/home/xahot.tar.gz的檔案。 解壓後如下如下:
(3)配置:
配置方法是:首先cd進入uboot原始碼的根目錄,然後在根目錄下執行:
make x210_sd_config。執行配置命令後,如果出現:Configuring for x210_sd board…
說明配置好了
(4)編譯得到uboot.bin
(1)編譯之前一定要注意檢查arm-linux-gcc對不對,檢查份2步:
第一步:檢查當前編譯環境中有沒有安裝合適的arm-linux-gcc。我們裝的是arm-2009q3,因為這個是三星官方、九鼎官方開發uboot時使用的。 第二步:檢查當前目錄下(uboot根目錄)的Makefile中編譯器的設定是否正確。在工程的總Makefile中會設定交叉編譯工具鏈的路徑和名字,必須確保這個路徑和名字和我們自己裝的一致,否則編譯會出錯。
可以make -j4 (多執行緒編譯,主機如果是多核心電腦,可以嘗試多執行緒編譯,會快一些)
二.uboot的原始碼目錄分析
1.各檔案介紹
(1).gitignore。git工具的檔案,git是一個版本管理工具(類似的還有個svn),這個檔案和git有關,和uboot本身無關的,不用去管。
(2)arm_config.mk。字尾是.mk,是一個Makefile檔案,將來在某個Makefile中會去呼叫它。
(3)三個Changelog檔案,修改記錄檔案,該檔案記錄了這個uboot專案的版本變遷以及每個版本較上個版本修改的記錄。正式的專案都有這些記錄的。可以直接忽略,主要是給維護uboot的人用的。
(4)config.mk。和arm_config.mk差不多性質。
(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的配置,一個負責編譯。我們在第四部分的課程中會詳細講解分析這兩個東西。*
2.uboot的原始碼資料夾結構分析
1、cpu
本資料夾下的子檔案與處理器相關,每個資料夾代表一種CPU系列。每個子目錄中都包括cpu.c、interrupts.c、start.S檔案。
cpu.c主要用於初始化CPU、設定指令Cache和資料Cache等
interrupt.c主要用於設定系統的各種中斷和異常
start.S是U-boot啟動時執行的第一個檔案,主要做最早期的系統初始化,程式碼重定向和設定系統堆疊,為進入U-boot第二階段的C程式奠定基礎。
S5PV210晶片對應的資料夾是s5pc11x。
cpu/s5pc11x/s5pc110/cpu\_init.S主要用於SDRAM記憶體的初始化設定。
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
2、board
本檔案下的子檔案與開發板相關,每一個子檔案代表一個晶片廠家,晶片廠家資料夾下存放的每一個子資料夾是一種開發板,由於歷史原因,board目錄下尚保留有大量的開發板資料夾沒有歸檔到晶片廠家資料夾內,保持相容性,因此整體顯得比較混亂。如samsung的smdk2400、smdk2410開發板就位於samsung資料夾外。
S5PV210晶片對應的資料夾位於board/samsung/smdkc110,資料夾內的lowlevel\_init.S檔案主要用於時鐘、串列埠、MMU、Flash底層驅動、板級初始化,u-boot.lds檔案是連結指令碼檔案,對於工程專案編譯後期的連結階段非常重要,決定了程式的組裝。
- 1
3、common
本資料夾下存放與處理器體系結構無關的通用程式碼,uboot的命令解析程式碼/common/command.c、所有命令的上層程式碼cmd\_\*.c、uboot環境變數處理程式碼env\_\*.c、CRC校驗等都位於本目錄下。
- 1
4、drivers
本目錄下存放所有外圍晶片的驅動,網絡卡、USB、串列埠、LCD、Nand Flash等。
- 1
5、disk
本目錄存放於磁碟驅動的分割槽處理程式碼
- 1
6、fs
本目錄下存放檔案系統相關的程式碼,每一個子資料夾代表一種檔案系統。
- 1
7、net
本目錄下存放於網路協議相關的程式碼
- 1
8、doc
本目錄下存放uboot的說明文件。
- 1
9、api、api_examples、examples
外部擴充套件程式的API和示例
- 1
10、include
標頭檔案,包括各種CPU的暫存器定義,檔案系統、網路等等configs子目錄下的檔案是與目標板相關的配置標頭檔案
- 1
11、lib_xxx
lib\_arm、lib\_avr32、lib\_blackfin、lib\_generic、lib\_i386、lib\_m68k、lib\_microblaze、lib\_mips、lib\_nios、lib\_nios2、lib\_ppc、lib\_sh、lib\_sparc
- 1
每一個資料夾代表一種CPU體系架構。與S5PV210相關的資料夾有lib_arm、lib_generic,lib_generic目錄存放的是各CPU體系架構通用的加密演算法、壓縮演算法、字元處理相關程式碼。在每一種CPU體系架構資料夾內都存在board.c,是uboot啟動第二階段程式碼入口函式和相關初始化函式存放的地方。
12、libfdt
本目錄下存放的是裝置數相關的程式碼。
- 1
13、tools
編譯S-Record或uboot映像等相關工具,如製作bootm引導的核心映像檔案工具mkimage原始碼。
- 1
14、post
上電自檢相關程式碼
- 1
15、nand_spl、onenand_bl1、onenand_ipl
Nand、onenand啟動相關的程式碼。
- 1
16、sd_fusing
本目錄下存放的是燒錄相關的工具程式碼
17、工程編譯配置檔案
Makefile、MAKEALL、config.mk、rules.mk、mkconfig
控制工程編譯過程的主Makefile檔案和規則檔案
config.mk檔案內的TEXT\_BASE指定了程式碼在記憶體中的地址。
- 1
- 2
- 3
- 4
- 5
18、版本、版權說明檔案
CHANGELOG、CHANGELOG-before-U-Boot-1.1.5、COPYING、CREDITS、MAINTAINERS、README、Changelog\_Samsung。
- 1
三.SourceInsight的基本使用
1.建立工程及新增檔案
(1)首先要建立一個工程。選單欄:Project->new project。
(2)工程專案檔案和工程中管理的原始碼檔案目錄可以不同,但是我一般習慣放在一起。放在:E:\Linux\2.Uboot_DEMO\uboot\uboot_jiuding\SI_Proj
點確定,進入new project setting,直接點ok進入下一步。
(3)到了向專案中新增檔案的步驟。
在左側選擇uboot-jiuding這個目錄,然後點右側邊欄的add tree即可新增。
(4)本來應該已經結束了,但是有遺留問題。因為SI軟體有個特點,它只能發現自己識別了的檔案型別,對於它未識別的檔案型別它就看不到。譬如start.S檔案就未包含在內,因為SI預設不認識.S字尾的檔案。
解決方案:第一種是自己配置; (5)解決了4中的問題然後再次新增檔案。選單欄 Project->Add and Remove Project Files 再次瀏覽到uboot-jiuding目錄下,再次add tree,發現添加了額外的19個檔案。
2.解析工程檔案
我們使用SI查閱原始碼前應該預先進行原始碼解析,為了讓SI查詢速度變得快
在選單欄Project->Syneronize Files,選中上面2個,然後確定。