ARM uClinux開發環境的建立

2021-04-13 22:56:39 字數 2270 閱讀 7542

開發環境的建立。

先說兩句廢話為和我以前一樣對作業系統(尤其是嵌入式作業系統)迷惑的弟兄解釋些概念。因為總是有人在問是不是一定要用作業系統,我的cpu能不能移植作業系統,可以移植什麼作業系統,有了作業系統可不可以執行某些程式。

從我的個人經歷來講,這其實就是許多硬體出身的弟兄對作業系統這個東西有神秘感(和我一年前一樣)。說白了,作業系統就是一段設計非常巧妙的程式,和你自己的程式從本質講沒有區別,於是,以上問題轉為,我是不是一定要用這段程式,我的cpu能不能執行這段程式,可以跑什麼樣的程式。這個程式可以跑,呼叫這個程式介面的另乙個程式能不能跑!

答案也就變得簡單,作業系統對任何乙個cpu都不是必須的(對嵌入式系統更是如此),你可以自己編些程式在沒有作業系統的pc裸機上跑(bios就是這樣的),像玩c51一樣,(雖然奢侈的讓人有些心痛),或者移植ucos到上面。另一方面,現代作業系統大多需要一些硬體的支援,(像保護模式的實現),反過來說,高階cpu中專門有針對支援作業系統的體系結構,這樣,許多作業系統的實現是挑剔硬體平台的。其實其它程式也一樣,你編的程式使用的片上外設另一cpu上沒有,那這段程式就無法移植了。這就是話粗理不粗。書歸正傳,還是聊聊arm+uclinux開發模式下開發環境的建立(其實下面說到的東西不僅限於這種硬體平台和作業系統)

很久以前就在介紹嵌入式系統開發的書上見過「交叉編譯環境」這詞,當時覺得很玄,用了以後才知道,其實就是解決在誰的地盤上用誰的工具編誰的**問題。

編譯的最主要的工作就在將你的程式轉化成執行該程式的cpu所能識別的機器**,不同的cpu有相應的編譯器,另一方面。編譯器本身也是程式,當然也要在某乙個cpu平台上執行。於是交叉編譯的交叉點就在那個編譯器本身是cpu1上的乙個程式,卻在為cpu2編譯**(整個乙個吃裡扒外!)。這麼一想,以前用51和dsp的開發軟體(大部分都是ide-整合開發環境)開發程式時,都算是交叉編譯啦。當然,假如在你的arm系統上,作業系統已經正常執行,並且你的資源足夠多,你可以把pc機上執行的arm編譯工具移植到arm上,然後所有該系統的應用程式都直接在arm系統上編譯,這就不算交叉編譯,但如果有條件這麼作,程式的開發或者移植就方便多了,因為整個開發過程又回到在自己pc機上編應用程式的那種模式了,那就是在自己的地盤上用自己的編譯器編自己的應用程式。

與不使用作業系統的開發模式不同(此處的作業系統尤其指提供了專門的介面函式庫的作業系統,目前的ucos就不算),在目標板(就是實現系統的板子)使用作業系統的開發模式下,交叉編譯環境中還需要該對應該作業系統的庫。比如uclinux提供的uclibc。此時,開發用的主機上不光要有目標板cpu所需的編譯工具,還要有對應作業系統的庫,又因為一般庫檔案還要在開發機上拿目標cpu的編譯器重新編譯一下,所以還要把作業系統的原碼也放到開發機上。(唉,跟目標板沒什麼關係,卻要幫它背這麼多東西,真是上輩子欠它的!!)。

雖然作業系統的介面庫至關重要,但大家似乎已經淡忘了它的存在。這些多是因為大家已經遠離了刀耕火種的年代(需要告訴編譯器需要的include路徑,lib路徑,以及lib的名稱),整合的編譯環境讓我們編譯鏈結的所有繁瑣工作化作對build按鈕的瀟灑一擊。而且不論是windows環境,還是linux環境,都有環境變數去記錄這些引數。。但嘗試將/usr/lib目錄改乙個名字,你就會知道你不能無視他們的存在,因為作業系統的功能都是通過這些庫來交給應用層程式使用的。當然如果你的系統不依靠任何作業系統,像最原始的那種完全自己實現所有**,就只需要乙個編譯工具,少了這些羅嗦事。

以上的東西一般時候是沒有必要仔細研究,但交叉環境下開發或移植比較大的程式時,你可能就需要了解編譯器,鏈結器等開發工具的幾乎所有重要引數。

我在開發時,主機完全使用的是linux,如果有條件,建議大家這樣作,linux的使用沒有想象的複雜(雖然我現在身邊還要放一本關於linux使用的書籍),而且開發程式可以先在主機上調通,然後用交叉編譯工具為目標系統重新編譯一遍,可以這樣做是因為主機是linux,目標系統跑uclinux,兩個作業系統提供的應用程式介面幾乎是一樣的,所以程式幾乎不用修改。

在我的系統上,建立基本的開發環境過程如下。

(1) 安裝gnu開發工具鏈(是gnu開發的針對arm cpu的一組編譯開發程式(是linux程式)。包括arm-elf-gcc,arm-elf-ld等

(2) 將uclinux源**源**解壓到相應路徑下,按照編譯核心的步鄹編譯一遍(此時使用的編譯工具已經是上面提到的arm編譯工具了,因為它要在arm cpu上執行,另外,和編譯linux核心一樣,此時可以通過menuconfig來對核心提供的功能進行裁減

(3) 將庫(uclibc)解壓到相應路徑下,用以上工具編譯一遍。

這樣最基本的環境就算搭建好了。

本文**

軟體開發環境 開發環境 測試環境 生產環境的區別

原創 2016年06月13日 15 46 21 對於乙個剛進入公司的新人來說,在熟悉工作環境的時候,會聽著幾個 老人 在自己可視範圍之外或者輕鬆的討論著業務,其措辭拿捏精準,期間,涉及到一系列的概念,可能會讓你不覺明厲,暗嘆 高階,大氣,上檔次 有些術語,它既有官方稱呼,也有通俗叫法,對於不覺明厲的...

軟體開發環境 開發環境 測試環境 生產環境的區別

對於乙個剛進入公司的新人來說,在熟悉工作環境的時候,會聽著幾個 老人 在自己可視範圍之外或者輕鬆的討論著業務,其措辭拿捏精準,期間,涉及到一系列的概念,可能會讓你不覺明厲,暗嘆 高階,大氣,上檔次 有些術語,它既有官方稱呼,也有通俗叫法,對於不覺明厲的我們只能在 不識廬山真面目,只緣身在此山中 的大...

開發環境 生產環境 測試環境的區別

開發環境 程式設計師專門用於開發的伺服器,配置較隨意,為了開發除錯方便,一般開啟全部錯誤報告和測試工具,是最基礎的環境。開發環境的分支,一般是feature 功能 分支 測試環境 一般是轉殖乙份生產環境的配置,當乙個程式在測試環境工作不正常時,肯定不能把它發布到生產伺服器上的,是開發環境到生產環境的...