探尋linux系統(tǒng)移植的世界

把linux在arm開發(fā)板上進行定制,并在arm開發(fā)板上運行起來粱甫。
更好地理解linux的構(gòu)架過程。

驅(qū)動開發(fā)是在系統(tǒng)運行起來后冗美,在內(nèi)核中增加一些驅(qū)動子功能而已魔种。


一、概述

1粉洼、arm裸機程序系統(tǒng)結(jié)構(gòu)圖

ARM裸機程序系統(tǒng)結(jié)構(gòu)圖

硬件層:硬件工程師決定硬件放在哪個資源节预。如,是在GPA口属韧,GPH口安拟,還是GPG口。

驅(qū)動層:驅(qū)動工程師根據(jù)硬件的架構(gòu)宵喂,把驅(qū)動的資源用代碼去指向糠赦,比如C語言的指針去指向相應(yīng)的資源;硬件需要什么樣的高/低電平或組合的數(shù)據(jù)锅棕,讓其工作拙泽,是由驅(qū)動層封裝的。

應(yīng)用層:根據(jù)傳遞的不同的值裸燎,來得到不同的結(jié)果顾瞻。

該架構(gòu)存在的問題:
耦合性太強,一旦一層發(fā)生改變德绿, 其他層都會變荷荤。

2、類android等復(fù)雜功能系統(tǒng)結(jié)構(gòu)圖

為了解決上述問題移稳,引入一個概念:OS蕴纳;引入一層:kernel層。

可以讓應(yīng)用層程序員解放出來个粱,不用關(guān)心底層古毛。
同時,也可以進行資源管理都许、多進程多線程管理等稻薇。

類android等復(fù)雜功能系統(tǒng)結(jié)構(gòu)圖

驅(qū)動控制硬件工作。

驅(qū)動與內(nèi)核:驅(qū)動把支持的設(shè)備向內(nèi)核報告梭稚,內(nèi)核根據(jù)傳來的信息颖低,會調(diào)用不同的驅(qū)動程序,來控制相應(yīng)的硬件弧烤。

它們可以認(rèn)為是一個整體忱屑,都屬于底層軟件的范圍。

3暇昂、android系統(tǒng)框架圖

android系統(tǒng)框架圖
hal層的加入莺戒,使得Libraries層和kernel層又隔離開了

通過分層,可以實現(xiàn)軟件復(fù)用性急波、可移植性从铲。而且不同模塊解耦。

不是分層越多越多澄暮,分層越多名段,速度也越慢阱扬。


二、系統(tǒng)移植學(xué)習(xí)內(nèi)容

1伸辟、交叉編譯環(huán)境

搭建交叉開發(fā)環(huán)境

2麻惶、bootloader功能子系統(tǒng)

bootloader的選擇和移植

系統(tǒng)一上電會運行一個程序:bootloader(啟動加載),目的是load kernel信夫。

可以做很多種方案的選擇窃蹋。
很多大型項目中,更多是選擇適合項目的啟動加載代碼静稻,然后再改改(移植)警没。
很多時候,買芯片的時候振湾,芯片廠商就已經(jīng)提供好了杀迹。

3、內(nèi)核核心子系統(tǒng)

kernel的配置恰梢、編譯佛南、移植和調(diào)試

4、文件系統(tǒng)子系統(tǒng)

根文件系統(tǒng)的制作

給用戶用嵌言,還得提供文件系統(tǒng)嗅回。

這4個就是整個系統(tǒng)移植的精髓。


三摧茴、學(xué)習(xí)思路和方法

先整體后局部绵载,層層推進。

每個子系統(tǒng)是如何編譯的 ---> 在基本功能下苛白,如何添加命令或功能 ---> 如何自定義自己的開發(fā)板娃豹,與自己的開發(fā)板具體硬件相聯(lián)系

每個子系統(tǒng)都具有一個復(fù)雜的層次關(guān)系。
所以要先掌握整體购裙,需要首先掌握相關(guān)子系統(tǒng)的藏寶圖懂版,有了這個地圖,去探索它就有了方向躏率。


四躯畴、系統(tǒng)移植的基本步驟

拿到一塊板子,如何讓整個系統(tǒng)跑起來呢薇芝?

1蓬抄、確定目標(biāo)機(開發(fā)板,客戶端)和主機(PC夯到,開發(fā)機器嚷缭,服務(wù)端)的連接方式

主機性能會比目標(biāo)機好太多,因此一般在主機開發(fā),把主機編譯好的內(nèi)容數(shù)據(jù)傳輸給目標(biāo)機阅爽。

數(shù)據(jù)就是高低電平路幸。

傳輸方式:

(1)UART異步串行通信接口 (串口)
它是非常經(jīng)典的與PC機通信的接口。

優(yōu)點:

  • 功能很強大优床,既可以輸入劝赔,也可以輸出誓焦,比較萬能胆敞。
  • 實用性強(90%的板子都支持)

缺點:速度比較低,效率比較差杂伟。
大文件一般不用串口傳輸移层,小文件可以。

(2)USB串行通信接口
現(xiàn)在已經(jīng)發(fā)展到USB 3.0

優(yōu)點:速度快
缺點:USB的驅(qū)動要移植修改赫粥。
板子剛剛上電观话,就讓串口工作,是不現(xiàn)實的越平。

(3)TCP/IP網(wǎng)絡(luò)通信接口
優(yōu)點:速度快(10/100Mbps)
缺點:驅(qū)動需要移植

TCP/IP已經(jīng)很成熟了频蛔。開發(fā)板與PC可以以C/S模式進行數(shù)據(jù)的傳輸和下載。比較通用秦叛。而且網(wǎng)卡的速率也比較快晦溪,最少10M,100M網(wǎng)卡也很多挣跋。

通過網(wǎng)絡(luò)接口去下載數(shù)據(jù)的情況很多三圆。

(4)Debug Jtag調(diào)試接口
方便快捷,但價格很高避咆,很少使用舟肉。

2、安裝交叉編譯器

PC的cpu架構(gòu)是X86查库,X86程序和arm程序不兼容路媚,因此需要交叉編譯器。

2種方法:

(1)安裝芯片廠商已經(jīng)編譯好的工具鏈

一般有如下前綴名:

arm-none-linux-gnueabi-
簡稱:arm-linux-
(把arm-linux-軟鏈接為上述前綴名)

arm-none-eabi-
這個不支持操作系統(tǒng)樊销。

arm-elf-
這個非常老了整慎。很少見到了。

第一列:目標(biāo)體系結(jié)構(gòu)
gcc:默認(rèn)編譯x86
有arm现柠,就會編譯arm

第二列:廠商名院领。開源的話,一般是none

第三列:該編譯器默認(rèn)編譯出來的功能是針對linux操作系統(tǒng)去用的够吩。
這個編譯器內(nèi)部有些標(biāo)準(zhǔn)C庫比然,是與linux系統(tǒng)相關(guān)的。
在windows下運行不了周循。

第四列:
gnu:開源
eabi:嵌入式的標(biāo)準(zhǔn)調(diào)用接口强法。針對嵌入式精簡的相關(guān)庫万俗。

(2)自己動手編譯交叉工具鏈
《The GNU Toolchain for ARM Target HOWTO》這本書會介紹。

自動動手編譯非常耗時饮怯,而且會報很多不兼容的問題闰歪。調(diào)試需要功力,對編譯原理要理解的很清楚蓖墅。很多公司都不會去做库倘。不建議使用該方法。

思路其實比較單一论矾,唯一的不好是版本間的依賴關(guān)系比較大教翩。

3、搭建主機-目標(biāo)機數(shù)據(jù)傳輸通道

比如用網(wǎng)絡(luò)贪壳,則需要網(wǎng)絡(luò)相關(guān)服務(wù)器的配置饱亿。

一般嵌入式中,用的比較多的服務(wù):

  • TFTP :基于UDP協(xié)議傳輸?shù)娜蜓ィ荈TP的簡版彪笼。UDP比FTP簡單。
  • NFS:網(wǎng)絡(luò)文件系統(tǒng)蚂且。目的是linux與linux之間掛載用的配猫。
    文件系統(tǒng)的調(diào)試,很多時候用NFS作為調(diào)試的工具膘掰。

4章姓、編譯三大子系統(tǒng):

bootloader功能子系統(tǒng)
內(nèi)核核心子系統(tǒng)
文件系統(tǒng)子系統(tǒng)

該步驟難度最大。

5识埋、燒寫測試

整個進行集成凡伊,然后放到工廠進行集成化生產(chǎn)就可以了。


五窒舟、環(huán)境搭建需求分析

需求分析:
主機中的數(shù)據(jù) 如何傳遞 到開發(fā)板系忙?

目的1:普通數(shù)據(jù)的傳遞:比如,uboot惠豺,kernel银还。
主要目的就是為了傳遞。
UART很少使用洁墙,更多使用的是網(wǎng)絡(luò)接口蛹疯。最主要的使用方式是TFTP服務(wù)。

TFTP主要傳輸?shù)氖莐ernel的文件热监。
uboot會通過其他方式燒寫(當(dāng)然網(wǎng)絡(luò)接口也可以傳輸捺弦。看開發(fā)環(huán)境來決定。)

目的2:調(diào)試:主機的一塊內(nèi)存空間列吼,直接掛載在板子上幽崩。

在x86上調(diào)好,再放到板子上寞钥。
但是慌申,有可能調(diào)試不是很順利,因此需要開發(fā)板與PC間建立更合理理郑、方便的解決方案蹄溉。

不能在板子上直接調(diào)試,就是因為板子容量太小香浩。
要想辦法擴大板子空間类缤,但是flash太貴。

板子可以外掛很大空間的存儲器邻吭,比如U盤。
但是U盤很麻煩宴霸,插開發(fā)板上囱晴,完了還得拔下來插PC上。

思路:調(diào)試時瓢谢,不一定非要進行網(wǎng)絡(luò)傳輸畸写。只需要把數(shù)據(jù)掛到板子上就可以了。

辦法:通過網(wǎng)線把共享的數(shù)據(jù)塊(當(dāng)作USB)氓扛,通過TCP/IP來傳枯芬。
共享的數(shù)據(jù)庫就在PC上。

調(diào)試起來更加方便采郎,PC上的修改板子上就可以直接看到了千所,不需要進行更多的數(shù)據(jù)傳輸了。

調(diào)試內(nèi)核驅(qū)動蒜埋、應(yīng)用程序淫痰,很多時候是借助這種方式,在PC上進行軟件開發(fā)整份,然后直接在板子上進行驗證待错。


六、筆記本移植環(huán)境搭建

串口:連接方式方便烈评,驅(qū)動簡單火俄。
少數(shù)據(jù)量的東西,會用串口讲冠。
標(biāo)準(zhǔn)輸入/輸出瓜客,會定位到串口驅(qū)動上。

筆記本都是USB接口,而開發(fā)板要用串口忆家,因此要買USB轉(zhuǎn)串口犹菇。

如何排查目標(biāo)機與主機的各層是否通了?

  • 應(yīng)用層:調(diào)試程序
  • 傳輸層:主要是端口port沒有開放芽卿。要不就是服務(wù)器開放端口不對或未開放端口揭芍,或者客戶端訪問的端口不對。
  • 網(wǎng)絡(luò)層:通過ping看看在不在一個局域網(wǎng)段卸例。
  • 物理層:查看插上的網(wǎng)卡燈有沒有亮称杨。
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市筷转,隨后出現(xiàn)的幾起案子姑原,更是在濱河造成了極大的恐慌,老刑警劉巖呜舒,帶你破解...
    沈念sama閱讀 222,681評論 6 517
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件锭汛,死亡現(xiàn)場離奇詭異,居然都是意外死亡袭蝗,警方通過查閱死者的電腦和手機唤殴,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,205評論 3 399
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來到腥,“玉大人朵逝,你說我怎么就攤上這事∠绶叮” “怎么了配名?”我有些...
    開封第一講書人閱讀 169,421評論 0 362
  • 文/不壞的土叔 我叫張陵,是天一觀的道長晋辆。 經(jīng)常有香客問我渠脉,道長,這世上最難降的妖魔是什么栈拖? 我笑而不...
    開封第一講書人閱讀 60,114評論 1 300
  • 正文 為了忘掉前任连舍,我火速辦了婚禮,結(jié)果婚禮上涩哟,老公的妹妹穿的比我還像新娘索赏。我一直安慰自己,他們只是感情好贴彼,可當(dāng)我...
    茶點故事閱讀 69,116評論 6 398
  • 文/花漫 我一把揭開白布潜腻。 她就那樣靜靜地躺著,像睡著了一般器仗。 火紅的嫁衣襯著肌膚如雪融涣。 梳的紋絲不亂的頭發(fā)上童番,一...
    開封第一講書人閱讀 52,713評論 1 312
  • 那天,我揣著相機與錄音威鹿,去河邊找鬼剃斧。 笑死,一個胖子當(dāng)著我的面吹牛忽你,可吹牛的內(nèi)容都是我干的幼东。 我是一名探鬼主播,決...
    沈念sama閱讀 41,170評論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼科雳,長吁一口氣:“原來是場噩夢啊……” “哼根蟹!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起糟秘,我...
    開封第一講書人閱讀 40,116評論 0 277
  • 序言:老撾萬榮一對情侶失蹤简逮,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后尿赚,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體散庶,經(jīng)...
    沈念sama閱讀 46,651評論 1 320
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,714評論 3 342
  • 正文 我和宋清朗相戀三年吼畏,在試婚紗的時候發(fā)現(xiàn)自己被綠了督赤。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,865評論 1 353
  • 序言:一個原本活蹦亂跳的男人離奇死亡泻蚊,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出丑婿,到底是詐尸還是另有隱情性雄,我是刑警寧澤,帶...
    沈念sama閱讀 36,527評論 5 351
  • 正文 年R本政府宣布羹奉,位于F島的核電站秒旋,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏诀拭。R本人自食惡果不足惜迁筛,卻給世界環(huán)境...
    茶點故事閱讀 42,211評論 3 336
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望耕挨。 院中可真熱鬧细卧,春花似錦、人聲如沸筒占。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,699評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽翰苫。三九已至止邮,卻和暖如春这橙,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背导披。 一陣腳步聲響...
    開封第一講書人閱讀 33,814評論 1 274
  • 我被黑心中介騙來泰國打工屈扎, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人撩匕。 一個月前我還...
    沈念sama閱讀 49,299評論 3 379
  • 正文 我出身青樓鹰晨,卻偏偏與公主長得像,于是被迫代替她去往敵國和親滑沧。 傳聞我的和親對象是個殘疾皇子并村,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,870評論 2 361

推薦閱讀更多精彩內(nèi)容