資料介紹
嵌入式Linux系統移植主要由四大部分組成:
? ? 搭建交叉開發環境;
? ? bootloader的選擇和移植;
? ? kernel的配置、編譯、和移植;
? ? 根文件系統的制作;
第一部分:搭建交叉開發環境
先介紹第一分部的內容:搭建交叉開發環境,首先必須得思考兩個問題,什么是交叉環境? 為什么需要搭建交叉環境?
先回答第一個問題,在嵌入式開發中,交叉開發是很重要的一個概念,開發的第一個環節就是搭建環境,第一步不能完成,后面的步驟從無談起,這里所說的交叉開發環境主要指的是:在開發主機上(通常是我的pc機)開發出能夠在目標機(通常是我們的開發板)上運行的程序。嵌入式比較特殊的是不能在目標機上開發程序(狹義上來說),因為對于一個原始的開發板,在沒有任何程序的情況下它根本都跑不起來,為了讓它能夠跑起來,我們還必須要借助pc機進行燒錄程序等相關工作,開發板才能跑起來,這里的pc機就是我們說的開發主機,想想如果沒有開發主機,我們的目標機基本上就是無法開發,這也就是電子行業的一句名言:搞電子,說白了,就是玩電腦!
然后回答第二個問題,為什么需要交叉開發環境?主要原因有以下幾點:
原因1:嵌入式系統的硬件資源有很多限制,比如cpu主頻相對較低,內存容量較小等,想想讓幾百MHZ主頻的MCU去編譯一個Linux kernel會讓我們等的不耐煩,相對來說,pc機的速度更快,硬件資源更加豐富,因此利用pc機進行開發會提高開發效率。
原因2:嵌入式系統MCU體系結構和指令集不同,因此需要安裝交叉編譯工具進行編譯,這樣編譯的目標程序才能夠在相應的平臺上比如:ARM、MIPS、POWEPC上正常運行。
交叉開發環境的硬件組成主要由以下幾大部分:
1.開發主機
2.目標機(開發板)
3.二者的鏈接介質,常用的主要有3中方式:
(1)串口線
(2)USB線
(3)網線
對應的硬件介質,還必須要有相應的軟件“介質”支持:
1.對于串口,通常用的有串口調試助手,putty工具等,工具很多,功能都差不多,會用一兩款就可以;
2.對于USB線,當然必須要有USB的驅動才可以,一般芯片公司會提供,比如對于三星的芯片,USB下載主要由DNW軟件來完成;
3.對于網線,則必須要有網絡協議支持才可以,常用的服務主要兩個
? ? tftp服務:主要用于實現文件的下載,比如開發調試的過程中,主要用tftp把要測試的bootloader、kernel和文件系統直接下載到內存中運行,而不需要預先燒錄到Flash芯片中,一方面,在測試的過程中,往往需要頻繁的下載,如果每次把這些要測試的文件都燒錄到Flash中然后再運行也可以,但是缺點是:過程比較麻煩,而且Flash的擦寫次數是由限的;另外一方面:測試的目的就是把這些目標文件加載到內存中直接運行就可以了,而tftp就剛好能夠實現這樣的功能,因此,更沒有必要把這些文件都燒錄到Flash中去
? ? nfs服務:主要用于實現網絡文件的掛載,實際上是實現網絡文件的共享,在開發的過程中,通常在系統移植的最后一步會制作文件系統,那么這是可以把制作好的文件系統放置在我們開發主機PC的相應位置,開發板通過nfs服務進行掛載,從而測試我們制作的文件系統是否正確,在整個過程中并不需要把文件系統燒錄到Flash中去,而且掛載是自動進行掛載的,bootload啟動后,kernel運行起來后會根據我們設置的啟動參數進行自動掛載,因此,對于開發測試來講,這種方式非常的方便,能夠提高開發效率。
另外,還有一個名字叫samba的服務也比較重要,主要用于文件的共享,這里說的共享和nfs的文件共享不是同一個概念,nfs的共享是實現網絡文件的共享,而samba實現的是開發主機上Windows主機和Linux虛擬機之間的文件共享,是一種跨平臺的文件共享,方便的實現文件的傳輸。
以上這幾種開發的工具在嵌入式開發中是必備的工具,對于嵌入式開發的效率提高做出了偉大的貢獻,因此,要對這幾個工具熟練使用,這樣你的開發效率會提高很多。等測試完成以后,就會把相應的目標文件燒錄到Flash中去,也就是等發布產品的時候才做的事情,因此對于開發人員來說,所有的工作永遠是測試。
通過前面的工作,我們已經準備好了交叉開發環境的硬件部分和一部分軟件,最后還缺少交叉編譯器,讀者可能會有疑問,為什么要用交叉編譯器?前面已經講過,交叉開發環境必然會用到交叉編譯工具,通俗地講就是在一種平臺上編譯出能運行在體系結構不同的另一種平臺上的程序,開發主機PC平臺(X86 CPU)上編譯出能運行在以ARM為內核的CPU平臺上的程序,編譯得到的程序在X86 CPU平臺上是不能運行的,必須放到ARM CPU平臺上才能運行,雖然兩個平臺用的都是Linux系統。相對于交叉編譯,平常做的編譯叫本地編譯,也就是在當前平臺編譯,編譯得到的程序也是在本地執行。用來編譯這種跨平臺程序的編譯器就叫交叉編譯器,相對來說,用來做本地編譯的工具就叫本地編譯器。所以要生成在目標機上運行的程序,必須要用交叉編譯工具鏈來完成。
這里又有一個問題,不就是一個交叉編譯工具嗎?為什么又叫交叉工具鏈呢?原因很簡單,程序不能光編譯一下就可以運行,還得進行匯編和鏈接等過程,同時還需要進行調試,對于一個很大工程,還需要進行工程管理等等,所以,這里 說的交叉編譯工具是一個由編譯器、連接器和解釋器組成的綜合開發環境,交叉編譯工具鏈主要由binutils(主要包括匯編程序as和鏈接程序ld)、gcc(為GNU系統提供C編譯器)和glibc(一些基本的C函數和其他函數的定義) 3個部分組成。有時為了減小libc庫的大小,也可以用別的 c 庫來代替 glibc,例如 uClibc、dietlibc 和 newlib。
那么,如何得到一個交叉工具鏈呢?是從網上下載一個“程序”然后安裝就可以使用了嗎?回答這個問題之前先思考這樣一個問題,我們的交叉工具鏈顧名思義就是在PC機上編譯出能夠在我們目標開發平臺比如ARM上運行的程序,這里就又有一個問題了,我們的ARM處理器型號非常多,難道有專門針對我們某一款的交叉工具鏈嗎?若果有的話,可以想一想,這么多處理器平臺,每個平臺專門定制一個交叉工具鏈放在網絡上,然后供大家去下載,想想可能需要找很久才能找到適合你的編譯器,顯然這種做法不太合理,且浪費資源!因此,要得到一個交叉工具鏈,就像我們移植一個Linux內核一樣,我們只關心我們需要的東西,編譯我們需要的東西在我們的平臺上運行,不需要的東西我們不選擇不編譯,所以,交叉工具鏈的制作方法和系統移植有著很多相似的地方,也就是說,交叉開發工具是一個支持很多平臺的工具集的集合(類似于Linux源碼),然后我們只需從這些工具集中找出跟我們平臺相關的工具就行了,那么如何才能找到跟我們的平臺相關的工具,這就是涉及到一個如何制作交叉工具鏈的問題了。
通常構建交叉工具鏈有如下三種方法:
方法一 :分步編譯和安裝交叉編譯工具鏈所需要的庫和源代碼,最終生成交叉編譯工具鏈。該方法相對比較困難,適合想深入學習構建交叉工具鏈的讀者。如果只是想使用交叉工具鏈,建議使用下列的方法二構建交叉工具鏈。
方法二: 通過Crosstool-ng腳本工具來實現一次編譯,生成交叉編譯工具鏈,該方法相對于方法一要簡單許多,并且出錯的機會也非常少,建議大多數情況下使用該方法構建交叉編譯工具鏈。
方法三 :直接通過網上下載已經制作好的交叉編譯工具鏈。該方法的優點不用多說,當然是簡單省事,但與此同時該方法有一定的弊端就是局限性太大,因為畢竟是別人構建好的,也就是固定的,沒有靈活性,所以構建所用的庫以及編譯器的版本也許并不適合你要編譯的程序,同時也許會在使用時出現許多莫名其妙的錯誤,建議讀者慎用此方法。
crosstool-ng是一個腳本工具,可以制作出適合不同平臺的交叉編譯工具鏈,在進行制作之前要安裝一下軟件:
$ sudo apt-get install g libncurses5-dev bison flex texinfo automake libtool patch gcj cvs cvsd gawk
crosstool腳本工具可以在下載到本地,然后解壓,接下來就是進行安裝配置了,這個配置優點類似內核的配置。
主要的過程有以下幾點:
1. 設定源碼包路徑和交叉編譯器的安裝路徑
2. 修改交叉編譯器針對的構架
3. 增加編譯時的并行進程數,以增加運行效率,加快編譯,因為這個編譯會比較慢。
4. 關閉JAVA編譯器 ,減少編譯時間
5. 編譯
6. 添加環境變量
7. 刷新環境變量。
8. 測試交叉工具鏈
到此,嵌入式Linux系統移植四大部分的第一部分工作全部完成,接下來可以進行后續的開發了。
第二部分:bootloader的選擇和移植
一、Boot Loader 概念
就是在操作系統內核運行之前運行的一段小程序。通過這段小程序,我們可以初始化硬件設備、建立內存空間的映射圖,從而將系統的軟硬件環境帶到一個合適的狀態,以便為最終調用操作系統內核準備好正確的環境,他就是所謂的引導加載程序(Boot Loader)。
【圖1】Flash存儲中存放文件的分布圖
二、為什么系統移植之前要先移植BootLoader?
BootLoader的任務是引導操作系統,所謂引導操作系統,就是啟動內核,讓內核運行就是把內核加載到內存RAM中去運行,那先問兩個問題:第一個問題,是誰把內核搬到內存中去運行?第二個問題:我們說的內存是SDRAM,大家都知道,這種內存和SRAM不同,最大的不同就是SRAM只要系統上電就可以運行,而SDRAM需要軟件進行初始化才能運行,那么在把內核搬運到內存運行之前必須要先初始化內存吧,那么內存是由誰來初始化的呢?其實這兩件事情都是由bootloader來干的,目的是為內核的運行準備好軟硬件環境,沒有bootloadr我們的系統當然不能跑起來。
三、bootloader的分類。
首先更正一個錯誤的說法,很多人說bootloader就是U-boot,這種說法是錯誤的,確切來說是u-boot是bootloader的一種。也就是說bootloader具有很多種類,大概的分類如下圖所示:
下載該資料的人也在下載
下載該資料的人還在閱讀
更多 >
- 基于嵌入式Linux系統的MiniGUI的移植
- [深度理解嵌入式linux系統移植]深度理解嵌入式linux系統移植
- 嵌入式linux系統試題庫,嵌入式linux系統移植試題 - 答案
- 【Linux】嵌入式Linux系統的移植(上篇:交叉編譯器、連接方式)
- 嵌入式Linux系統移植
- 嵌入式工程師分享:學習單片機必備的八大步驟資料下載
- 長文詳解嵌入式Linux系統移植資料下載
- 嵌入式Linux開發教程之嵌入式系統介紹資料免費下載
- 如何吧SQLite移植到嵌入式Linux系統的詳細資料說明 8次下載
- 如何吧tcpdump網絡抓包工具移植到嵌入式linux系統 6次下載
- 嵌入式Linux開發教程之嵌入式Linux應用開發手冊資料免費下載 12次下載
- Linux嵌入式系統ppt學習資料下載 21次下載
- 數字磁盤錄像機的嵌入式Linux實現
- 嵌入式Linux系統的移植研究
- 嵌入式Linux系統開發基礎
- 單片機步入嵌入式Linux之觸摸屏與tslib 1347次閱讀
- 嵌入式系統應用實例的詳細資料介紹 4604次閱讀
- 嵌入式Linux引導以及U-Boot移植深度分析 1941次閱讀
- 基于嵌入式Linux內核的ARM9運行實現方式介紹 1475次閱讀
- 如何在嵌入式Linux中截屏 5907次閱讀
- 基于嵌入式linux系統下的串口編程具體設置詳解 6843次閱讀
- 基于嵌入式Linux系統下Mini GUI的移植方法與過程詳解 3549次閱讀
- 基于嵌入式Linux系統的Bootloader模型在MIPS64上的移植設計淺析 853次閱讀
- 關于嵌入式Linux在PMP消費類電子產品上的應用探討淺析 947次閱讀
- 從RTOS到嵌入式Linux的應用移植步驟以及相關的關鍵技術分析 3186次閱讀
- 關于Linux嵌入式操作系統的優勢特征詳解 5521次閱讀
- 構建eCos嵌入式系統的步驟教程 3823次閱讀
- 如何將Linux2.4移植到ARM平臺的嵌入式系統 3659次閱讀
- 基于STM32的嵌入式測控系統設計與實現 8368次閱讀
- 基于嵌入式Linux的家居監控系統設計 2023次閱讀
下載排行
本周
- 1TC358743XBG評估板參考手冊
- 1.36 MB | 330次下載 | 免費
- 2開關電源基礎知識
- 5.73 MB | 6次下載 | 免費
- 3100W短波放大電路圖
- 0.05 MB | 4次下載 | 3 積分
- 4嵌入式linux-聊天程序設計
- 0.60 MB | 3次下載 | 免費
- 5基于FPGA的光纖通信系統的設計與實現
- 0.61 MB | 2次下載 | 免費
- 6基于FPGA的C8051F單片機開發板設計
- 0.70 MB | 2次下載 | 免費
- 751單片機窗簾控制器仿真程序
- 1.93 MB | 2次下載 | 免費
- 8基于51單片機的RGB調色燈程序仿真
- 0.86 MB | 2次下載 | 免費
本月
- 1OrCAD10.5下載OrCAD10.5中文版軟件
- 0.00 MB | 234315次下載 | 免費
- 2555集成電路應用800例(新編版)
- 0.00 MB | 33564次下載 | 免費
- 3接口電路圖大全
- 未知 | 30323次下載 | 免費
- 4開關電源設計實例指南
- 未知 | 21548次下載 | 免費
- 5電氣工程師手冊免費下載(新編第二版pdf電子書)
- 0.00 MB | 15349次下載 | 免費
- 6數字電路基礎pdf(下載)
- 未知 | 13750次下載 | 免費
- 7電子制作實例集錦 下載
- 未知 | 8113次下載 | 免費
- 8《LED驅動電路設計》 溫德爾著
- 0.00 MB | 6653次下載 | 免費
總榜
- 1matlab軟件下載入口
- 未知 | 935054次下載 | 免費
- 2protel99se軟件下載(可英文版轉中文版)
- 78.1 MB | 537796次下載 | 免費
- 3MATLAB 7.1 下載 (含軟件介紹)
- 未知 | 420026次下載 | 免費
- 4OrCAD10.5下載OrCAD10.5中文版軟件
- 0.00 MB | 234315次下載 | 免費
- 5Altium DXP2002下載入口
- 未知 | 233046次下載 | 免費
- 6電路仿真軟件multisim 10.0免費下載
- 340992 | 191185次下載 | 免費
- 7十天學會AVR單片機與C語言視頻教程 下載
- 158M | 183278次下載 | 免費
- 8proe5.0野火版下載(中文版免費下載)
- 未知 | 138040次下載 | 免費
評論
查看更多