電子發(fā)燒友App

硬聲App

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示
創(chuàng)作
電子發(fā)燒友網(wǎng)>電子資料下載>嵌入式開發(fā)>嵌入式Linux系統(tǒng)移植的四大步驟介紹資料下載

嵌入式Linux系統(tǒng)移植的四大步驟介紹資料下載

2021-04-17 | pdf | 251.69KB | 次下載 | 2積分

資料介紹

嵌入式Linux系統(tǒng)移植主要由四大部分組成: ? ? 搭建交叉開發(fā)環(huán)境; ? ? bootloader的選擇和移植; ? ? kernel的配置、編譯、和移植; ? ? 根文件系統(tǒng)的制作; 第一部分:搭建交叉開發(fā)環(huán)境 先介紹第一分部的內(nèi)容:搭建交叉開發(fā)環(huán)境,首先必須得思考兩個(gè)問題,什么是交叉環(huán)境? 為什么需要搭建交叉環(huán)境? 先回答第一個(gè)問題,在嵌入式開發(fā)中,交叉開發(fā)是很重要的一個(gè)概念,開發(fā)的第一個(gè)環(huán)節(jié)就是搭建環(huán)境,第一步不能完成,后面的步驟從無談起,這里所說的交叉開發(fā)環(huán)境主要指的是:在開發(fā)主機(jī)上(通常是我的pc機(jī))開發(fā)出能夠在目標(biāo)機(jī)(通常是我們的開發(fā)板)上運(yùn)行的程序。嵌入式比較特殊的是不能在目標(biāo)機(jī)上開發(fā)程序(狹義上來說),因?yàn)閷?duì)于一個(gè)原始的開發(fā)板,在沒有任何程序的情況下它根本都跑不起來,為了讓它能夠跑起來,我們還必須要借助pc機(jī)進(jìn)行燒錄程序等相關(guān)工作,開發(fā)板才能跑起來,這里的pc機(jī)就是我們說的開發(fā)主機(jī),想想如果沒有開發(fā)主機(jī),我們的目標(biāo)機(jī)基本上就是無法開發(fā),這也就是電子行業(yè)的一句名言:搞電子,說白了,就是玩電腦! 然后回答第二個(gè)問題,為什么需要交叉開發(fā)環(huán)境?主要原因有以下幾點(diǎn): 原因1:嵌入式系統(tǒng)硬件資源有很多限制,比如cpu主頻相對(duì)較低,內(nèi)存容量較小等,想想讓幾百M(fèi)HZ主頻的MCU去編譯一個(gè)Linux kernel會(huì)讓我們等的不耐煩,相對(duì)來說,pc機(jī)的速度更快,硬件資源更加豐富,因此利用pc機(jī)進(jìn)行開發(fā)會(huì)提高開發(fā)效率。 原因2:嵌入式系統(tǒng)MCU體系結(jié)構(gòu)和指令集不同,因此需要安裝交叉編譯工具進(jìn)行編譯,這樣編譯的目標(biāo)程序才能夠在相應(yīng)的平臺(tái)上比如:ARM、MIPS、POWEPC上正常運(yùn)行。 交叉開發(fā)環(huán)境的硬件組成主要由以下幾大部分: 1.開發(fā)主機(jī) 2.目標(biāo)機(jī)(開發(fā)板) 3.二者的鏈接介質(zhì),常用的主要有3中方式: (1)串口線 (2)USB線 (3)網(wǎng)線 對(duì)應(yīng)的硬件介質(zhì),還必須要有相應(yīng)的軟件“介質(zhì)”支持: 1.對(duì)于串口,通常用的有串口調(diào)試助手,putty工具等,工具很多,功能都差不多,會(huì)用一兩款就可以; 2.對(duì)于USB線,當(dāng)然必須要有USB的驅(qū)動(dòng)才可以,一般芯片公司會(huì)提供,比如對(duì)于三星的芯片,USB下載主要由DNW軟件來完成; 3.對(duì)于網(wǎng)線,則必須要有網(wǎng)絡(luò)協(xié)議支持才可以,常用的服務(wù)主要兩個(gè) ? ? tftp服務(wù):主要用于實(shí)現(xiàn)文件的下載,比如開發(fā)調(diào)試的過程中,主要用tftp把要測(cè)試的bootloader、kernel和文件系統(tǒng)直接下載到內(nèi)存中運(yùn)行,而不需要預(yù)先燒錄到Flash芯片中,一方面,在測(cè)試的過程中,往往需要頻繁的下載,如果每次把這些要測(cè)試的文件都燒錄到Flash中然后再運(yùn)行也可以,但是缺點(diǎn)是:過程比較麻煩,而且Flash的擦寫次數(shù)是由限的;另外一方面:測(cè)試的目的就是把這些目標(biāo)文件加載到內(nèi)存中直接運(yùn)行就可以了,而tftp就剛好能夠?qū)崿F(xiàn)這樣的功能,因此,更沒有必要把這些文件都燒錄到Flash中去 ? ? nfs服務(wù):主要用于實(shí)現(xiàn)網(wǎng)絡(luò)文件的掛載,實(shí)際上是實(shí)現(xiàn)網(wǎng)絡(luò)文件的共享,在開發(fā)的過程中,通常在系統(tǒng)移植的最后一步會(huì)制作文件系統(tǒng),那么這是可以把制作好的文件系統(tǒng)放置在我們開發(fā)主機(jī)PC的相應(yīng)位置,開發(fā)板通過nfs服務(wù)進(jìn)行掛載,從而測(cè)試我們制作的文件系統(tǒng)是否正確,在整個(gè)過程中并不需要把文件系統(tǒng)燒錄到Flash中去,而且掛載是自動(dòng)進(jìn)行掛載的,bootload啟動(dòng)后,kernel運(yùn)行起來后會(huì)根據(jù)我們?cè)O(shè)置的啟動(dòng)參數(shù)進(jìn)行自動(dòng)掛載,因此,對(duì)于開發(fā)測(cè)試來講,這種方式非常的方便,能夠提高開發(fā)效率。 另外,還有一個(gè)名字叫samba的服務(wù)也比較重要,主要用于文件的共享,這里說的共享和nfs的文件共享不是同一個(gè)概念,nfs的共享是實(shí)現(xiàn)網(wǎng)絡(luò)文件的共享,而samba實(shí)現(xiàn)的是開發(fā)主機(jī)上Windows主機(jī)和Linux虛擬機(jī)之間的文件共享,是一種跨平臺(tái)的文件共享,方便的實(shí)現(xiàn)文件的傳輸。 以上這幾種開發(fā)的工具在嵌入式開發(fā)中是必備的工具,對(duì)于嵌入式開發(fā)的效率提高做出了偉大的貢獻(xiàn),因此,要對(duì)這幾個(gè)工具熟練使用,這樣你的開發(fā)效率會(huì)提高很多。等測(cè)試完成以后,就會(huì)把相應(yīng)的目標(biāo)文件燒錄到Flash中去,也就是等發(fā)布產(chǎn)品的時(shí)候才做的事情,因此對(duì)于開發(fā)人員來說,所有的工作永遠(yuǎn)是測(cè)試。 通過前面的工作,我們已經(jīng)準(zhǔn)備好了交叉開發(fā)環(huán)境的硬件部分和一部分軟件,最后還缺少交叉編譯器,讀者可能會(huì)有疑問,為什么要用交叉編譯器?前面已經(jīng)講過,交叉開發(fā)環(huán)境必然會(huì)用到交叉編譯工具,通俗地講就是在一種平臺(tái)上編譯出能運(yùn)行在體系結(jié)構(gòu)不同的另一種平臺(tái)上的程序,開發(fā)主機(jī)PC平臺(tái)(X86 CPU)上編譯出能運(yùn)行在以ARM為內(nèi)核的CPU平臺(tái)上的程序,編譯得到的程序在X86 CPU平臺(tái)上是不能運(yùn)行的,必須放到ARM CPU平臺(tái)上才能運(yùn)行,雖然兩個(gè)平臺(tái)用的都是Linux系統(tǒng)。相對(duì)于交叉編譯,平常做的編譯叫本地編譯,也就是在當(dāng)前平臺(tái)編譯,編譯得到的程序也是在本地執(zhí)行。用來編譯這種跨平臺(tái)程序的編譯器就叫交叉編譯器,相對(duì)來說,用來做本地編譯的工具就叫本地編譯器。所以要生成在目標(biāo)機(jī)上運(yùn)行的程序,必須要用交叉編譯工具鏈來完成。 這里又有一個(gè)問題,不就是一個(gè)交叉編譯工具嗎?為什么又叫交叉工具鏈呢?原因很簡(jiǎn)單,程序不能光編譯一下就可以運(yùn)行,還得進(jìn)行匯編和鏈接等過程,同時(shí)還需要進(jìn)行調(diào)試,對(duì)于一個(gè)很大工程,還需要進(jìn)行工程管理等等,所以,這里 說的交叉編譯工具是一個(gè)由編譯器、連接器和解釋器組成的綜合開發(fā)環(huán)境,交叉編譯工具鏈主要由binutils(主要包括匯編程序as和鏈接程序ld)、gcc(為GNU系統(tǒng)提供C編譯器)和glibc(一些基本的C函數(shù)和其他函數(shù)的定義) 3個(gè)部分組成。有時(shí)為了減小libc庫的大小,也可以用別的 c 庫來代替 glibc,例如 uClibc、dietlibc 和 newlib。 那么,如何得到一個(gè)交叉工具鏈呢?是從網(wǎng)上下載一個(gè)“程序”然后安裝就可以使用了嗎?回答這個(gè)問題之前先思考這樣一個(gè)問題,我們的交叉工具鏈顧名思義就是在PC機(jī)上編譯出能夠在我們目標(biāo)開發(fā)平臺(tái)比如ARM上運(yùn)行的程序,這里就又有一個(gè)問題了,我們的ARM處理器型號(hào)非常多,難道有專門針對(duì)我們某一款的交叉工具鏈嗎?若果有的話,可以想一想,這么多處理器平臺(tái),每個(gè)平臺(tái)專門定制一個(gè)交叉工具鏈放在網(wǎng)絡(luò)上,然后供大家去下載,想想可能需要找很久才能找到適合你的編譯器,顯然這種做法不太合理,且浪費(fèi)資源!因此,要得到一個(gè)交叉工具鏈,就像我們移植一個(gè)Linux內(nèi)核一樣,我們只關(guān)心我們需要的東西,編譯我們需要的東西在我們的平臺(tái)上運(yùn)行,不需要的東西我們不選擇不編譯,所以,交叉工具鏈的制作方法和系統(tǒng)移植有著很多相似的地方,也就是說,交叉開發(fā)工具是一個(gè)支持很多平臺(tái)的工具集的集合(類似于Linux源碼),然后我們只需從這些工具集中找出跟我們平臺(tái)相關(guān)的工具就行了,那么如何才能找到跟我們的平臺(tái)相關(guān)的工具,這就是涉及到一個(gè)如何制作交叉工具鏈的問題了。 通常構(gòu)建交叉工具鏈有如下三種方法: 方法一 :分步編譯和安裝交叉編譯工具鏈所需要的庫和源代碼,最終生成交叉編譯工具鏈。該方法相對(duì)比較困難,適合想深入學(xué)習(xí)構(gòu)建交叉工具鏈的讀者。如果只是想使用交叉工具鏈,建議使用下列的方法二構(gòu)建交叉工具鏈。 方法二: 通過Crosstool-ng腳本工具來實(shí)現(xiàn)一次編譯,生成交叉編譯工具鏈,該方法相對(duì)于方法一要簡(jiǎn)單許多,并且出錯(cuò)的機(jī)會(huì)也非常少,建議大多數(shù)情況下使用該方法構(gòu)建交叉編譯工具鏈。 方法三 :直接通過網(wǎng)上下載已經(jīng)制作好的交叉編譯工具鏈。該方法的優(yōu)點(diǎn)不用多說,當(dāng)然是簡(jiǎn)單省事,但與此同時(shí)該方法有一定的弊端就是局限性太大,因?yàn)楫吘故莿e人構(gòu)建好的,也就是固定的,沒有靈活性,所以構(gòu)建所用的庫以及編譯器的版本也許并不適合你要編譯的程序,同時(shí)也許會(huì)在使用時(shí)出現(xiàn)許多莫名其妙的錯(cuò)誤,建議讀者慎用此方法。 crosstool-ng是一個(gè)腳本工具,可以制作出適合不同平臺(tái)的交叉編譯工具鏈,在進(jìn)行制作之前要安裝一下軟件: $ sudo apt-get install g libncurses5-dev bison flex texinfo automake libtool patch gcj cvs cvsd gawk crosstool腳本工具可以在下載到本地,然后解壓,接下來就是進(jìn)行安裝配置了,這個(gè)配置優(yōu)點(diǎn)類似內(nèi)核的配置。 主要的過程有以下幾點(diǎn): 1. 設(shè)定源碼包路徑和交叉編譯器的安裝路徑 2. 修改交叉編譯器針對(duì)的構(gòu)架 3. 增加編譯時(shí)的并行進(jìn)程數(shù),以增加運(yùn)行效率,加快編譯,因?yàn)檫@個(gè)編譯會(huì)比較慢。 4. 關(guān)閉JAVA編譯器 ,減少編譯時(shí)間 5. 編譯 6. 添加環(huán)境變量 7. 刷新環(huán)境變量。 8. 測(cè)試交叉工具鏈 到此,嵌入式Linux系統(tǒng)移植四大部分的第一部分工作全部完成,接下來可以進(jìn)行后續(xù)的開發(fā)了。 第二部分:bootloader的選擇和移植 一、Boot Loader 概念 就是在操作系統(tǒng)內(nèi)核運(yùn)行之前運(yùn)行的一段小程序。通過這段小程序,我們可以初始化硬件設(shè)備、建立內(nèi)存空間的映射圖,從而將系統(tǒng)的軟硬件環(huán)境帶到一個(gè)合適的狀態(tài),以便為最終調(diào)用操作系統(tǒng)內(nèi)核準(zhǔn)備好正確的環(huán)境,他就是所謂的引導(dǎo)加載程序(Boot Loader)。 【圖1】Flash存儲(chǔ)中存放文件的分布圖 二、為什么系統(tǒng)移植之前要先移植BootLoader? BootLoader的任務(wù)是引導(dǎo)操作系統(tǒng),所謂引導(dǎo)操作系統(tǒng),就是啟動(dòng)內(nèi)核,讓內(nèi)核運(yùn)行就是把內(nèi)核加載到內(nèi)存RAM中去運(yùn)行,那先問兩個(gè)問題:第一個(gè)問題,是誰把內(nèi)核搬到內(nèi)存中去運(yùn)行?第二個(gè)問題:我們說的內(nèi)存是SDRAM,大家都知道,這種內(nèi)存和SRAM不同,最大的不同就是SRAM只要系統(tǒng)上電就可以運(yùn)行,而SDRAM需要軟件進(jìn)行初始化才能運(yùn)行,那么在把內(nèi)核搬運(yùn)到內(nèi)存運(yùn)行之前必須要先初始化內(nèi)存吧,那么內(nèi)存是由誰來初始化的呢?其實(shí)這兩件事情都是由bootloader來干的,目的是為內(nèi)核的運(yùn)行準(zhǔn)備好軟硬件環(huán)境,沒有bootloadr我們的系統(tǒng)當(dāng)然不能跑起來。 三、bootloader的分類。 首先更正一個(gè)錯(cuò)誤的說法,很多人說bootloader就是U-boot,這種說法是錯(cuò)誤的,確切來說是u-boot是bootloader的一種。也就是說bootloader具有很多種類,大概的分類如下圖所示:
下載該資料的人也在下載 下載該資料的人還在閱讀
更多 >

評(píng)論

查看更多

下載排行

本周

  1. 1TC358743XBG評(píng)估板參考手冊(cè)
  2. 1.36 MB  |  330次下載  |  免費(fèi)
  3. 2開關(guān)電源基礎(chǔ)知識(shí)
  4. 5.73 MB  |  6次下載  |  免費(fèi)
  5. 3100W短波放大電路圖
  6. 0.05 MB  |  4次下載  |  3 積分
  7. 4嵌入式linux-聊天程序設(shè)計(jì)
  8. 0.60 MB  |  3次下載  |  免費(fèi)
  9. 5基于FPGA的光纖通信系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)
  10. 0.61 MB  |  2次下載  |  免費(fèi)
  11. 6基于FPGA的C8051F單片機(jī)開發(fā)板設(shè)計(jì)
  12. 0.70 MB  |  2次下載  |  免費(fèi)
  13. 751單片機(jī)窗簾控制器仿真程序
  14. 1.93 MB  |  2次下載  |  免費(fèi)
  15. 8基于51單片機(jī)的RGB調(diào)色燈程序仿真
  16. 0.86 MB  |  2次下載  |  免費(fèi)

本月

  1. 1OrCAD10.5下載OrCAD10.5中文版軟件
  2. 0.00 MB  |  234315次下載  |  免費(fèi)
  3. 2555集成電路應(yīng)用800例(新編版)
  4. 0.00 MB  |  33564次下載  |  免費(fèi)
  5. 3接口電路圖大全
  6. 未知  |  30323次下載  |  免費(fèi)
  7. 4開關(guān)電源設(shè)計(jì)實(shí)例指南
  8. 未知  |  21548次下載  |  免費(fèi)
  9. 5電氣工程師手冊(cè)免費(fèi)下載(新編第二版pdf電子書)
  10. 0.00 MB  |  15349次下載  |  免費(fèi)
  11. 6數(shù)字電路基礎(chǔ)pdf(下載)
  12. 未知  |  13750次下載  |  免費(fèi)
  13. 7電子制作實(shí)例集錦 下載
  14. 未知  |  8113次下載  |  免費(fèi)
  15. 8《LED驅(qū)動(dòng)電路設(shè)計(jì)》 溫德爾著
  16. 0.00 MB  |  6653次下載  |  免費(fèi)

總榜

  1. 1matlab軟件下載入口
  2. 未知  |  935054次下載  |  免費(fèi)
  3. 2protel99se軟件下載(可英文版轉(zhuǎn)中文版)
  4. 78.1 MB  |  537796次下載  |  免費(fèi)
  5. 3MATLAB 7.1 下載 (含軟件介紹)
  6. 未知  |  420026次下載  |  免費(fèi)
  7. 4OrCAD10.5下載OrCAD10.5中文版軟件
  8. 0.00 MB  |  234315次下載  |  免費(fèi)
  9. 5Altium DXP2002下載入口
  10. 未知  |  233046次下載  |  免費(fèi)
  11. 6電路仿真軟件multisim 10.0免費(fèi)下載
  12. 340992  |  191185次下載  |  免費(fèi)
  13. 7十天學(xué)會(huì)AVR單片機(jī)與C語言視頻教程 下載
  14. 158M  |  183278次下載  |  免費(fèi)
  15. 8proe5.0野火版下載(中文版免費(fèi)下載)
  16. 未知  |  138040次下載  |  免費(fèi)