1.什麼是交叉編譯環境?

在宿主機上進行開發編譯,到目標機上進行調試運行。一般情況是在通用計算機上進行軟體的編輯編譯,然後下載到嵌入式設備上運行調試的方式。

2.交叉編譯的原因:

目標機對體積,功耗等有嚴格的限制,資源也面嚮應用,較為緊張,要求僅僅能流暢運行代碼即可,而將開發環境放在主機上。而且現在集成開發環境提供了各種修好的庫,用起來也方便。

3.什麼是根文件系統?

文件系統就是把你電腦裡面的數據按照一定的格式組織成一棵樹,數據塊對應名稱,刪了它就相當於硬碟格式化了.文件系統就是把電腦裡面的數據和元數據進行組織的一種機制。

根文件系統就是除了內核以外的,所有系統文件存儲的地方,之所以稱為根,就是因為根才有樹。

文件系統與內核是完全獨立的兩個部分,他是內核系統啟動時所mount的第一個文件系統,裡面有內核啟動所必需的數據,不然就退出啟動。

文件系統這種機制有利於用戶與操作系統交互的主要工具,尤其是linux系統。

常見的文件系統:JFFS2,CRAMFS,EXT2 over NFTL,EXT3 over NFTL,EXT2 over RAM disk EXT4

4.linux內核在開發板上啟動的過程?

首先,linux系統開機後,運行bootloader

然後,BootLoader引導啟動內核,由內核檢查和初始化硬體設備,載入設備的驅動程序模塊,安裝root文件系統

接著,內核啟動一個名為init的進程

後來,在init進程啟動運行完以後,init進程啟動後續進程,系統開始運作,引導結束

同時,init進程啟動時需要讀取inittab配置文件,該文件確定init在系統啟動和關機時的工作特性。

5.linux開發的主要流程?

搭建開發環境->燒寫BootLoader->燒寫內核->燒寫根文件系統->燒寫應用程序

開發環境:redhat-linux,下載相應的gcc交叉編譯器進行安裝、配置開發主機(配置MINICOM,它的作用是用來作為調試的嵌入式開發板信息輸出監視器和鍵盤輸入工具,配置網路只要是配置IP地址,NFS文件系統,需要關閉防火牆)

燒寫bootloader:下載一些公開源代碼的bootloader,根據自己的具體晶元進行修改,下載時,有些晶元上沒有內置引導裝載程序,就需要編寫燒寫開發板上的flash的燒寫程序。

下載內核:如果有專門的針對你所使用的cpu移植好的linux操作系統最好,下載後 添加自己特定的驅動程序,進行調試和修改

下載根文件系統:busybox.net下載使用busybox軟體進行功能裁剪,產生一個 基本的 根文件系統,根文件系統在嵌入式中一般設置為只讀,需要使用mkcramfs、genromfs等工具產生燒寫映像文件

下載用戶程序 :可以下載到根文件系統,有些程序不用根文件系統,而是直接和內核 設計在一起。

6.什麼是bootloader?

bootloader 為引導載入程序,是嵌入式加電後運行的 第一段 代碼,相當於pc機的bios。它在系統中的位置通常固化在硬體 的 某個 固態存儲設備上,加電後自動啟動。

功能:

初始化,給cpu一個合適的工作環境,以便調用操作系統內核或者用戶程序;

下載內核和根文件系統;

載入內核 。

操作模式:啟動載入和下載兩種模式。

啟動過程:

上電以後,先啟動cpu即執行start.s類似的功能代碼(配置中斷,初始化堆棧 ,拷貝代碼等)

然後進行載入內核準備:1》至少初始化一個串口,以便像終端用戶反饋數據

2》檢測系統內存映射,那些是可用的ram

3》將內核與根文件系統從flash上調入ram中

4》為內核啟動設置參數

5》調用內核

7.為什麼要進行bootloader 移植 ?

每種不同的 cpu 體系 結構有不同的bootloader;

體系結構相同,bootloader還依賴於具體的嵌入式板級設備的配置


推薦閱讀:
相关文章