1. 程式人生 > >四.linux開發之uboot移植(四)——uboot初體驗記錄

四.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中會設定交叉編譯工具鏈的路徑和名字,必須確保這個路徑和名字和我們自己裝的一致,否則編譯會出錯。 這裡寫圖片描述

(2)確保了以上2點,即可進行編譯。編譯很簡單,直接make即可。或者

可以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個,然後確定。 這裡寫圖片描述