日本亚洲欧美日韩中文字幕_精品欧美一区二区三区久久久_久久av高潮av无码av_成在人线av无码免费_亚洲中文字幕无码久久精品1

返學費網 > 培訓機構 > 全國IT培訓中心

13081913316

全國統(tǒng)一學習專線 8:30-21:00

嵌入式Linux開發(fā)流程

在一個嵌入式系統(tǒng)中使用Linux開發(fā),根據應用需求的不同有不同的配置開發(fā)方法,但是一般都要經過如下的過程:
1.建立開發(fā)環(huán)境
操作系統(tǒng)一般使用RedHat-Linux,版本從7到9都可以,選擇定制安裝或全部安裝,通過網絡下載相應的GCC交叉編譯器進行安裝(例如arm-Linux-gcc、arm-μclibc-gcc),或者安裝產品廠家提供的交叉編譯器。
2.配置開發(fā)主機
配置MINICOM,一般的參數為波特率為115 200bps,數據位為8位,停止位為1,無奇偶校驗,軟件硬件流控設為無。在Windows下的超級終端的配置也是這樣的。MINICOM軟件的作用是作為調試嵌入式開發(fā)板的信息輸出的監(jiān)視器和鍵盤輸入的工具。配置網絡,主要是配置NFS網絡文件系統(tǒng),需要關閉防火墻,簡化嵌入式網絡調試環(huán)境設置過程。
3.建立引導裝載程序
從網絡上下載一些公開源代碼的,如U-BOOT、BLOB、VIVI、LILO、ARM-BOOT、RED-BOOT等,根據自己具體的芯片進行移植修改。有些芯片沒有內置引導裝載程序,例如三星的ARM7、ARM9系列芯片,這樣就需要編寫開發(fā)板上Flash的燒寫程序,網絡上有免費下載的Windows下通過JTAG并口簡易仿真器燒寫ARM外圍Flash芯片的燒寫程序,也有Linux下的公開源代碼的J-Flash程序。如果不能燒寫自己的開發(fā)板,就需要根據自己的具體電路進行源代碼修改。這是系統(tǒng)正常運行的第一步。如果購買了廠家的仿真器當然比較容易燒寫Flash,這對于需要迅速開發(fā)自己產品的人來說可以極大地提高開發(fā)速度,但是其中的核心技術是無法了解的。
4.下載別人已經移植好的Linux操作系統(tǒng)
如μCLinux、ARM-Linux、PPC-Linux等,如果有專門針對所使用的CPU移植好的Linux操作系統(tǒng)那是再好不過的,下載后再添加自己的特定硬件的驅動程序,進行調試修改,對于帶MMU的CPU可以使用模塊方式調試驅動,對于μCLinux這樣的系統(tǒng)則需編譯進內核進行調試。
5.建立根文件系統(tǒng)
從下載使用BUSYBOX軟件進行功能裁減,產生一個最基本的根文件系統(tǒng),再根據自己的應用需要添加其他程序。默認的啟動腳本一般都不會符合應用的需要,所以就要修改根文件系統(tǒng)中的啟動腳本,它的存放位置位于/etc目錄下,包括:/etc/init.d/rc.S、/etc/profile、/etc/.profile等,自動掛裝文件系統(tǒng)的配置文件/etc/fstab,具體情況會隨系統(tǒng)不同而不同。根文件系統(tǒng)在嵌入式系統(tǒng)中一般設為只讀,需要使用mkcramfs、genromfs等工具產生燒寫映像文件。
6.建立應用程序的Flash磁盤分區(qū)
一般使用JFFS2或YAFFS文件系統(tǒng),這需要在內核中提供這些文件系統(tǒng)的驅動,有的系統(tǒng)使用一個線性Flash(NOR型)512KB~32MB,有的系統(tǒng)使用非線性Flash(NAND型)8~512MB,有的兩個同時使用,需要根據應用規(guī)劃Flash的分區(qū)方案。
7.開發(fā)應用程序
應用程序可以放入根文件系統(tǒng)中,也可以放入YAFFS、JFFS2文件系統(tǒng)中,有的應用不使用根文件系統(tǒng),直接將應用程序和內核設計在一起,這有點類似于μCOS-II的方式。
8.燒寫內核、根文件系統(tǒng)、應用程序
9.發(fā)布產品
《linux就該這么學》是一本不錯的教程哦

嵌入式Linux系統(tǒng)開發(fā)模式

嵌入式系統(tǒng)通常為一個資源受限的系統(tǒng)。直接在嵌入式系統(tǒng)的硬件平臺上編寫軟件比較困難,有時甚至是不可能的。目前,一般采用的辦法是,先在通用計算機上編寫程序,然后,通過交叉編譯,生成目標平臺上可運行的二進制代碼格式,最后下載到目標平臺上的特定位置上運行,下面就由福州卓躍教育做具體步驟介紹?!?br> 第一步,建立嵌入式Linux應用開發(fā)環(huán)境。目前,常用的交叉開發(fā)環(huán)境主要有開放和商業(yè)兩種類型。開放的交叉開發(fā)環(huán)境的典型代表是GNU工具鏈,目前已經能夠支持x86、ARM、MIPS、PowerPC等多種處理器。商業(yè)的交叉開發(fā)環(huán)境主要有 、ARM Software Toolkit、SDS Cross compiler、WindRiver Tornado、Microsoft Embedded Visual C++等。交叉開發(fā)環(huán)境是指編譯、鏈接和調試嵌入式應用軟件的環(huán)境。它與運行嵌入式應用軟件的環(huán)境有所不同,通常采用宿主機/目標機模式。
第二步,交叉編譯和鏈接。在完成嵌入式軟件的編碼之后,就是進行編譯和鏈接,以生成可執(zhí)行代碼。由于開發(fā)過程大多是在Intel公司x86系列CPU的通用計算機上進行的,而目標環(huán)境的處理器芯片卻大多為ARM、MIPS、PowerPC、等系列的微處理器,這就要求在建立好的交叉開發(fā)環(huán)境中進行交叉編譯和鏈接。
第三步,交叉調試。
①硬件調試。如果不采用在線仿真器,可以讓CPU直接在其內部實現(xiàn)調試功能,并通過在開發(fā)板上引出的調試端口,發(fā)送調試命令和接收調試信息,完成調試過程。目前,Motorola公司提供的開發(fā)板上使用的是DBM調試端口,而ARM公司提供的開發(fā)板上使用的則是JTAG調試端口。使用合適的軟件工具與這些調試端口進行連接,可以獲得與ICE類似的調試效果。
②軟件調試。在嵌入式Linux應用開發(fā)系統(tǒng)中,Linux系統(tǒng)內核調試,可以先在Linux內核中設置一個調試樁(debug stub),用作調試過程中和宿主機之間的通信服務器。然后,可以在宿主機中通過調試器的串口與調試樁進行通信,并通過調試器控制目標機上Linux內核的運行。

如何在單linux下操作嵌入式開發(fā)板

開機后自動運行用戶的應用程序或啟動系統(tǒng)服務的命令保存在開發(fā)板根文件系統(tǒng)的/usr/etc/rc.local文件中。有的開發(fā)板開機后自動運行圖形界面程序,需要按住ctrl+c讓開發(fā)板進入到linux的shell提示符界面。其實可通過注釋掉rc.local文件中調用圖形界面的命令,增加運行用戶應用程序的命令,達到開機自動運行用戶應用程序的目的。
下面以我做的實驗為例,描述具體的實現(xiàn)步驟。該方法源于網絡,我加以驗證,稍做修改,此文相當于轉載。
1.進入pc機的linux
操作系統(tǒng),在/nfs/usr/下通過mkdir
lz
命令新建一個名為lz的文件夾,進入lz文件夾,通過mkdir
hello新建一個hello文件夾用來存放我們將要編寫的hello.c文件和編譯生成的可執(zhí)行文件。
2.在/nfs/usr/lz/hello下通過vi
hello.c命令新建hello.c文件,編輯如下測試程序:
#include
int
main(){
printf("hello,test
arm-linux!\n");
return
0;
}
完成編輯后通過:wq保存后退出。
3.主機通過如下命令交叉編譯環(huán)境編譯hello.c:
#arm-linux-gcc
–o
hello
hello.c
4.通過ls
命令可以看到在/nfs/usr/lz/hello/下已經生成了hello可執(zhí)行文件,我們可以在開發(fā)板上通過./hello來測試自己編寫的hello.c執(zhí)行情況
5.修改rc.local文件,在文件的最后通過‘#’釋掉啟動圖形界面的指令,增加執(zhí)行用戶應用程序hello的指令,具體實現(xiàn)如下:
#export
path=$qpedir/bin:$path
#qtopia
#/usr/qtopia/bin/qtopia
/usr/lz/hello/./hello
注:前三行是注釋掉啟動圖形界面,最后一行是添加的執(zhí)行用戶的hello測試程序。
6.重啟開發(fā)板,通過vivi參數配置讓開發(fā)板通過nfs掛載主機上的文件系統(tǒng),這時我們就可以通過超級終端看到開發(fā)板已經運行了我們編寫的hello程序。

「干貨」嵌入式Linux系統(tǒng)移植的四大步驟(上)


在學習系統(tǒng)移植的相關知識,在學習和調試過程中,發(fā)現(xiàn)了很多問題,也解決了很多問題,但總是對于我們的開發(fā)結果有一種莫名其妙的感覺,糾其原因,主要對于我們的開發(fā)環(huán)境沒有一個深刻的認識,有時候幾個簡單的命令就可以完成非常復雜的功能,可是我們有沒有想過,為什么會有這樣的效果?


如果沒有去追問,只是機械地完成,并且看到實驗效果,這樣做其實并沒有真正的掌握系統(tǒng)移植的本質。


在做每一個步驟的時候, 首先問問自己,為什么要這樣做,然后再問問自己正在做什么? 搞明白這幾個問題,我覺得就差不多了,以后不管更換什么平臺,什么芯片,什么開發(fā)環(huán)境,你都不會迷糊,很快就會上手。對于嵌入式的學習方法,我個人方法就是:從宏觀上把握(解決為什么的問題),微觀上研究(解決正在做什么的問題),下面以自己學習的arm-cortex_a8開發(fā)板為目標,介紹下自己的學習方法和經驗。


嵌入式Linux系統(tǒng)移植主要由四大部分組成:


一、搭建交叉開發(fā)環(huán)境
二、的選擇和移植
三、kernel的配置、編譯、和移植
四、根文件系統(tǒng)的制作


第一部分:搭建交叉開發(fā)環(huán)境


先介紹第一分部的內容:搭建交叉開發(fā)環(huán)境,首先必須得思考兩個問題,什么是交叉環(huán)境? 為什么需要搭建交叉環(huán)境?


先回答第一個問題,在嵌入式開發(fā)中,交叉開發(fā)是很重要的一個概念,開發(fā)的第一個環(huán)節(jié)就是搭建環(huán)境,第一步不能完成,后面的步驟從無談起,這里所說的交叉開發(fā)環(huán)境主要指的是:在開發(fā)主機上(通常是我的pc機)開發(fā)出能夠在目標機(通常是我們的開發(fā)板)上運行的程序。嵌入式比較特殊的是不能在目標機上開發(fā)程序(狹義上來說),因為對于一個原始的開發(fā)板,在沒有任何程序的情況下它根本都跑不起來,為了讓它能夠跑起來,我們還必須要借助pc機進行燒錄程序等相關工作,開發(fā)板才能跑起來,這里的pc機就是我們說的開發(fā)主機,想想如果沒有開發(fā)主機,我們的目標機基本上就是無法開發(fā),這也就是電子行業(yè)的一句名言:搞電子,說白了,就是玩電腦!


然后回答第二個問題,為什么需要交叉開發(fā)環(huán)境?主要原因有以下幾點:


原因 1: 嵌入式系統(tǒng)的硬件資源有很多限制,比如cpu主頻相對較低,內存容量較小等,想想讓幾百MHZ主頻的MCU去編譯一個Linux kernel會讓我們等的不耐煩,相對來說,pc機的速度更快,硬件資源更加豐富,因此利用pc機進行開發(fā)會提高開發(fā)效率。


原因2: 嵌入式系統(tǒng)MCU體系結構和指令集不同,因此需要安裝交叉編譯工具進行編譯,這樣編譯的目標程序才能夠在相應的平臺上比如:ARM、MIPS、 POWEPC上正常運行。


交叉開發(fā)環(huán)境的硬件組成主要由以下幾大部分


1.開發(fā)主機
2.目標機(開發(fā)板)
3.二者的鏈接介質,常用的主要有3種方式:(1)串口線 (2)USB線 (3)網線


對應的硬件介質,還必須要有相應的軟件“介質”支持:


1.對于串口,通常用的有串口調試助手,putty工具等,工具很多,功能都差不多,會用一兩款就可以;


2.對于USB線,當然必須要有USB的驅動才可以,一般芯片公司會提供,比如對于三星的芯片,USB下載主要由DNW軟件來完成;


3.對于網線,則必須要有網絡協(xié)議支持才可以, 常用的服務主要兩個


第一:tftp服務:

主要用于實現(xiàn)文件的下載,比如開發(fā)調試的過程中,主要用tftp把要測試的、kernel和文件系統(tǒng)直接下載到內存中運行,而不需要預先燒錄到Flash芯片中,一方面,在測試的過程中,往往需要頻繁的下載,如果每次把這些要測試的文件都燒錄到Flash中然后再運行也可以,但是缺點是:過程比較麻煩,而且Flash的擦寫次數是有限的;另外一方面:測試的目的就是把這些目標文件加載到內存中直接運行就可以了,而tftp就剛好能夠實現(xiàn)這樣的功能,因此,更沒有必要把這些文件都燒錄到Flash中去。


第二: nfs服務:

主要用于實現(xiàn)網絡文件的掛載,實際上是實現(xiàn)網絡文件的共享,在開發(fā)的過程中,通常在系統(tǒng)移植的最后一步會制作文件系統(tǒng),那么這是可以把制作好的文件系統(tǒng)放置在我們開發(fā)主機PC的相應位置,開發(fā)板通過nfs服務進行掛載,從而測試我們制作的文件系統(tǒng)是否正確,在整個過程中并不需要把文件系統(tǒng)燒錄到Flash中去,而且掛載是自動進行掛載的,bootload啟動后,kernel運行起來后會根據我們設置的啟動參數進行自動掛載,因此,對于開發(fā)測試來講,這種方式非常的方便,能夠提高開發(fā)效率。


另外,還有一個名字叫 samba 的服務也比較重要,主要用于文件的共享,這里說的共享和nfs的文件共享不是同一個概念,nfs的共享是實現(xiàn)網絡文件的共享,而samba實現(xiàn)的是開發(fā)主機上 Windows主機和Linux虛擬機之間的文件共享,是一種跨平臺的文件共享 ,方便的實現(xiàn)文件的傳輸。


以上這幾種開發(fā)的工具在嵌入式開發(fā)中是必備的工具,對于嵌入式開發(fā)的效率提高做出了偉大的貢獻,因此,要對這幾個工具熟練使用,這樣你的開發(fā)效率會提高很多。等測試完成以后,就會把相應的目標文件燒錄到Flash中去,也就是等發(fā)布產品的時候才做的事情,因此對于開發(fā)人員來說,所有的工作永遠是測試。


通過前面的工作,我們已經準備好了交叉開發(fā)環(huán)境的硬件部分和一部分軟件,最后還缺少交叉編譯器,讀者可能會有疑問,為什么要用交叉編譯器?前面已經講過,交叉開發(fā)環(huán)境必然會用到交叉編譯工具,通俗地講就是在一種平臺上編譯出能運行在體系結構不同的另一種平臺上的程序,開發(fā)主機PC平臺(X86 CPU)上編譯出能運行在以ARM為內核的CPU平臺上的程序,編譯得到的程序在X86 CPU平臺上是不能運行的,必須放到ARM CPU平臺上才能運行,雖然兩個平臺用的都是Linux系統(tǒng)。相對于交叉編譯,平常做的編譯叫本地編譯,也就是在當前平臺編譯,編譯得到的程序也是在本地執(zhí)行。用來編譯這種跨平臺程序的編譯器就叫交叉編譯器,相對來說,用來做本地編譯的工具就叫本地編譯器。所以要生成在目標機上運行的程序,必須要用交叉編譯工具鏈來完成。

這里又有一個問題,不就是一個交叉編譯工具嗎?為什么又叫交叉工具鏈呢?原因很簡單,程序不能光編譯一下就可以運行,還得進行匯編和鏈接等過程,同時還需要進行調試,對于一個很大工程,還需要進行工程管理等等,所以,這里 說的交叉編譯工具是一個由 編譯器、連接器和解釋器 組成的綜合開發(fā)環(huán)境,交叉編譯工具鏈主要由binutils(主要包括匯編程序as和鏈接程序ld)、gcc(為GNU系統(tǒng)提供C編譯器)和glibc(一些基本的C函數和其他函數的定義) 3個部分組成。有時為了減小libc庫的大小,也可以用別的 c 庫來代替 glibc,例如 uClibc、dietlibc 和 newlib。

那么,如何得到一個交叉工具鏈呢?是從網上下載一個“程序”然后安裝就可以使用了嗎?回答這個問題之前先思考這樣一個問題,我們的交叉工具鏈顧名思義就是在PC機上編譯出能夠在我們目標開發(fā)平臺比如ARM上運行的程序,這里就又有一個問題了,我們的ARM處理器型號非常多,難道有專門針對我們某一款的交叉工具鏈嗎?若果有的話,可以想一想,這么多處理器平臺,每個平臺專門定制一個交叉工具鏈放在網絡上,然后供大家去下載,想想可能需要找很久才能找到適合你的編譯器,顯然這種做法不太合理,且浪費資源!因此,要得到一個交叉工具鏈,就像我們移植一個Linux內核一樣,我們只關心我們需要的東西,編譯我們需要的東西在我們的平臺上運行,不需要的東西我們不選擇不編譯,所以,交叉工具鏈的制作方法和系統(tǒng)移植有著很多相似的地方,也就是說,交叉開發(fā)工具是一個支持很多平臺的工具集的集合(類似于Linux源碼),然后我們只需從這些工具集中找出跟我們平臺相關的工具就行了,那么如何才能找到跟我們的平臺相關的工具,這就是涉及到一個如何制作交叉工具鏈的問題了。


通常構建交叉工具鏈有如下三種方法:


方法一 : 分步編譯和安裝交叉編譯工具鏈所需要的庫和源代碼,最終生成交叉編譯工具鏈。該方法相對比較困難,適合想深入學習構建交叉工具鏈的讀者。如果只是想使用交叉工具鏈,建議使用下列的方法二構建交叉工具鏈。


方法二: 通過Crosstool-ng腳本工具來實現(xiàn)一次編譯,生成交叉編譯工具鏈,該方法相對于方法一要簡單許多,并且出錯的機會也非常少,建議大多數情況下使用該方法構建交叉編譯工具鏈。


方法三 : 直接通過網上下載已經制作好的交叉編譯工具鏈。該方法的優(yōu)點不用多說,當然是簡單省事,但與此同時該方法有一定的弊端就是局限性太大,因為畢竟是別人構建好的,也就是固定的,沒有靈活性,所以構建所用的庫以及編譯器的版本也許并不適合你要編譯的程序,同時也許會在使用時出現(xiàn)許多莫名其妙的錯誤,建議讀者慎用此方法。

crosstool-ng是一個腳本工具,可以制作出適合不同平臺的交叉編譯工具鏈,在進行制作之前要安裝一下軟件:
$ sudo apt-get install g++ -dev bison flex texinfo automake libtool patch gcj cvs cvsd gawk
crosstool腳本工具可以在 1. 設定源碼包路徑和交叉編譯器的安裝路徑
2. 修改交叉編譯器針對的構架

3. 增加編譯時的并行進程數,以增加運行效率,加快編譯,因為這個編譯會比較慢。
4. 關閉JAVA編譯器 ,減少編譯時間
5. 編譯
6. 添加環(huán)境變量
7. 刷新環(huán)境變量。
8. 測試交叉工具鏈

到此,嵌入式Linux系統(tǒng)移植四大部分的第一部分工作全部完成,接下來可以進行后續(xù)的開發(fā)了。



第二部分:的選擇和移植


01 Boot Loader 概念


就是在操作系統(tǒng)內核運行之前運行的一段小程序。通過這段小程序,我們可以初始化硬件設備、建立內存空間的映射圖,從而將系統(tǒng)的軟硬件環(huán)境帶到一個合適的狀態(tài),以便為最終調用操作系統(tǒng)內核準備好正確的環(huán)境,他就是所謂的引導加載程序(Boot Loader)。


02 為什么系統(tǒng)移植之前要先移植?


的任務是引導操作系統(tǒng),所謂引導操作系統(tǒng),就是啟動內核,讓內核運行就是把內核加載到內存RAM中去運行,那先問兩個問題:第一個問題,是誰把內核搬到內存中去運行?第二個問題:我們說的內存是SDRAM,大家都知道,這種內存和SRAM不同,最大的不同就是SRAM只要系統(tǒng)上電就可以運行,而SDRAM需要軟件進行初始化才能運行,那么在把內核搬運到內存運行之前必須要先初始化內存吧,那么內存是由誰來初始化的呢?其實這兩件事情都是由來干的,目的是為內核的運行準備好軟硬件環(huán)境,沒有bootloadr我們的系統(tǒng)當然不能跑起來。

03 的分類


首先更正一個錯誤的說法,很多人說就是U-boot,這種說法是錯誤的,確切來說是u-boot是的一種。也就是說具有很多種類,


由上圖可以看出,不同的具有不同的使用范圍,其中最令人矚目的就是有一個叫U-Boot的,是一個通用的引導程序,而且同時支持X86、ARM和PowerPC等多種處理器架構。U-Boot,全稱 Universal Boot Loader,是遵循GPL條款的開放源碼項目,是由德國DENX小組開發(fā)的用于多種嵌入式CPU的程序,對于Linux的開發(fā),德國的u-boot做出了巨大的貢獻,而且是開源的。

u-boot具有以下特點:

① 開放源碼;
② 支持多種嵌入式操作系統(tǒng)內核,如Linux、NetBSD, VxWorks, QNX, RTEMS, ARTOS, LynxOS;
③ 支持多個處理器系列,如PowerPC、ARM、x86、MIPS、XScale;
④ 較高的可靠性和穩(wěn)定性;
⑤ 高度靈活的功能設置,適合U-Boot調試、操作系統(tǒng)不同引導要求、產品發(fā)布等;
⑥ 豐富的設備驅動源碼,如串口、以太網、SDRAM、FLASH、LCD、NVRAM、EEPROM、RTC、鍵盤等;
⑦ 較為豐富的開發(fā)調試文檔與強大的網絡技術支持;
其實,把u-boot可以理解為是一個小型的操作系統(tǒng)。

04 u-boot的目錄結構


* board 目標板相關文件,主要包含SDRAM、FLASH驅動;
* common 獨立于處理器體系結構的通用代碼,如內存大小探測與故障檢測;
* cpu 與處理器相關的文件。如mpc8xx子目錄下含串口、網口、LCD驅動及中斷初始化等文件;
* driver 通用設備驅動,如CFI FLASH驅動(目前對INTEL FLASH支持較好)
* doc U-Boot的說明文檔;
* examples可在U-Boot下運行的示例程序;如hello_world.c,timer.c;
* include U-Boot頭文件;尤其configs子目錄下與目標板相關的配置頭文件是移植過程中經常要修改的文件;
* lib_xxx 處理器體系相關的文件,如lib_ppc, lib_arm目錄分別包含與PowerPC、ARM體系結構相關的文件;
* net 與網絡功能相關的文件目錄,如bootp,nfs,tftp;
* post 上電自檢文件目錄。尚有待于進一步完善;
* rtc RTC驅動程序;
* tools 用于創(chuàng)建U-Boot S-RECORD和BIN鏡像文件的工具;

05 u-boot的工作模式


U-Boot的工作模式有 啟動加載模式和下載模式 。啟動加載模式是的正常工作模式,嵌入式產品發(fā)布時,必須工作在這種模式下,將嵌入式操作系統(tǒng)從FLASH中加載到SDRAM中運行,整個過程是自動的。 下載模式 就是通過某些通信手段將內核映像或根文件系統(tǒng)映像等從PC機中下載到目標板的SDRAM中運行,用戶可以利用提供的一些令接口來完成自己想要的操作,這種模式主要用于測試和開發(fā)。

06 u-boot的啟動過程


大多數都分為stage1和stage2兩大部分,U-boot也不例外。依賴于cpu體系結構的代碼(如設備初始化代碼等)通常都放在stage1且可以用匯編語言來實現(xiàn),而stage2則通常用C語言來實現(xiàn),這樣可以實現(xiàn)復雜的功能,而且有更好的可讀性和移植性。


1、 stage1(start.s代碼結構)
U-boot的stage1代碼通常放在start.s文件中,它用匯編語言寫成,其主要代碼部分如下:
(1) 定義入口。由于一個可執(zhí)行的image必須有一個入口點,并且只能有一個全局入口,通常這個入口放在rom(Flash)的0x0地址,因此,必須通知編譯器以使其知道這個入口,該工作可通過修改連接器腳本來完成。
(2)設置異常向量(exception vector)。
(3)設置CPU的速度、時鐘頻率及中斷控制寄存器。
(4)初始化內存控制器 。
(5)將rom中的程序復制到ram中。
(6)初始化堆棧 。
(7)轉到ram中執(zhí)行,該工作可使用指令ldrpc來完成。


2、 stage2(C語言代碼部分)

lib_arm/board.c中的start armboot是C語言開始的函數,也是整個啟動代碼中C語言的主函數,同時還是整個u-boot(armboot)的主函數,該函數主要完成如下操作:
(1)調用一系列的初始化函數。
(2)初始化flash設備。
(3)初始化系統(tǒng)內存分配函數。
(4)如果目標系統(tǒng)擁有nand設備,則初始化nand設備。
(5)如果目標系統(tǒng)有顯示設備,則初始化該類設備。
(6)初始化相關網絡設備,填寫ip,c地址等。
(7)進入命令循環(huán)(即整個boot的工作循環(huán)),接受用戶從串口輸入的命令,然后進行相應的工作。

07 基于cortex-a8的啟動過程分析


s5pc100支持兩種啟動方式,分別為USB啟動方式和NandFlash啟動方式:


1. S5PC100 USB啟動過程

[1] A8 reset, 執(zhí)行iROM中的程序
[2] iROM中的程序根據S5PC100的配置管腳(SW1開關4,撥到4對面),判斷從哪里啟動(USB)
[3] iROM中的程序會初始化USB,然后等待PC機下載程序
[4] 利用DNW程序,從PC機下載SDRAM的初始化程序到iRAM中運行,初始化SDRAM
[5] SDRAM初始化完畢,iROM中的程序繼續(xù)接管A8, 然后等待PC下載程序()
[6] PC利用DNW下載到SDRAM
[7] 在SDRAM中運行

2. S5PC100 Nandflash啟動過程

[1] A8 reset, 執(zhí)行IROM中的程序
[2] iROM中的程序根據S5PC100的配置管腳(SW1開關4,撥到靠4那邊),判斷從哪里啟動(Nandflash)
[3] iROM中的程序驅動Nandflash
[4] iROM中的程序會拷貝Nandflash前16k到iRAM
[5] 前16k的程序(前半部分)初始化SDRAM,然后拷貝完整的到SDRAM并運行
[6] 拷貝內核到SDRAM,并運行它
[7] 內核運行起來后,掛載rootfs,并且運行系統(tǒng)初始化腳本

08 u-boot移植(基于cortex_a8的s5pc100為例)


1.建立自己的平臺

(1).下載源碼包2010.03版本,比較穩(wěn)定
(2).解壓后添加我們自己的平臺信息,以smdkc100為參考版,移植自己s5pc100的開發(fā)板
(3).修改相應目錄的文件名,和相應目錄的Makefile,指定交叉工具鏈。
(4).編譯
(5).針對我們的平臺進行相應的移植,主要包括修改SDRAM的運行地址,從
(6).“開關”相應的宏定義
(7).添加Nand和網卡的驅動代碼
(8).優(yōu)化go命令
(9).重新編譯 make distclean(徹底刪除中間文件和配置文件) make s5pc100_config(配置我們的開發(fā)板) make(編譯出我們的u-boot.bin鏡像文件)
(10).設置環(huán)境變量,即啟動參數,把編譯好的u-boot下載到內存中運行,過程如下:
1. 配置開發(fā)板網絡
ip地址配置:
$setenv ipaddr 192.168.0.6 配置ip地址到內存的環(huán)境變量
$saveenv 保存環(huán)境變量的值到nandflash的參數區(qū)

網絡測試:
在開發(fā)開發(fā)板上ping虛擬機:
$ ping 192.168.0.157(虛擬機的ip地址)

如果網絡測試失敗,從下面幾個方面檢查網絡:
1. 網線連接好
2. 開發(fā)板和虛擬機的ip地址是否配置在同一個網段
3. 虛擬機網絡一定要采用橋接(VM--Setting-->option)
4. 連接開發(fā)板時,虛擬機需要設置成 靜態(tài)ip地址

2. 在開發(fā)板上,配置tftp服務器(虛擬機)的ip地址
$setenv serverip 192.168.0.157(虛擬機的ip地址)
$saveenv
3. 拷貝u-boot.bin到/tftpboot(虛擬機上的目錄)
4. 通過tftp下載u-boot.bin到開發(fā)板內存
$ tftp 20008000(內存地址即可) u-boot.bin(要下載的文件名)

如果上面的命令無法正常下載:
1. serverip配置是否正確
2. tftp服務啟動失敗,重啟tftp服務
#sudo service tftpd-hpa restart

5. 燒寫u-boot.bin到nandflash的0地址
$nand erase 0(起始地址) 40000(大小) 擦出nandflash 0 - 256k的區(qū)域
$nand write 20008000((緩存u-boot.bin的內存地址) 0(nandflash上u-boot的位置) 40000(燒寫大小)

6. 切換開發(fā)板的啟動方式到nandflash
1. 關閉開發(fā)板
2. 把SW1的開關4撥到4的那邊
3. 啟動開發(fā)板,它就從nandflash啟動

溫馨提示:為不影響您的學業(yè),來校區(qū)前請先電話咨詢,方便我校安排相關的專業(yè)老師為您解答
  • 熱門課程
  • 作者最新文章
  • 在線報名
申請試聽課程

只要一個電話
我們免費為您回電

姓名不能為空
手機號格式錯誤