版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
摘要:介紹了一款優(yōu)秀的嵌入式BootLoader—U-Boot,詳細講解了它的運行原理,著重討論了其在S3C2410上的移植過程,并對移植結果進行了測試。
關鍵詞:U-Boot;S3C2410;移植;BootLoader
引言
BootLoader是嵌入式系統(tǒng)軟件開發(fā)的第一個環(huán)節(jié),它緊密地將軟硬件銜接在一起,對于一個嵌入式設備后續(xù)的軟件開發(fā)至關重要。BootLoader還涉及到許多硬件相關的知識,對于普通的嵌入式開發(fā)板,它又是不可跳過的步驟,所以做好它的移植工作是必須的,對于后續(xù)的開發(fā)工作也是有益的。U-Boot是當前比較流行、功能強大的BootLoader,它操作簡便,可以支持多種體系結構的處理器,同時提供了完備的命令體系。S3C2410是三星公司一款基于ARM920T的嵌入式通用處理器。本文的移植平臺就是以S3C2410為核心的HHARM9-EDU-R2開發(fā)板,這塊開發(fā)板的硬件資源配置較為完善。主要硬件資源有:S3C2410處理器;1片IntelTE28f128FLASH(16M);2片HynixHY57V561620SDRAM(64M);10/100M自適應網絡芯片DM9000;USBHost/Device;RS232×2/RS485×1串口;LQ035FLM08L256K色TFT真彩LCD顯示屏;全功能JTAG調試口等。
U-Boot簡介
U-Boot是DasU-Boot的簡稱,是由denx軟件中心依照GPL發(fā)布的公共軟件,作為系統(tǒng)啟動的引導模塊,U-Boot支持多種處理器架構,比如Power-PC、ARM、MIPS和x86等。目前,U-Boot源代碼在sourceforge網站的社區(qū)服務器中,Internet上有一群自由開發(fā)人員對其進行維護和開發(fā),它的項目主頁是http:///projects/u-boot。當下載并解壓U-Boot源碼包后,會形成如下的目錄結構:board,和一些已有開發(fā)板有關的文件;common,實現(xiàn)各種U-Boot命令的C文件;cpu,CPU相關文件,其中的子目錄都是以U-Boot所支持的CPU命名的;disk,disk驅動的分區(qū)處理代碼;doc,文檔;drivers,通用設備驅動程序;fs,支持文件系統(tǒng)的文件;include,頭文件,對各種硬件平臺支持的匯編文件,系統(tǒng)的配置文件和對文件系統(tǒng)支持的文件;net:與網絡有關的代碼;lib-arm,與ARM體系結構相關的代碼;tools,創(chuàng)建S-Record格式文件和U-BootImages的工具。
本文中U-Boot的移植就是根據HHARM9-EDU-R2開發(fā)板的硬件資源在以上的目錄中修改或者添加相關源文件,并且重新編譯的過程。移植工作開始之前,了解U-Boot的運行過程是十分必要的。
U-Boot運行過程分析
U-Boot編譯后的代碼定義一般不超過100kB,并且這100kB又分成兩個階段來執(zhí)行。第一階段的代碼在start.s中定義,大小不超過10kB,它包括從系統(tǒng)上電后在0x00000000地址開始執(zhí)行的部分。這部分代碼運行在Flash中,它包括對S3C2410的一些寄存器的初始化和將U-Boot的第二階段代碼從Flash拷貝到SDRAM中。除去第一階段的代碼,剩下的部分都是第二階段的代碼。第二階段的起始地址是在第一階段代碼中指定的,被復制到SDRAM后,就從第一階段跳到這個入口地址開始執(zhí)行剩余部分代碼。第二階段主要是進行一些BSS段設置,堆棧的初始化等工作,最后會跳轉到main-loop函數(shù)中,接受命令并進行命令處理。圖1給出了U-Boot的詳細的運行過程包括對內核的設置、裝載及調用過程。
圖1U-Boot運行過程
了解了U-Boot的運行過程以后,我們還必須確定開發(fā)板的地址空間分布,才可以進行源碼的修改和移植工作。地址空間的分布部分依賴于開發(fā)板的硬件配置及CPU的復位地址。本文中開發(fā)板的地址空間如圖2所示。
圖2開發(fā)板地址空間分布
U-Boot的移植與測試
為了使移植工作更加快捷,應當選擇U-Boot當前發(fā)布的最新版本1.1.2(盡管通過CVS可以得到U-Boot1.1.3,但其正在開發(fā),尚未發(fā)布,不宜使用)。因為最新的版本可以提供盡可能多的處理器核及開發(fā)板的支持。對于U-Boot-1.1.2而言,它不僅提供對ARM-920T內核的支持,而且直接提供了對于S3C2410的板級支持,這使移植工作量相對減少。
支持ARM-920T內核的代碼修改
由于U-Boot-1.1.2提供對ARM-920T內核的直接支持,所以本步驟不需要做任何工作,本文為了讓讀者了解BootLoder移植的通用模式,在此只是稍加提示。
配置自己的開發(fā)板
建立自己開發(fā)板的目錄和相關文件。
1)在include/configs目錄中以smdk2410.h為模板添加頭文件S3C2410.h(cpsmdk2410.hS3C2410.h)。這個文件是開發(fā)板的配置文件,它包括開發(fā)板的CPU、系統(tǒng)時鐘、RAM、Flash系統(tǒng)及其它相關的配置信息。
2)在board/目錄下創(chuàng)建S3C2410目錄??截恠mdk2410目錄下所有文件到S3C2410目錄下,共有如下六個文件:flash.c、memsetup.c、S3C2410.c、Makefile、U-Boot.lds和config.mk,根據開發(fā)板實際情況對各個文件進行修改。
◆flash.c.U-Boot讀、寫和刪除Flash設備的源代碼文件。由于不同開發(fā)板中Flash存儲器的種類各不相同,所以,修改flash.c時需參考相應的Flash芯片手冊。它包括如下幾個函數(shù):
unsignedlongflash-init(void),F(xiàn)lash初始化;
intflash-erase(flash-info-t*info,ints-first,ints-last),F(xiàn)lash擦除;
volatilestaticintwrite-hword(flash-info-t*info,ulongdest,ulongdata),F(xiàn)lash寫入;
intwrite-buff(flash-info-t*info,uchar*src,ulongaddr,ulongcnt),從內存復制數(shù)據。
由于本文開發(fā)板所用flash芯片為IntelTE28f128,在board/cmi目錄中有此flash.c,只需對其稍加修改即可使用。
◆memsetup.c.初始化時鐘、SMC控制器和SDRAM控制器。為了以后能用U-Boot的GO命令執(zhí)行修改過的用loadb或tftp下載的U-Boot.在標記符“0:”上加入五句:
movr3,pc
ldrr4,=0x3FFF0000
andr3,r3,r4//以上三句得到實際起動的內存地址
aadr0,r0,r3//用GO命令調試uboot時,啟動地址在RAM
addr2,r2,r3//把初始化內存信息的地址,加上實際起動地址
◆S3C2410.C.設置各種總線時鐘,打開數(shù)據Cache和指令Cache,并設置相關內存參數(shù)。
◆Makefile.修改:OBJS:=S3C2410.oflash.omemsetup.o
◆U-Boot.lds.作如下修改:
.text
{
cpu/arm920t/start.o(.text)
*(.text)
}
◆config.mk.用于設置程序連接的起始地址,因為會在U-Boot中增加功能,所以留下6M的空間,修改33F80000為33A00000。
實現(xiàn)網卡的驅動程序
在drivers/目錄中以dm9000x.c和dm9000x.h為模板添加網口設備控制程序dm9000.c和dm9000.h,其中dm9000.c主要包括以下函數(shù):
inteth-init(bd-t*bd),初始化網絡設備;
inteth-send(volatilevoid*,int),發(fā)送數(shù)據包;
inteth-rx(void),接收數(shù)據包。
voideth-halt(void),關閉網絡設備;
為了方便網絡設備的數(shù)據讀寫操作,還定義了如下函數(shù):
staticintdm9000-probe(void),搜索DM9000芯片,分配空間并登記之;
staticu16phy-read(int),從Phyxcer寄存器讀取一個字;
staticvoidphy-write(int,u16),寫一個字到Phyxcer寄存器;
staticu16read-srom-word(int),從SROM讀取一個字數(shù)據;
staticu8DM9000-ior(int),從I/O口讀取一個字節(jié);
staticvoidDM9000-iow(intreg,u8value),寫一個字節(jié)到I/O口;
最后在drivers/Makefile中加入dm9000.o。
修改Makefile文件
在U-Boot-1.1.2/Makefile中ARM92xTSystems注釋下面加入以下兩行:
S3C2410-config:unconfig
@./mkconfig$(@:-config=)armarm920tS3C2410
其中“arm”是CPU的種類,arm920t是ARMCPU對應的代碼目錄,S3C2410是自己開發(fā)板對應的目錄。
交叉編譯器安裝在:/path/armv4l-unknown-linux-目錄下,所以把CROSS-COMPILE設置成相應的路徑:CROSS-COMPILE=/path/arm4l-unknown-linux-
生成目標文件并進行測試
依次運行以下命令:
#makeclean
#makeS3C2410-config
#make
之后會生成三個文件:
U-Boot——ELF格式的文件,可以被大多數(shù)Debug程序識別;
U-Boot.bin——二進制文件,純粹的U-Boot
二進制執(zhí)行代碼,不保存ELF格式和調試信息。這個文件一般用于燒錄到用戶開發(fā)板中;U-Boot.srec——MotorolaS-Record格式,可以通過串行口下載到開發(fā)板中。
測試與應用
1)測試
利用編制好的Flash燒寫程序,通過JTAG口將生成的二進制文件U-Boot。bin燒入Flash的零地址。燒錄成功后,拔掉JTAG調試線并復位開發(fā)板,從Minicom終端輸出如下信息:
U-Boot1.1.2(Jul202005-09:34:21)
U-Bootcode:33F00000->33F1952CBSS:->33F1D870
RAMConfiguration:
Bank#0:3000000064MB
FlashMemoryStart0x0000000
DeviceIDoftheFlashis18
Flash:16MB
Write18toWatchdoganditis18now
In:serial
Out:serial
Err:serial
SMDK2410#
串口輸出的以上信息表明,CPU和串口已正常工作。通過U-Boot提供的命令flinfo和mtest可以測試Flash和RAM。經過測試,可以正確地讀出Flash信息及讀寫RAM,表明Flash和DRAM已正確初始化。用tftp命令傳輸宿主機tftpboot目錄下任一小文件到RAM成功,說明網卡芯片也成功驅動。
2)簡單應用
U-Boot的主要作用是用來引導內核。因此,通過U-Boot引導一個特定的內核,可以進一步測試其移植的穩(wěn)定性。而使用U-Boot引導內核有兩種不同的方法。第一種方法是直接將內核映象文件和根文件系統(tǒng)燒寫入Flash,使用此方法,U-Boot在啟動時將Flash中的內核映象及根文件系統(tǒng)讀入RAM指定位置并從同一位置啟動內核。第二種方法是將內核映象文件和根文件系統(tǒng)下載至RAM中直接啟動(而不是從Flash中讀入RAM),此種方法不需要燒寫Flash。筆者為了減少燒寫Flash的次數(shù),在本文中采用第二種方法,其步驟如下:
SMDK2410#tftp30008000zImage
SMDK2410#tftp30800000ramdisk.Image.gz
SMDK2410#go30008000
上述指令執(zhí)行的過程中,未出現(xiàn)異常,內核成功啟動,并最終進入Shell提示符“#”。在Shell提示符下輸入內核編譯時定制的各個命令,均可以正常運行。另外編寫簡單C程序,并用交叉編譯器編譯之,最終生成的可執(zhí)行文件能夠在開發(fā)板上正常運行。上述事實說明內核經過U-Boot引導已穩(wěn)定運行在開發(fā)板上。此次應用,進一步驗證了U-Boot移植的穩(wěn)定性。至此,移植工作告一段落。
結語
目前,筆者移植的U-Boot已經能穩(wěn)定地運行在開發(fā)板上,這使得Linux內核的調試脫離了BDM調試器,節(jié)約了大量的開發(fā)時間,大大提高了效率,是對后續(xù)嵌入式開發(fā)的有力支持。當然,U-Boot只是一款好用的BootLoader,嵌入式Linux的開發(fā)存在很多技術細節(jié),只有根據實際情況不斷修改、調試、總結,才能獲得更大的成功。4移植前的準備(1)、首先讀讀uboot自帶的readme文件,了解了一個大概。(2)、看看common.h,這個文件定義了一些基本的東西,并包含了一些必要的頭文件。再看看flash.h,這個文件里面定義了flash_info_t為一個struct。包含了flash的一些屬性定義。并且定義了所有的flash的屬性,其中,AMD的有:AMD_ID_LV320B,定義為“#defineAMD_ID_LV320B0x22F922F9”。(3)、對于“./borad/at91rm9200dk/flash.c”的修改,有以下的方面:
“voidflash_identification(flash_info_t*info)”這個函數(shù)的目的是確認flash的型號。注意的是,這個函數(shù)里面有一些宏定義,直接讀寫了flash。并獲得ID號。(4)、修改:”./board/at91rm9200dk/config.mk”為
TEXT_BASE=0x21f80000為TEXT_BASE=0x21f00000(當然,你應該根據自己的板子來修改,和一級boot的定義的一致即可)。(5)、再修改”./include/configs/at91rm9200dk.h”為
修改flash和SDRAM的大小。(6)、另外一個要修改的文件是:
./borad/at91rm9200dk/flash.c。這個文件修改的部分比較的多。
a.首先是OrgDef的定義,加上目前的flash。
b.接下來,修改”#defineFLASH_BANK_SIZE0x200000”為自己flash的容量
c.在修改函數(shù)flash_identification(flash_info_t*info)里面的打印信息,這部分將在u-boot啟動的時候顯示。
d.然后修改函數(shù)flash_init(void)里面對一些變量的賦值。
e.最后修改的是函數(shù)flash_print_info(flash_info_t*info)里面實際打印的函數(shù)信息。
f.還有一個函數(shù)需要修改,就是:“flash_erase”,這個函數(shù)要檢測先前知道的flash類型是否匹配,否則,直接就返回了。把這里給注釋掉。
(7)、接下來看看SDRAM的修改。
這個里面對于“SIZE”的定義都是基于字節(jié)計算的。
只要修改”./include/configs/at91rm9200dk.h”里面的
“#definePHYS_SDRAM_SIZE0X200000”就可以了。注意,SIZE是以字節(jié)為單位的。(8)、還有一個地方要注意
就是按照目前的設定,一級boot把u_boot加載到了SDRAM的空間為:21F00000->21F16B10,這恰好是SDRAM的高端部分。另外,BSS為21F1AE34。
(9)、編譯后,可以寫入flash了。
a.壓縮這個u-boot.bin
“gzip–cu-boot.bin>u-boot.gz”
壓縮后的文件大小為:
43Kbytes
b.接著把boot.bin和u-boot.gz燒到flash里面去。
Boot.bin大約11kBytes,在flash的0x10000000~0x10003fff
在at91rm9200上移植u-boot
u-boot移植心得
幾經艱辛,終于基本完成了u-boot在s3c44b0的移植工作,在些記錄一下在移植過程中所碰到的困難和解決方法(一些心得),作為日后參考之用,也希望能夠幫到其它有需要的人^_^。
1.來由:
在我搞完ucos后(本來我是想學uclinux的,不過在對系統(tǒng)一無所知的情況下,還是先學一下ucos比較實際^_^,從中也可以對系統(tǒng)有個清晰的概念),我意識到要搞系統(tǒng)的話一個功能強大的bootloader是必不可少的,而我的板上自帶的是armboot(其實我個人覺得應用在ARM上的話armboot已經足夠了,畢竟u-boot也是從armboot中發(fā)展過來的,純屬個人意見),如果我的板上自帶光盤有已經移植好的armboot源代碼供我參考的話,我想我也不會花這么多時間去搞u-boot,可恨的是我的光盤上只有armboot.bin這個二進制文件,而沒有源文件,沒辦法,我下定主意自己搞一個,考慮了一番后我選擇了u-boot,畢竟參考資料相對比較多,再我學完u-boot后再回頭看armboot,簡直是一個爐里出的餅,這是后話。
2.準備:
說是容易,做起來卻挺難。因為編譯u-boot要在linux環(huán)境下,而不能在我們平時所熟悉的ads下那么直觀。首先要建立好交叉編譯環(huán)境,這個交叉編譯環(huán)境可以自己來做,不過完全沒必要,而且難度也挺大,一般是下載人家編譯好的工具。我剛開始在這里就郁悶了很久,現(xiàn)在會了以后覺得原來就是這么簡單,在些我把方法說清楚,希望不會再有人為這個問題郁悶了^_^:
1)在網上下載一個u-boot源代碼,我用的是1.1.2版本的,最新的應該是1.1.4的吧,其實差不多,那就像我那樣下載一個1.1.2版本的吧。把源文件解壓,這個應該不用說了吧,學過linux的人應該會,不會的話我想你繼續(xù)做下去也困難,那就先裝個linux用下吧(我用的是RedHat的,哦對了,編譯程序是需要gcc編譯器的,所以安裝方式一定要選擇工作站哦^_^)。好了,解壓后你發(fā)現(xiàn)在u-boot.1.1.2目錄下有Makefile這個文件吧?讓我們看看它里面的內容,最簡單的方法就是viMakefile了。我們要看的是它選擇的是哪一個交叉編譯器??梢钥吹竭@一項:
ifeq($(ARCH),arm)
CROSS_COMPILE=arm-linux-
看到吧,也就是說這里所用的交叉編譯器是arm-linux-gcc了,(u-boot默認是用這個的,也有用arm-elf-gcc的,網上有個工具包arm-elf-tools-20030314.sh,我試過用它來編譯,沒有問題,順便提一下,arm-elf-gcc是用來編譯uClinux內核的工具來的)那你就下載一個arm-linux-的交叉編譯器吧,我是在網上下載cross-2.95.3.tar.bz2這個文件,然后解壓得到2.95.3版本的交叉編譯工具的,具體設置如下(參考網上資料):2)在宿主機上建立arm-linux-gcc交叉編譯環(huán)境
在RedHatLinux系統(tǒng)下以root用戶登錄,
將cross-2.95.3.tar.bz2文件復制到/目錄下,
安裝:
#tarjxvfcross-2.95.3.tar.bz2
這個命令會在你的/usr/local/arm/2.95.3目錄下安裝arm-linux-gcc交叉編譯程序,
然后在PATH變量中添加一項:/usr/local/arm/2.95.3/bin.
[root@localhostroot]#exportATH=/usr/local/arm/2.95.3/bin:$PATH
或
把PATH=/usr/local/arm/2.95.3/bin:$PATH添加到/ETC/bash_profile文件中
或者
在/etc/bashrc文件中添加一項:
exportPATH=/usr/local/arm/2.95.3/bin:$PATH
測試:
把終端關閉,重新打開后執(zhí)行如下命令:
#arm-linux-gcc–v
好了,建立好交叉編譯環(huán)境后可以試著編譯u-boot了這里提幾個注意點:
1.不可用winRAR解壓u-boot-1.1.2.tar.bz2或u-boot-1.1.2.tar.gz這種文件(就個可能新手會犯,一般熟悉linux命令的人應該都不會這樣做吧,在此還是要提一下)
2.可能下載的文件有一些中間文件會阻礙編譯的運行,所以在編譯前最好來個徹底清除,在u-boot.1.1.2目錄下運行命令:makedistclean(其實這個命令在Makefile文件下就有)我當時為這個問題郁悶了很久,希望你們不會像我這樣^_^);
3,有些人為了方便想在cygwin下編譯,但是經常在網上看到在這個虛擬平臺下編譯有很多的問題,要配置的東西也多,而且好像我用過那個vi沒有l(wèi)inux環(huán)境下的好用,所以最好還是不要用這個軟件了吧,如果你真的離不開windows的話可以像我這樣裝個虛擬機,在虛擬機下再裝linux的系統(tǒng),具體參考這個網站):/doc/vmware/
3)好了,現(xiàn)在開始測試你的交叉編譯器搞好沒有。在u-boot.1.1.2目錄下執(zhí)行如下命令:
1)Makedistclean(再次強調)
2)MakeB2_config(隨便再個現(xiàn)成的試試^_^)
3)Make(沒錯的話應該會生成u-boot.bin文件,發(fā)生錯誤的話也不怕,只要細心看一下哪里錯就行了,gcc碰到錯誤后會退出編譯,所以可以一個個錯誤來改,一般的問題都是沒找到編譯器(可能你沒裝或者裝的不對,例如人家用的是arm-linux-而你裝的是arm-elf-,如果你裝了的話看看你的環(huán)境變量設好了沒有,前面有講,如果不關編譯器的事的話那就再看看,一般是文件的后綴不對,有些文件后綴是大寫的,例如start.S但是如果你的是start.s小寫的話那當然找不到(解決方法很,把它改成大寫就行了)。細心看吧,不用怕,它都有注明路徑,很容易可以找到的))
如果以上步驟都無誤的話那么恭喜你,你的交叉編譯環(huán)境可以用來編譯你的u-boot源代碼了,可以開始以下階段。
3.移植:
說時遲那時快,現(xiàn)在開始移植工作(以下是我一步步重新做一遍,力求說得詳細點,感謝我吧^_^)
我以B2板子的程序做為模板來做.
#cdu-boot-1.1.2
#cdboard
#cp-Rdavemyboard(這是我取的板子名字,可以換上你的,但是后面的也要跟著來換哦^_^)
#cdmyboard
#mvB2myboards3c44b0(自己取個板子名)
#cdmyboards3c44b0
#mvB2.cmyboards3c44b0.c
修改myboards3c44b0里面的Makefile,把B2改成myboards3c44b0,編譯時如果報的其它類似找不到B2的錯誤也是把相應的B2改成myboards3c44b0來處理。1)其中的myboards3c44b0.c文件是板的初始化代碼,看一下就知道,根據你的板上自帶的44binit.s來修改吧。memsetup.S文件主要是存儲器的初始化設置,其實也是44binit.s里面的一部分。
2)其實board這里要修改的不多,先跳過flash部分吧,我們來看一下cpu設置部分吧。
u-boot-1.1.2里面已經加入了對s3c44b0的支持,讓我們來看一下cpu/s3c44b0里面的部分吧。
看到start.S這個文件了嗎?要修改的其實并不多,按照你的板設置一下中斷跳轉矢量就行了,或者上網查一下吧,應該很容易看明的。其中cpu.c這個文件簡直不用修改,再來看一下serial.c這個文件吧,改一下波特率的設置就行,就是你用多少M的CPU頻率的話對應的波特率參數(shù)設置問題,其實B2已經做得不錯的了,很多子程序都不用自己寫的了^_^,在我的板上是這樣設置的,參考一下吧:
#ifCONFIG_S3C44B0_CLOCK_SPEED==66,把所有的這些66改成60,原因,我的實驗板上用的頻率是60(44B0最高頻率為64M)。然后其它分頻系數(shù),寄存器初始化設置,可以參考一下44blib.c,在這里我給出我的設置出來吧,可以參考一下。case115200:
#ifCONFIG_S3C44B0_CLOCK_SPEED==60
divisor=32;UFCON0=0x0;
ULCON0=0x03;
UCON0=0x245;
UBRDIV0=divisor;我在這方面算術不好,所以都是參考人家的。3)好,再加上個頭文件:
cdu-boot-1.1.2/include/configs
cpB2.hmyboards3c44b0.h
這個頭文件其實要改的地方還挺多的,我等下再說怎樣修改。先回到u-boot.1.1.2目錄,4)在Makefile里面加上這部分,不會的話就模仿B2來寫吧^_^
在B2的這部分文件
B2_config:unconfig
@./mkconfig$(@:_config=)arms3c44b0B2dave
后面加上這部分:
myboards3c44b0_config:unconfig
@./mkconfig$(@:_config=)arms3c44b0myboard3c44b0myboard切記在@./mkconfig$(@:_config=)arms3c44b0myboard3c44b0myboard前面的是Tab來的,萬萬不能用空格代替,因為它是靠這個來識別命令的!
5)好,現(xiàn)在可以在u-boot-1.1.2目錄下執(zhí)行如下命令:
Makedistclean(還是用這個吧,比較徹底)
Makemyboards3c44b0_config
Make
看看有沒有錯,有錯的話按著提示來改,如果沒錯的話應該就能生成u-boot.bin這個文件,現(xiàn)在還不能用哦,因為這幾是B2的一個仿制品而已(注:在我的機上到這一步可沒有報錯哦,你一步步按著來做的話應該也不會有什么錯誤吧^_^)。
6)好,現(xiàn)在繼續(xù)修改u-boot-1.1.2/include/configs/myboards3c44b0.h這個文件。
#defineCONFIG_INIT_CRITICAL1這個在cpu/s3c44b0/start.S里面用到,如果你的u-boot程序不是在sdram中調試而是固化到flash中運行的話,這個必不可少。
找到#defineCONFIG_B21把B2改成myboards3c44b0吧(不然就不會編譯你的板了)
找到#defineCONFIG_S3C44B0_CLOCK_SPEED75你的44b0x應該沒有75M吧我的是改成60的
找到Sizeofmalloc()pool這部分設置,改成這樣吧,反正我是照著人家來做的,你自己研究下吧^_^。#defineCFG_MONITOR_LEN(256*1024)/*Reserve256kBforMonitor*/
#defineCFG_ENV_SIZE(64*1024)/*1024bytesmaybeusedforenvvars*/
#defineCFG_MALLOC_LEN(CFG_ENV_SIZE+128*1024)
#defineCFG_GBL_DATA_SIZE128/*sizeinbytesreservedforinitialdata*/
#defineCFG_ENV_IS_IN_FLASH1這個必不可少,如果你想把你的參數(shù)保存到flash的話(有些板是保存到EEPRAM中去的,但是s3c44b0的話還是保存到flash吧)
#defineCFG_ENV_ADDR(PHYS_FLASH_1+0x40000)這個就是你的參數(shù)保存在flash里的起始地址了
#defineCFG_ENV_OFFSET0x40000這個我后來看它源程序發(fā)現(xiàn)如果你上一步沒有設置它的起始地址的話就會用它來作默認地址的了
#defineCONFIG_AUTO_COMPLETE其它地方沒有深究哦,有些好像不要也行,你就試試吧。找到Hardwaredrivers部分,這應該是網絡芯片設置吧,參考一下這個吧(要看芯片的):
#defineCONFIG_DRIVER_RTL8019這個就要看你的板上用的是什么網卡了(這個是臺灣出的,有10M)
#defineRTL8019_BASE0x06000000這個是網卡相就寄存器的起始地址
以下部分我試過不要也行,你試下吧
#defineRTL8019_BUS320
#defineCONFIG_SMC_USE_16_BIT
#undefCONFIG_SHOW_ACTIVITY
#defineCONFIG_NET_RETRY_COUNT10應該是重試的次數(shù)吧#defineCONFIG_BAUDRATE115200設置波特率#defineCONFIG_COMMANDS(CONFIG_CMD_DFL|\
CFG_CMD_DATE|\
CFG_CMD_ELF|\
CFG_CMD_NET|\
CFG_CMD_EEPROM|\
CFG_CMD_I2C|\
CFG_CMD_FAT|\
CFG_CMD_JFFS2)
把CFG_CMD_EEPROM改成CFG_CMD_FLASH吧,雖然不改也是可以的,具體沒考究。以下是板上env參數(shù)設置,看一下吧,其實我覺得了解一下就行的了,只是一些初始設置值,以后可以用命令setenvsaveenv來修改的。
#defineCONFIG_BOOTDELAY3這個就是運行bootcmd之前的等待時間
#defineCONFIG_BOOTARGS"devfs=mountroot=ramfsconsole=ttyS0,115200"引導uClinux的時候傳遞的參數(shù),不會就先不用管它也行。
#defineCONFIG_ETHADDR00:50:c2:1e:af:fb網卡的物理地址MAC
#defineCONFIG_NETMASK掩碼地址,設置過ip的人都應該知道吧
#defineCONFIG_IPADDR0這是你板上網卡8019的ip地址
#defineCONFIG_SERVERIP0這是你宿主機的ip地址,以后用tftp下載的時候用到,一定要跟你的宿主機一致才行。
#defineCONFIG_BOOTFILE"u-boot.bin"這個就是你要下載文件的默認名字
#defineCONFIG_BOOTCOMMAND"bootm0x50000"這是bootdelay后運行的命令Miscellaneousconfigurableoptions部分,參考一下吧:
#defineCFG_LONGHELP/*undeftosavememory*/
#defineCFG_PROMPT"s3c44b0=>"這是進入命令模式下的提示符,改個帥一點的吧
#defineCFG_CBSIZE256/*ConsoleI/OBufferSize*/
#defineCFG_PBSIZE(CFG_CBSIZE+sizeof(CFG_PROMPT)+16)/*PrintBufferSize*/
#defineCFG_MAXARGS100/*maxnumberofcommandargs*/
#defineCFG_BARGSIZECFG_CBSIZE/*BootArgumentBufferSize*/#defineCFG_MEMTEST_START0x0C400000/*memtestworkson*/
#defineCFG_MEMTEST_END0x0C800000/*4...8MBinDRAM*/
#undefCFG_CLKS_IN_HZ/*everything,inclboardinfo,inHz*/
#defineCFG_LOAD_ADDR0x0c008000默認的下載地址
#defineCFG_HZ1000/*1kHz*/
#defineCFG_BAUDRATE_TABLE{9600,19200,38400,57600,115200}可供選擇的波特率
PhysicalMemoryMap部分,比較重要,修改你的sdram和flash的地址和容量。
#defineCONFIG_NR_DRAM_BANKS1我們只占用了一個Bank用來映射sdram
#definePHYS_SDRAM_10x0c000000sdram的起始地址
#defineP
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年度綠色蔬菜種植菜園大棚租賃合作協(xié)議3篇
- 教育機構中的酒水采購與供應策略
- 創(chuàng)新能力的提升與跨學科教育的關系
- 教育機構空間改造與教育環(huán)境優(yōu)化
- 2025年度住宅小區(qū)窗簾安裝與社區(qū)美化合同4篇
- 2025版貨車承包新能源推廣合同3篇
- 2025年校園更夫崗位職責與夜間巡邏保障合同3篇
- 木枋購銷合同(二零二五年度版)2篇
- 二零二五版智能樓頂廣告信息發(fā)布系統(tǒng)建設合同4篇
- 2025版智能交通系統(tǒng)關鍵零配件集成設計與采購合同4篇
- 2025年溫州市城發(fā)集團招聘筆試參考題庫含答案解析
- 2025版高考物理復習知識清單
- 2024年度工作總結與計劃標準版本(2篇)
- 全球半導體測試探針行業(yè)市場研究報告2024
- 2024年注冊計量師-一級注冊計量師考試近5年真題附答案
- 2023-2024學年深圳市高一年級下冊英語期末考試題(含答案)
- 工程管理重大風險應對方案
- 直播帶貨助農現(xiàn)狀及發(fā)展對策研究-以抖音直播為例(開題)
- 《光伏發(fā)電工程工程量清單計價規(guī)范》
- (完整版)保證藥品信息來源合法、真實、安全的管理措施、情況說明及相關證明
- 營銷專員績效考核指標
評論
0/150
提交評論