u-boot介紹與編譯過程分析與簡要移植步驟_第1頁
u-boot介紹與編譯過程分析與簡要移植步驟_第2頁
u-boot介紹與編譯過程分析與簡要移植步驟_第3頁
u-boot介紹與編譯過程分析與簡要移植步驟_第4頁
u-boot介紹與編譯過程分析與簡要移植步驟_第5頁
已閱讀5頁,還剩13頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

目錄

目錄1

u-boot介紹、編譯流程分析及簡要移植步驟2

102

1.0復(fù)習(xí)2

1.1內(nèi)容提要2

1.2uboot源碼獲得2

1.2.1uboot官方網(wǎng)站2

1.2.2已經(jīng)發(fā)發(fā)布的uboot版本列表2

1.3uboot目錄介紹7

1.4uboot配置編譯分析8

1.5uboot移植簡要步驟8

1.5.2在u-boot添加一個xyd4412開發(fā)板相關(guān)文件12

1.6板級配置文件介紹14

1.7u-boot添加命令16

1.7.1基本知識介紹16

1.7.2添加自定義命令示例:17

u?boot介紹、編譯流程分析及簡要移植步驟

10

1.0復(fù)習(xí)

1.1內(nèi)容提要

1.uboot源碼獲得

2.uboot目錄介紹

3.uboot編譯過程

4.uboot移植簡要步驟

自己增加一個xyd4412開發(fā)板

xyd4412.h文件介紹

怎么添加一個命令

1.2uboot源碼獲得

1.2.1uboot官方網(wǎng)站

uboot的官方網(wǎng)站是http:〃ww\v.denx.de/,源碼下載頁面是:

http:〃www.denx.de/wiki/U-Boot/SourceCode。

9PatentFree

U-BootSourceCode是薪派碼借用方式才訐L'.

Topics?ThecurrentsourcecodeisavailablethrougH力「gtrepository部分源碼在這里

?ReleasedVersions(andsomespecialsnapshots)areavailablefromtheAmazonQoudDriveandfromtheDEN)tFTPserverI

UBootHome

?Snapshotsareavailableusingtheclever?snapshot,'featureofthegitserver(seethe"snapshot,linkafterallcommitentries)

DocumentationZbNOTE:eventhoughthedownloadwillbeabzip2compressedtarball,andthefileonyourdiskwillbenamed

compressedatall.Thisisa"feature"ofyourwebbrowser;andwecannotdoanythingtohelpit.

SourceCode

?www.denx.dealsohoststheCustodianaittrees

ThaCuot-ndi^n^?CVSisnolongersupported.

?[TheoldprojectpageatSurceForgfiisnolongerusedanddeed.

Custodian舊源碼下載

1.2.2已經(jīng)發(fā)發(fā)布的uboot版本列表

直接下載:ftp:〃ftp.denx.de/pub/u-boot/

以下給出FTP服務(wù)器提供下載的源碼版本:

u-boot-0.2.0.tar.bz22734KB2002-12-170:00:00

u-boot-0.2.3-2003-03-14.tar.bz22847KB2003-03-140:00:00

u-boot-0.3.0.tar.bz22934KB2003-04-090:00:00

u-boot-0.3.1.tar.bz22948KB2003-04-210:00:00

u-boot-0.4.0.tar.bz23197KB2003-06-270:00:00

u-boot-0.4.Ltar.bz23189KB2003-06-290:00:00

u-boot-0.4.2.tarbz23192KB2003-07-070:00:00

u-boot-0.4.3.tar.bz23216KB2003-07-160:00:00

u-boot-0.4.4.tar.bz23222KE2003-07-170:00:00

u-boot-0.4.5.tar.bz23231KB2003-08-080:00:00

u-boot-0.4.6.tar.bz23231KE2003-08-170:00:00

u-boot-0.4.7.tar.bz23256KB2003-09-100:00:00

u-boot-0.4.8.tar.bz23545KB2003-09-110:00:00

u-boot-1.0.0.tar.bz23791KB2003-10-310:00:00

u-boot-L0.Ltar.bz24036KB2004-01-060:00:00

u-boot-1.0.2.tar.bz24093KB2004-02-120:00:00

u-boot-LL0.tar.bz24364KB2004-04-110:00:00

u-boot-l.l.Ltar.bz24413KB2004-04-250:00:00

u-boot-1.1.2.tar.bz25214KB2005-01-020:00:00

u-boot-1.1.3.tar.bz25472KB2005-08-140:00:00

u-boot-l.Ld-R7ZlBSSgd.tar.bzZ6296KE2006-08-120:00:00

u-boot-l.L4-adlOafb39.tar.bz26296KB2006-08-100:00:00

u-boot-LL4.tar.bz25806KB2005-12-170:00:00

u-boot-1.1.5.tar.bz26322KB2006-10-200:00:00

u-boot-l.16tar.bz26402KB2006-11-020:00:00

u-boot-1.2.0.tar.bz26767KB2007-01-080:00:00

u-boot-1.3.0-rcl.tar.bz26707KB2007-09-080:00:00

u-boot-1.3.0-rc2.tar.bz26715KB2007-09-200:00:00

u-boot-L3.0-rc3.tar.bz26566KB2007-10-140:00:00

u-boot-1.3.0-rc4.tar.bz26735KB2007-11-190:00:00

u-boot-1.3.0.tar.bz26737KB2007-11-190:00:00

u-boot-1.3.Ltar.bz26758KE2007-12-060:00:00

u-boot-L3.2-rcl.tar.bz27128KB2008-02-150:00:00

u-boot-L3.2-rc2.tar.bz27130KB2008-02-240:00:00

u-boot-1.3.2-rc3.tar.bz27132KB2008-03-020:00:00

u-boot-L3.2.tar.bz27134KB2008-03-090:00:00

u-boot-133-rcl.tar.bz27365KB2008-04-260:00:00

u-boot-L3.3-rc2.tar.bz27362KB2008-04-290:00:00

u-boot-1.3.3-rc3.tar.bz27368KB2008-05-040:00:00

u-boot-2010.09-rc2.tar.bz28049KB2010-09-190:00:00

u-boot-2010.09.tar.bz28041KB2010-09-280:00:00

u-boot-2010.12-rcl.tar.bz28062KB2010-10-270:00:00

u-boot-2010.12-rc2.tar.bz28044KB2010-11-280:00:00

u-boot-2010.12-rc3.tar.bz28048KB2010-12-170:00:00

u-boot-2010.12.tar.bz28046KE2010-12-220:00:00

u-boot-2011.03-rcl.tar.bz28098KB2011-02-020:00:00

u-boot-2011.03-rc2.tar.bz28151KE2011-04-010:00:00

u-boot-201L03.tar.bz28148KB2011-03-310:00:00

u-boot-201L06-rcl.tar.bz28270KB2011-05-190:00:00

u-boot-201L06-rc2.tar.bz28291KB2011-06-020:00:00

u-boot-2011.06-rc3.tar.bz28292KB2011-06-220:00:00

u-boot-201L06.tar.bz28272KB2011-06-270:00:00

u-boot-2011.09-rcl.tar.bz28239KB2011-09-110:00:00

u-boot-2011.09-rc2.tar.bz28240KB2011-09-220:00:00

u-boot-2011.09.tar.bz28233KB2011-09-290:00:00

u-boot-2011.12-rcl.tar.bz28404KB2011-12-120:00:00

u-boot-201L12-rc2.tar.bz28407KB2011-12-190:00:00

u-boot-201L12-rc3.tar.bz28405KE2011-12-210:00:00

u-boot-201L12.tar.bz28409KB2011-12-230:00:00

u-boot-2012.04-rcl.tar.bz28604KB2012-04-180:00:00

u-boot-2012.04-rc2.tar.bz28625KB2012-04-180:00:00

u-boot-2012.04-rc3.tar.bz28623KB2012-04-180:00:00

u-boot-2012.04.0Ltar.bz28640KB2012-04-250:00:00

u-boot-2012.04.tar.bz28639KB2012-04-210:00:00

u-boot-2012.07-rcl.tar.bz28946KB2012-07-100:00:00

u-boot-2012.07-rc2.tar.bz28937KB2012-07-220:00:00

u-boot-2012.07-rc3.tar.bz28936KB2012-07-270:00:00

u-boot-2012.07.tar.bz28939KE2012-07-300:00:00

u-boot-2012.10-rcl.tar.bz29174KB2012-10-040:00:00

u-boot-2012.10-rc2.tar.bz29196KB2012-10-040:00:00

u-boot-2012.10-rc3.tar.bz29237KB2012-10-080:00:00

u-boot-2012.10.tar.bz29229KB2012-10-150:00:00

u-boot-2013.01-rcl.tar.bz29218KB2013-01-160:00:00

u-boot-2013.01-rc2.tar.bz29417KB2013-01-160:00:00

u-boot-2013.01-rc3.tar.bz29488KB2013-01-160:00:00

u-boot-2013.01.01.tar.bz29482KB2013-02-010:00:00

u-boot-2013.01.tar.bz29489KB2013-01-160:00:00

u-boot-2013.04-rcl.tar.bz29463KB2013-03-050:00:00

u-boot-2013.04-rc2.tar.bz29577KB2013-04-040:00:00

u-boot-2013.04-rc3.tar.bz29613KB2013-04-160:00:00

u-boot-2013.04.tar.bz29607KE2013-04-190:00:00

u-boot-2013.07-rcl.tar.bz29662KB2013-06-140:00:00

u-boot-2013.07-rc2.tar.bz29762KE2013-07-040:00:00

u-boot-2013.07-rc3.tar.bz29828KB2013-07-180:00:00

u-boot-2013.07.tar.bz29832KB2013-07-230:00:00

u-boot-2013.10-rcl.tar.bz29724KB2013-08-210:00:00

u-boot-2013.10-rc2.tar.bz29712KB2013-09-020:00:00

u-boot-2013.10-rc3.tar.bz29762KB2013-09-170:00:00

u-boot-2013.10-rc4.tar.bz29788KB2013-10-040:00:00

u-boot-2013.10.tar.bz29793KB2013-10-160:00:00

u-boot-2014.01-rcl.tar.bz29833KB2013-11-260:00:00

u-boot-2014.01-rc2.tar.bz29906KB2013-12-170:00:00

u-boot-2014.01-rc3.tar.bz29928KE2014-01-140:00:00

u-boot-2014.0Ltar.bz29943KB2014-01-210:00:00

u-boot-2014.04-rcl.tar.bz29870KB2014-02-200:00:00

u-boot-2014.04-rc2.tar.bz29612KB2014-03-110:00:00

u-boot-2014.04-rc3.tar.bz29626KB2014-04-010:00:00

u-boot-2014.04.tar.bz29642KB2014-04-150:00:00

u-boot-2014.07-rcl.tar.bz29516KB2014-05-130:00:00

u-boot-2014.07-rc2.tar.bz29567KB2014-05-280:00:00

u-boot-2014.07-rc3.tar.bz29575KB2014-06-100:00:00

u-boot-2014.07-rc4.tar.bz29589KB2014-07-020:00:00

u-boot-2014.07.tar.bz29551KE2014-07-140:00:00

u-boot-2014.10-rcl.tar.bz29806KE2014-09-030:00:00

u-boot-2014.10-rc2.tar.bz29897KE2014-09-030:00:00

u-boot-2014.10-rc3.tar.bz29992KB2014-10-080:00:00

u-boot-2014.10.tar.bz29979KB2014-10-140:00:00

u-boot-2015.01-rcl.tar.bz29771KB2014-11-110:00:00

u-boot-2015.01-rc2.tar.bz29868KB2014-11-250:00:00

u-boot-2015.01-rc3.tar.bz29959KB2014-12-090:00:00

u-boot-2015.01.tar.bz29749KB2015-01-120:00:00

u-boot-2015.04-rcl.tar.bz28987KB2015-02-020:00:00

u-boot-2015.04-rc2.tar.bz29236KB2015-03-0412:25:00

u-boot-2015.04-rc3.tar.bz29233KB2015-03-0412:25:00

u-boot-2015.04-rc4.tar.bz29213KB2015-03-198:55:00

u-boot-2015.04-rc5.tar.bz29220KB2015-04-0123:05:00

u-boot-2015.04.tar.bz29250KE2015-04-178:43:00

u-boot-2015.07-rcl.tar.bz29477KB2015-06-099:00:00

u-boot-2015.07-rc2.tar.bz29682KE2015-06-099:01:00

u-boot-2015.07-rc3.tar.bz29691KB2015-07-0213:42:00

u-boot-2015.07.tar.bz29688KB2015-07-159:08:00

u-boot-2015.10-rcl.tar.bz29830KB2015-08-048:55:00

u-boot-latest.tar.bz22015-07-159:09:00

1.3uboot目錄介紹

uboot源碼按作用分別存放和管理不同的源程序。這些目錄中所要存放的文件有其規(guī)則,可以分為3類。

?與處理器體系結(jié)構(gòu)或者開發(fā)板硬件直接相關(guān)。

?一些通用的函數(shù)或者驅(qū)動程序。

?U-Boot的應(yīng)用程序、工具或者文件。

表1.1U-Boot2010.12版本的源碼頂層目錄說明

目錄特性解釋說明

存放發(fā)板相關(guān)的目錄文件,如RPXlite(mpc8xx)、smdk2410(arm920t)

board平臺依賴

sc520_cdp(x86)等目錄

arch構(gòu)架相關(guān)存放了各種芯片構(gòu)架相關(guān)的文件

api通用存放U-Boot提供的接口函數(shù)

common通用通用的代碼,涵蓋各個方面,以命令行處理為主

disk通用磁盤分區(qū)相關(guān)代碼

lib通用存放u-boot源碼中使用到的庫函數(shù)

nand_spl通用NAND存儲器啟動相關(guān)代碼

include通用頭文件和開發(fā)板配置文件,所有開發(fā)板的配置文件都在configs目錄下

common通用通用的多功能函數(shù)實(shí)現(xiàn)

net通用存放網(wǎng)絡(luò)相關(guān)程序

fs通用存放文件系統(tǒng)相關(guān)程序

post通用存放上電自檢程序

drivers通用通用的設(shè)備驅(qū)動程序,主要有以太網(wǎng)接口的驅(qū)動

disk通用硬盤接口程序

examples應(yīng)用例程一些獨(dú)立運(yùn)行的應(yīng)用程序的例子,如he11oworld

tools工具存放制作S-Record或者U-Boot格式的鏡像等工具,如mkimage

doc文檔開發(fā)使用文檔

uboot可以支持很多CPU.

每種架構(gòu)下會有了構(gòu)架(arm7/9/ll.A8/9(armv7)等),每種構(gòu)架下會很多公司做芯片,-務(wù)公司使用?種

構(gòu)架乂會有很多個子類芯片(如三星A9構(gòu)架生產(chǎn)了EXYNOS4412,EXYNOS4212等),具體一個型號的芯片乂可

以做成不同的產(chǎn)品,不同開發(fā)板,不同開發(fā)板,板上外設(shè)硬件可能不一樣,這樣就會有底代碼不同。所以,u-boot

支持很多板子,就必須要分別為每一型號開發(fā)板編寫特定的板級代碼。

一個u-boot.bin一般支持一個板。

重點(diǎn)關(guān)注的文件:

arch/arm/arch/arm/cpu/芯片子構(gòu)架/這個目錄頂層的文件文件,匯編文件是構(gòu)架級相關(guān)文件。

arch/arm/arch/arm/cpu/芯片子構(gòu)架/芯片具體系列名/這個目錄存放是具體芯片型號相關(guān)的代碼。

arch/arm/include/asm/xxxxx.harm架構(gòu)公共頭文件

arch/arm/include/asm/arch-芯片構(gòu)架名/子架構(gòu)公共頭文件

arch/arm/include/asm/arch-芯片系列名/芯片系列公共頭文件

board/芯片廠家名/開發(fā)板名/板級相關(guān)的文件,每個開發(fā)板一個文件夾。

include/configs/開發(fā)板名.h板級配置頭文件,一個開發(fā)板有一個同名頭文件。

boards.cfg:這個在高版本的u-boot中用來存放各個開發(fā)板的基木配置信息,在低版本中這些配置是寫在頂

層Makefile中。

其他:

命令存放:common

外設(shè)驅(qū)動:drivers

外設(shè)驅(qū)動頭文件:include

1.4uboot配置編譯分析

JBoot的源代碼包含對幾十種處理器、數(shù)百種開發(fā)板的支持??墒菍τ谔囟ǖ拈_發(fā)板,配置編譯過程只需其

中部分程序。這里以EXYNOS4412處理解為例,具體分析EXYNOS4412處理器和開發(fā)板所依賴的程序,以及U-

Boot的通用函數(shù)和工具。

l-Boot的源碼是通過gcc和Makefile組織編譯的。頂層目錄下的Makefile可以通過包含boards.cfg來設(shè)置開

發(fā)板的定義,然后遞歸地調(diào)用各級子目錄下的Makefile,最后把編譯過的程序鏈接成U-Boot映像。

1.5uboot移植簡要步驟

工.配置u-boot支持哪個開發(fā)板

maketiny4412_config

2.編譯

配置分析:

maketiny4412_config會執(zhí)行在當(dāng)前目錄下找Makefile,在Makefile中找名為tiny4412_config的目標(biāo)。

在Makefile:中杳找tiny4412_config沒有找到,但是搜索_config可以找到以下目標(biāo):

537%_config::unconfig

538@$(MKCONFIG)-A$(@:_config=)

上面是%可以表示任意數(shù)后字符,所以maketiny4412_config會被匹配%,執(zhí)行的就這是一個目標(biāo)。

1)先完成依賴unconfig

532unconficj:

533@rm-f$(obj)include/config.h$(obj)include/config.mk\

534$(obj)board/*/config.tmp$(obj)board/*/*/config.tmp\

535$(obj)include/autoconf.mk$(obj)include/autoconf.mk.dep

上面主要是刪除了上一次配置的信息,驗(yàn)證如下:

[root@localhostuboot_tiny4412-sdkl506]#Isinclude/config.h

include/config.h

[root@localhostuboot_tiny4412-sdkl506]#Isinclude/config.mk

include/config.mk

[root@localhostuboot_tiny4412-sdkl506]#Isinclude/autoconf.mk

include/autoconf.mk

[root@localhostuboot_tiny4412-sdkl506]#makeunconfig

[root@localhostuboot_tiny4412-sdkl506]#Isinclude/config.h

Is:無法訪問include/config.h:沒有那個文件或目錄

[root@localhostuboot_tiny4412-sdkl506]#Isinclude/autoconf.mk

Is:無法訪問include/autoconf.mk:沒有那個文件或目錄

[root@localhostuboot_tiny4412-sdkl506]#Isinclude/autoconf.mk

Is:無法訪問include/autoconf.mk:沒有那個文件或目錄

[root@localhostuboot_tiny4412-sdkl506]#

2)執(zhí)行$(MKCONFIG)-A$(@:_config=)

$(MKCONFIG):變量引用

112MKCONFIG:=$(SRCTREE)/mkconfig

113exportMKCONFIG

MKCONFIG其實(shí)是指向mkconfig這個shell腳本,過程請觀看網(wǎng)校視頻。

展開就是

mkconfig-A$(@:_config=)

完整語句:

%_config;:unconfig

mkconfig-A$(@:_config=)

當(dāng)mkconfig-A$(@:_config=)執(zhí)行時候$0是mkconfig,$1是-A,

找查開發(fā)板配置:

if[\($#-eq2\)-a\("$1"=H-A"\)];then

#Automaticmode

line='egrep-i"A[[:space:]]*${2}[(:space:])"boards.cfg'11{

echo"make:***Noruletomaketarget\'$2_config'.Stop.">&2

exit1

)

set${line}

#adddefaultboardnameifneeded

[$#=31&&set${line}${l}

fi

分析

if[\($#-eq2\)-a\("$l"="-A"\)]:參數(shù)是否等于2,并且$1值為-A判斷成立,則執(zhí)行then下面語句。

line='egrep-i,,A[[:space:]]*${2}[[:space:]]"boards.cfg'定義一個就變量,

然后把egrep-i"A[[:space:]]*${2}[[:space:]]"boards.cfg命令執(zhí)行的結(jié)果賦值給line.

這個命令會在boards.cfg中查找包含${2}的字符串,取出這一行內(nèi)容。

boards.cfg:這個在高版本的u-boot中用來存放各個開發(fā)板的基本配置信息,在低版本中這些配置是寫在頂

層Makefile中。

其他:

執(zhí)行結(jié)果:

a.把a(bǔ)rch/arm/include/asm目錄做一個鏈接到include/asm

b.把a(bǔ)rch/arm/include/asm/proc-armv做一個鏈接:arch/arm/include/asm/proc

c,生成成以下兩個文件:

include/config.h

include/config.mk

include/config.h內(nèi)容:

makefilegsdf.shX]同"Makefile*?但?mkconfig)|國config.hX?config.mkM

1/*Automaticallygenerated-donotedit*/

2#defineCONFIGBOARDDIRboard/samsung/tiny4412

3#include<config_defaults.h>

4#include<configs/tiny4412.h>

5#include<asm/config.h>|

上面有tiny4412.h的文件,這一個告訴我們移植uboot要有一個和開發(fā)板同名的頭文件。

include/config.mk內(nèi)容:

makefileX[\±sdf.shM曰,MakefileXmkconfigX回config.hxjconfig.mkX

1ARCH=arm

2CPU=armv7

3BOARD=tiny4412

4VENDOR=Samsung

5SOC=exynos

上面是定義了一些變量,這個文件會在頂層MakefM中引用,有來抽取和具體開發(fā)板相關(guān)的文件進(jìn)行編譯。

頂層Makefile包含了這個文件,并且把這個文件中的變量導(dǎo)成全局的:

makefile::sdf.sh"MakefileXconfig.mkMmkc

154#loadARCH,BOARD,andCPUconfiguratioi

155include$(obj)include/config.mk|

156exportARCHCPUBOARDVENDORSOC

編譯分析:make

make會查找makefile第一個目標(biāo),一般是all。

makefileX、sdf.shMakefileX||"Kconfig.mkXmkconfigXCconfig.hN

333#AlwaysappendALLsothatarchconfig.mk'scanaddcustomones

334ALL+=$(obj)u-boot.srecS(obj)u-boot.bin$(obj)System.map$(U_BOOT_NAND)S(UBOOTONENAND)

335

336)11:$(ALL)

337

先找依賴:

ALL,在Makefile中定義:

ALL+=$(obj)u-boot.srec$(obj)u-boot.bin$(obj)System.map$(U_BOOT_NAND)$(U_BOOT_ONENAND)

分解后:

all:$(obj)u-boot.srec${obj)u-boDt.bin$(obj)System.map$(U_BOOT_NAND)$(U_BOOT_ONENAND)

上面又是多個依賴,從左到右分別實(shí)現(xiàn),第1個是$(obj)u-boot.srec,先查找目錄是否有這個文件,如果

沒有編譯過,是不會有這個文件的,所以會在本Makefile查找實(shí)現(xiàn)它的規(guī)則目標(biāo)。

$(obj)u-boot.srec:$(obj)u-boot

$(OBJCOPY)-Osrec$<5@

上面的依賴$(obj)u-boot,再判斷$(obj)u-boot文件是否存在,如果沒有編譯過,是不會有這個文件的,

所以會在本Makefile查找實(shí)現(xiàn)它的規(guī)則目標(biāo)。

$(obj)u-boot:depend\

$(SUBDIRS)$(OBJS)$(LIBBOARD)$(LIBS)$(LDSCRIPT)$(obj)u-boot.lds

$(GEN_UBOOT)

上面的\表示換行,告訴編譯器,這一行沒有完,連接一下行。

實(shí)際就是:

$(obj)u-boot:depend$(SUBDIRS)$(OBJS)$(LIBBOARD)$(LIBS)$(LDSCRIPT)$(obj)u-boot.lds

$(GEN_UBOOT)

以LIBS變量為例子杳看Makefile文件,怎么給LIBS賦值的,實(shí)現(xiàn)哪些文件要編譯。

190ifdefSOC

191LIBS+=$(CPUDIR)/$(SOC)/lib$(SOC).o

192endif

193ifeq($(CPU),ixp)

194LIBS+=arch/arm/cpu/ixp/npe/libnpe.o

195endif

196LIBS+=arch/$(ARCH)/lib/lib$(ARCH).o

還有一些通用的代碼:

197LIBS+=fs/cramfs/1ibcramfs.ofs/fat/libfat.ofs/fdos/libfdos.of

198fs/reiserfs/1ibreiserfs.ofs/ext2/libext2fs.ofs/yaffs2/libyaffs2

199fs/ubifs/libubifs.o

200LIBS+=net/libnet.o

201LIBS+=disk/libdisk.o

202LIBS+=drivers/bios_emulator/libatibiosemu.o

203LIBS+=drivers/block/libblock.o

204LIBS+=drivers/dma/libdma.o

205LIBS+=drivers/fpga/libfpga.o

1.5.2在u-boot添加一個xyd4412開發(fā)板相關(guān)文件

1.添加一個xyd4412的配置信息

修改boards.cfg,仿照一款最接近的開發(fā)板添加相應(yīng)信息

文件格式說明:

#TargetARCHCPUBoardnameVendorSoCOptions

make目標(biāo)名構(gòu)架名芯片子構(gòu)架開發(fā)板名芯片廠家名芯片系列名參數(shù)(可選)

Vendor:是對應(yīng)board/下面的廠家子目錄,如Samsung

Boardname:是對應(yīng)board/廠家名/下的開發(fā)板目錄名,如board/samsung/tiny4412

tiny4412armarmv7tiny4412Samsungexynos

按照以上格式添加一個xyd4412的開發(fā)板配置:

xyd4412armarmv7xyd4412Samsungexynos

2.創(chuàng)建必須的文件:板級文件和板級配置頭文件

一般情況是復(fù)制最接近的開發(fā)板的文件,如下:

板級文件:

[root@localhostuboot_tiny4412-sdkl506]#cdboard/samsung/

[root@localhostSamsung]#cptiny4412/xyd4412-r

板級配置頭文件:

[root@localhostSamsung]#cd../../include/configs/

[root@localhostconfigs]#cptiny4412.hxyd4412.h

[root@localhostconfigs]#

3.先配置

回到源碼頂層目錄;

[root@localhostuboot_tiny4412-sdkl506]#makedistclean先清上次其他板1=1標(biāo)文件

[root@localhostuboot_tiny4412-sdkl506]#makexyd4412_config

awk'(NF&&$1!~/A#/){print$1"$1"_config;$(MAKE)"}'boards.cfg>.boards.depend

/root/test/uboot_tiny4412-sdkl506/mkconfig-Axyd4412

Configuringforxyd4412board...

[root@localhostuboot_tiny4412-sdkl506]#

4.編譯,驗(yàn)證一下文件是否齊全

[root@localhostuboot_tiny4412-sdkl506]#make

最后出錯了,并且錯誤發(fā)生鏈接階段上,而編譯階段沒有錯,說明文件是齊全的,并且沒有語法錯誤。只可

能是鏈接腳本出問題。

arm-linux-ld:cannotfindboard/samsung/tiny4412/libtiny4412.o

make:***[u-boot]錯誤1

[root@local.hostuboot_tiny4412-sdkl506]#|

在Makefile中鏈接腳本指定:

arm-linux-ld-Bstatic-Tu-boot?Ids-pie-Ttext0xc3e00000

SUNDEF_SYMarch/arm/cpu/armv7/start,o-一start-groupapi/liba

指定了u-boot.Ids,所以打開board/samsung/xyd4412/u-boot」ds:

.text:用來指定代碼存儲位置,用戶可以指定代碼存放順序,如果不指定就是隨機(jī)存放,由于u?boot前端代

碼需要實(shí)現(xiàn)片外DDR初始化,并且把整個u-boot搬運(yùn)到DDR中的功能,必須保證這部分代碼排列在最前端。

其中有使用一絕對路徑鏈接文佇,所以會報錯:

.text:

(

arch/arm/cpu/armv7/start.o(.text)

board/samsung/tiny4412/libtiny4412.o(.text)

arch/arm/cpu/armv7/exynos/libexynos.o(.text)

*(.text)

)

修改成自己的開發(fā)板路徑:

.text:

arch/arm/cpu/armv7/start.o(.text)

board/samsung/xyd4412/libxyd4412.o(.text)

arch/arm/cpu/armv7/exynos/libexynos.o(.text)

*(.text)

修改后保存重新編譯即可。下載到sd卡上測試。

說明:

按照上面的方法只是完成移植的第一階段,如果你的核心板和參照信心板器件,電路完全相同,則這樣修

改,u-boot可以啟動的。如果你的DDR換了,時序和原來的不兼容,則你還需要修改初始化DDR部分的源碼。

如果你的板子啟動時候還需要依賴其他的外設(shè),則還需要修改板級文件中的代碼,增加對外設(shè)的初始化。

修改源碼屬于移植u-boot的第二階段,難點(diǎn)就在這個階段。要知道修改哪些文件,你就必須清楚“boot啟

動流程中執(zhí)行了哪些文件,執(zhí)行順序是什么。

1.6板級配置文件介紹

我們在修改源碼,裁剪u-boot功能基本上都要修改這個文件來實(shí)現(xiàn)。

路徑:include/configs/開發(fā)板名上

如:include/configs/xyd4412.h

重要的宏配置:

ffdefineCONFIG_BOARD_NAME"XYD4412"開發(fā)板名

命令提示符:

^defineCONFIG_SYS_PROMPT"XYD4412#"

#defineCONFIG_IDENT_STRING"forTINY4412"

U-Boot2010.12(Nov272016-00:43:00)forTINY4412

#defineCONFIG_SYS_SDRAM_BASE0x40000000外擴(kuò)內(nèi)存的起始地址,根據(jù)實(shí)際修改。

4412可擴(kuò)展的內(nèi)存空間:

0x4000_00000xA000_00001.5GBMemoryofDynamicMemoryController(DMC)-O

0xA000_00000x0000_0000

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論