僅概述, 不對細節進行過多描述(不同的晶元平台,細節也會略有不同,多說無益)。文章只有乙個目的,就是對於新接觸linux soc平台的人,幫助他們明確目標,清晰思路,以便更迅速的切入到工作中;
很明顯,為了讓乙個晶元工作起來,晶元需要程式。
首先,針對第乙個問題,嵌入式linux的soc,整體架構,從操作的步驟上劃分,可以分為三大塊,也可以理解為,有三大塊程式需要固化(燒錄),
(雖然,linux核心也有引導**,但是u-boot可以提供更便利的debug與updata,所以犧牲一些啟動速度是值得的。市面上大多數的soc是有u-boot的);
作為新人,對u-boot有點陌生,是正常的。即使這樣,也不建議過多的去閱讀/了解u-boot。除非,工作的本身就是u-boot的維護及個性化公升級。為什麼不建議去深入研究u-boot呢,原因很簡單,通常廠商會提供適用的原始碼、編譯步驟、固化工具/步驟;所以,新平台,你需要做的,就是耐心的讀完廠家的操作指南;關於u-boot,在99%以上的應用場合裡,是乙個幾近於標準不需要使用者做出修改的。
對linux-kernel進行必要的裁剪或載入使用者自己的驅動;聽起來,好怕怕的樣子。事實上,廠商也提供了linux-kernel原始碼及工具。裡面還包含了平台本身硬體資源對應的驅動,譬如 spi,usb-host,otg,iic等等,傻瓜式的編譯,傻瓜式的勾選配置。裁剪就完成了。高大尚的說辭,瞬間被拉低了身價;所以,需要你做的是,有耐心的讀完廠商提供的操作指南,這個指南會告訴你,如何去編譯這個核心原碼,生成映象檔案,固化到晶元裡。
雖然,操作如此傻瓜,但是我們還應該稍稍了解點基本常識。linux是乙個一體化的核心(一體化核心也稱「單核心」相對於「微核心」-例如,ucos-ii,psos,vxwork);「一體化」三個字隱隱透露出這玩意,移植是相當"方便"的(至於如何從0開始移植,只有傻冒才會去做,除非你要幹的就是這個活兒。敲黑板,敲黑板,敲黑板,廠家已經提供了與晶元相匹配的 linux-kernel原始碼了,應該在這個原始碼的基礎上去繼續深耕才是正道兒)。
linux核心採用模組化設計,功能模組(驅動層)先編譯成模組,然後可以在核心執行中動態的載入/解除安裝而不需要重啟;
linux核心整合了完整的posix網路協議棧,網路功能完善;
其他的一些穩定性強,安全性好,支援裝置廣泛等等一些張嘴就來優點,就不再描述了。隨便說,反正不會錯就對了。
那麼linux-kernel有哪些作用呢?或者說有啥組成的呢?又或者說它能幹點嘛?
上個結構圖看一下。如下圖:
上圖里的所有的功能模組,基本就是字面意思,也沒啥深入要說的了。但是,有乙個叫 「檔案系統」的模組,敲黑板,敲黑板,上圖的 第二行,「檔案系統」。這個檔案系統,是使用者自製作的。也就是本段落開始的時候說的,「需要固化三大塊程式」中的乙個;詳述如下「 3.」。
從上圖看,linux核心裡有乙個單元叫「檔案系統」 ,linux啟動後期,會去尋找並掛載根檔案系統;然後,執行裡面指定的程式及其他等等。。。簡而言之這玩意很重要。需要執行的根檔案系統可以是固化在晶元內部的(作為產品,肯定要固化到晶元裡面),也可以是存在於晶元記憶體的映象(顯然掉電,重啟記憶體裡資料就丟失了。);根檔案系統它包含了linux正常執行所必須的程式、庫、各種配置引數等;
剛剛在第「2.」中提到的廠商提供的核心原始碼。是指,除了「檔案系統」以外的所有的東西。所以,開發者,需要自己製作乙個檔案系統;開發者編寫的應用程式(bin),驅動程式(.ko)也都存放在這個檔案系統裡的。
綜上述,製作乙個完整的linux soc需要 製作個u-boot映象( 這是容易的),製作個linux核的映象(也算不複雜),製作個根檔案系統映象(如何製作根檔案系統,需要了解linux根檔案系統的目錄結構(大多數時候,業內基本上是按照fhs--檔案層次標準--來執行的))這裡不做詳細描述;
其次,針對第二個問題,做如下描述:
值得強調的是「linux驅動程式」與「linux應用程式」是有區別的。驅動載入後執行在核心態,屬於核心部分,應用程式執行在使用者態;在程式設計時,它們的編寫格式/風格也是有區別的而且區別很大,這裡不贅述細節。
為了實現某個產品的功能,在乙個完整的應用中,有可能會需要用到「使用者自定義的驅動程式+使用者的應用程式+標準驅動模組」,也可能僅僅只需要「使用者應用程式+標準驅動模組」。
現在說的重點是,如果需要用到自定義的驅動程式時,那麼除錯好的驅動程式( .ko檔案),放在**,如何載入到核心中?換句話說,如何固化這個驅動程式呢?
驅動程式,與應用程式都是存放在根檔案系統下的。應用程式,通過配置檔案可以開機自啟動。驅動程式也可以通過指令碼來載入。顯然,應用程式,自定義的驅動,配置檔案,指令碼等等都可以在製作檔案體系生成映象檔案前,就存放在檔案體系中,生成映象時便包含在映象檔案裡。固化到晶元裡就可以了。
第三、關於debug
交叉編譯環境,宿主機開發; 我們可以把目標板上的檔案系統建立在主機上,通過tftp或其他方式,讓宿機掛載這個檔案系統;所以,修改主機上的這個檔案體系內容,實質上就是修改了目標機上的檔案體系內容;提供了相對便捷的debug的方式;除錯成功後,把這個檔案體系打包製作成映象檔案,固化到晶元中就可以了。(固化工具,方法,步驟,**商同樣也有指導說明。需要耐心閱讀).
嵌入式Linux核心製作
一.linux核心簡介 linux系統架構分為核心空間和使用者空間。它們之間切換條件 1.系統呼叫 2.硬體中斷。核心架構 1.系統呼叫介面 2.程序管理塊 3.記憶體管理 4.體系結構相關 4.虛擬檔案系統 5.網路棧 6.裝置驅動 二.製作linux核心 1.修改配置檔案 make config...
嵌入式linux應用的製作與韌體燒錄的概述
僅概述,不對細節進行過多描述 不同的晶元平台,細節也會略有不同,多說無益 文章只有乙個目的,就是對於新接觸linux soc平台的人,幫助他們明確目標,清晰思路,以便更迅速的切入到工作中 很明顯,為了讓乙個晶元工作起來,晶元需要程式。韌體包含 uboot logo dtb以及kernel。檔案系統?...
嵌入式核心製作
一.核心簡介 1.系統架構 1 linux是由使用者空間和核心空間構成的 2 使用者空間主要是使用者應用程式以及一些c庫檔案,配置檔案。一般是看得見的。3 核心空間主要是系統呼叫介面,狹義上的核心,處理器架構相關的 4 劃分兩個空間的理由 處理器有不同的工作模式,不同的模式許可權不一樣,可以執行的指...