国产毛片a精品毛-国产毛片黄片-国产毛片久久国产-国产毛片久久精品-青娱乐极品在线-青娱乐精品

要認(rèn)識(shí)嵌入式Linux,看這一篇就夠了

發(fā)布時(shí)間:2017-5-19 09:23    發(fā)布者:技術(shù)小白
關(guān)鍵詞: 嵌入式 , Linux系統(tǒng)
要認(rèn)識(shí)嵌入式Linux,看這一篇就夠了

嵌入式Linux跟桌面Linux一樣,是一個(gè)操作系統(tǒng)。從單片機(jī)走過(guò)來(lái)的童鞋往往習(xí)慣于直接控制寄存器,事必躬親,從零開(kāi)始實(shí)現(xiàn)想要的功能。而在嵌入式Linux的世界里,我們首先要拋棄這個(gè)思想,應(yīng)把它作為最后沒(méi)辦法的辦法。

就像我們想要在windows系統(tǒng)中編寫(xiě)一個(gè)程序,首先想到的不是操作CPU芯片的寄存器,而是學(xué)習(xí)Windows API一樣。我們?cè)谇度胧絣inux編程時(shí),首先想到的應(yīng)該是使用現(xiàn)成的驅(qū)動(dòng)或軟件或Linux API。沒(méi)有的話看看能不能修改一下現(xiàn)成的資源為己所用。還是不行的話才考慮自己從頭開(kāi)始寫(xiě)。

嵌入式Linux大廈是由很多層組成的,當(dāng)我們想找一個(gè)人時(shí),首先要明確他在那一層樓。同樣的,我們遇到問(wèn)題時(shí),首先要知道是哪個(gè)方面的問(wèn)題,然后才有可能知道到哪里尋找答案。下面我們把這座大廈進(jìn)行一下拆解。

我們平時(shí)使用Linux系統(tǒng)的話,最常用的工具就是Shell(或者用windows中常見(jiàn)的說(shuō)法:命令行),初學(xué)者接觸Linux的第一個(gè)東西往往也是shell。也許你已經(jīng)知道,把shell命令組合起來(lái)寫(xiě)成一個(gè)文件,亦即shell編程,也是一門(mén)大學(xué)問(wèn),它能做的事很多很強(qiáng)大,但僅限于對(duì)Linux系統(tǒng)的操作。

我們一定不會(huì)用shell命令去編寫(xiě)一個(gè)顯示屏程序,或者一個(gè)GPS導(dǎo)航程序。而且作為嵌入式Linux開(kāi)發(fā)來(lái)說(shuō),shell不可能作為最終產(chǎn)品工作的平臺(tái),因?yàn)槲覀儾荒芤笥脩?hù)在屏幕中輸入代碼來(lái)實(shí)現(xiàn)功能。因此我認(rèn)為對(duì)嵌入式開(kāi)發(fā)來(lái)說(shuō),shell命令無(wú)需深究,掌握基本操作就夠了。

shell基本操作主要包括:獲取命令幫助,到達(dá)指定目錄,查看目錄內(nèi)容,權(quán)限修改,文件的復(fù)制粘貼等基本操作,文件搜索,文件內(nèi)容查看和編輯,系統(tǒng)關(guān)機(jī)重啟……(這些只是最基本的,后面再慢慢學(xué)別的命令,比如學(xué)習(xí)進(jìn)程編程時(shí),再學(xué)習(xí)進(jìn)程相關(guān)的命令;學(xué)習(xí)C語(yǔ)言編程時(shí),再學(xué)各種編譯和調(diào)試命令也不遲)

學(xué)習(xí)嵌入式Linux,我們的最終目的是制作一套嵌入式系統(tǒng)來(lái)實(shí)現(xiàn)功能。往往需要用C/C++或Python等其他語(yǔ)言來(lái)編寫(xiě)程序,但是編程之前我們要先明確一些基本概念。

最基本的,當(dāng)我們編寫(xiě)程序時(shí),首先要明確嵌入式Linux分為用戶(hù)空間和內(nèi)核空間。用戶(hù)空間是應(yīng)用程序運(yùn)行的空間,內(nèi)核空間就是操作系統(tǒng)和驅(qū)動(dòng)程序運(yùn)行的空間。這是從軟件的角度來(lái)說(shuō)的,對(duì)應(yīng)于ARM芯片來(lái)說(shuō),就是芯片的不同“工作模式”。這兩個(gè)空間是通過(guò)“地理隔離”實(shí)現(xiàn)互相完全獨(dú)立的,它們各自的程序使用不同的內(nèi)存地址區(qū)間,各自使用自己的頭文件(有些頭文件在兩個(gè)空間內(nèi)甚至是重名的,要注意區(qū)分)、各自調(diào)用屬于自己空間的函數(shù)(哪怕實(shí)現(xiàn)的功能相同,比如printf()和printk()),而且不能互相直接訪問(wèn)(用指針也不行)。(意味著學(xué)習(xí)這兩部分的編程時(shí)要學(xué)習(xí)兩套獨(dú)立的知識(shí)體系)
內(nèi)核空間相關(guān)的東西有:Linux內(nèi)核源碼、內(nèi)核編譯和配置、內(nèi)核移植、文件系統(tǒng)、Busybox、設(shè)備驅(qū)動(dòng)程序編寫(xiě)、中斷編程……

用戶(hù)空間相關(guān)的東西有:Shell、應(yīng)用程序編譯和調(diào)試、進(jìn)程、線程、文件IO編程、網(wǎng)絡(luò)通信相關(guān)、Qt圖形界面編程……
如果你僅僅要開(kāi)發(fā)應(yīng)用程序,那你就可以遠(yuǎn)離內(nèi)核空間那些東西了。對(duì)你來(lái)說(shuō),驅(qū)動(dòng)程序、底層硬件、操作系統(tǒng)的工作方式等都是透明的,你寫(xiě)的程序在別的芯片上也能跑得很好。

但如果你想要開(kāi)發(fā)驅(qū)動(dòng)程序,或者定制自己的操作系統(tǒng),或者你想向一片“全裸”芯片中寫(xiě)入操作系統(tǒng),并使它正常運(yùn)行起來(lái),那就得學(xué)習(xí)內(nèi)核空間的知識(shí)了。

如果你想讓“全裸”芯片運(yùn)行起來(lái),還會(huì)遇到一塊比內(nèi)核更底層的東西,Bootloader。它是在內(nèi)核啟動(dòng)前運(yùn)行的一段程序,用來(lái)初始化硬件、建立內(nèi)存空間映射等,與芯片的品牌、型號(hào)極其相關(guān)。我們通常對(duì)一些現(xiàn)成的Bootloader進(jìn)行修改來(lái)滿足需求,常見(jiàn)的Bootloader有U-Boot、Vivi等。

再多說(shuō)一句,如果想從零開(kāi)始做一個(gè)嵌入式設(shè)備,還有更底層的問(wèn)題需要解決和學(xué)習(xí):電路設(shè)計(jì)、PCB布線等。

因此,我們看到的嵌入式Linux書(shū)籍就可以粗略分成兩個(gè)方向:一類(lèi)講嵌入式Linux應(yīng)用程序編程,另一類(lèi)講如何搭建一個(gè)完整的嵌入式Linux平臺(tái)。分別對(duì)應(yīng)的就是用戶(hù)空間和內(nèi)核空間的事情。

雖然用戶(hù)空間和內(nèi)核空間是獨(dú)立的,但就像Windows提供了API,允許我們對(duì)系統(tǒng)進(jìn)行操作一樣,用戶(hù)空間的程序也可以通過(guò)系統(tǒng)調(diào)用來(lái)訪問(wèn)內(nèi)核(就是一些的C語(yǔ)言函數(shù))。但由于系統(tǒng)調(diào)用非常基礎(chǔ),所以有時(shí)使用起來(lái)很麻煩。比如說(shuō)一個(gè)簡(jiǎn)單的給變量分配內(nèi)存空間的操作,就需要?jiǎng)佑枚鄠(gè)系統(tǒng)調(diào)用。Linux定義一些庫(kù)函數(shù)(API)來(lái)將系統(tǒng)調(diào)用組合成某些常用的功能,以方便我們編程(同樣是C語(yǔ)言函數(shù))。因此,我們?cè)谧x別人的程序時(shí),就要區(qū)分其中的函數(shù)是系統(tǒng)調(diào)用,還是庫(kù)函數(shù),還是C/C++標(biāo)準(zhǔn)庫(kù)中的函數(shù),還是用戶(hù)自己定義的函數(shù)。如果是前三者,就可以到各個(gè)地方搜索相應(yīng)的資料,這樣學(xué)習(xí)起來(lái)就快很多。

那么shell程序和我們用C/C++編寫(xiě)的程序有什么區(qū)別呢?事實(shí)上,我們?cè)趕hell中寫(xiě)的每一個(gè)命令,都對(duì)應(yīng)了一個(gè)程序,在程序內(nèi)部就是通過(guò)調(diào)用各種API來(lái)實(shí)現(xiàn)相應(yīng)功能的。因此用shell能實(shí)現(xiàn)的功能,理論上都能用C語(yǔ)言實(shí)現(xiàn)。

作為嵌入式Linux開(kāi)發(fā)初學(xué)者,簡(jiǎn)單熟悉了shell以后,就可以開(kāi)始進(jìn)行一些C語(yǔ)言編程的嘗試了。

我們最早接觸編程一般都是在大學(xué)的編程課上,而且往往用的是Visual C++ 6.0。竊以為這是讓我對(duì)編程原理長(zhǎng)期困惑不解的罪魁禍?zhǔn)祝∩妒黔h(huán)境變量?為啥要設(shè)置include路徑,lib路徑?為啥一點(diǎn)編譯按鈕就會(huì)出來(lái)那么多后綴名不同的文件?這些很基礎(chǔ)很重要的問(wèn)題都被VC6.0這個(gè)外殼掩蓋了。但哪怕你在Linux中使用gcc編譯一個(gè)最簡(jiǎn)單程序,一定就會(huì)像我一樣馬上明白把一個(gè).c的源文件變成一個(gè)可執(zhí)行文件,中間究竟發(fā)生了什么事情。如果你再用gdb調(diào)試一個(gè)程序,就會(huì)明白得更多一點(diǎn)。

關(guān)于C/C++編程的基本工具,我們需要學(xué)習(xí)的有:vim等代碼編輯器、diff等文件比較的shell命令、gcc等編譯器、gdb等調(diào)試工具、交叉編譯等。這里需要特別提到一個(gè)重要工具(網(wǎng)站):github,根據(jù)百度的解釋?zhuān)且粋(gè)“分布式的版本控制系統(tǒng)”,初學(xué)者還用不到版本控制,那就可以單純把它當(dāng)成一個(gè)開(kāi)放的源代碼庫(kù)。這個(gè)網(wǎng)站里有大量?jī)?yōu)秀的源代碼供學(xué)習(xí)和使用。

學(xué)習(xí)了基本的編程方法,我們就該接觸Linux的API等內(nèi)容了。畢竟,我們的嵌入式系統(tǒng)要與設(shè)備進(jìn)行交互,只用C/C++標(biāo)準(zhǔn)庫(kù)是不夠的。在此之前,需要建立一個(gè)Linux的重要概念:一切皆文件。甚至硬件設(shè)備對(duì)Linux系統(tǒng)來(lái)說(shuō),也是文件。這樣對(duì)設(shè)備的操作就等同于對(duì)文件進(jìn)行讀、寫(xiě),或讀寫(xiě)以外的操作。這部分內(nèi)容在各種書(shū)籍資料中通常以“文件IO編程”命名,作為一個(gè)章節(jié)來(lái)寫(xiě)。我覺(jué)得這是應(yīng)當(dāng)?shù)谝粋(gè)來(lái)學(xué)的東西,因?yàn)榭吹阶约耗茈S意操控文件和外設(shè)是一件讓人很振奮的事情!成就感是繼續(xù)學(xué)習(xí)的一大動(dòng)力!

另外一個(gè)重要內(nèi)容是,理解進(jìn)程和線程。通過(guò)學(xué)習(xí)這個(gè)部分,能管中窺豹地大致領(lǐng)略到Linux系統(tǒng)如何進(jìn)行調(diào)度,你的程序是怎么在Linux中運(yùn)行的。這是操作系統(tǒng)原理的內(nèi)容,但作為非軟件專(zhuān)業(yè)出身的人,沒(méi)辦法,只能自學(xué)了。

其他應(yīng)用程序編程如網(wǎng)絡(luò)編程、Qt圖形編程等就不一一說(shuō)明了。

驅(qū)動(dòng)程序可能是我們將來(lái)接觸內(nèi)核空間遇到的第一個(gè)內(nèi)容。不過(guò)暫時(shí)還沒(méi)什么特別想說(shuō)的。內(nèi)核空間距離初學(xué)者還是有點(diǎn)遠(yuǎn)的……以后再來(lái)學(xué)這部分內(nèi)容。


免費(fèi)試聽(tīng)C語(yǔ)言、電子、PCB、STM32、Linux、FPGA、JAVA、安卓等。
想學(xué)習(xí)的你和我聯(lián)系預(yù)約就可以免費(fèi)聽(tīng)課了。
宋工企鵝號(hào):三五二四六五九零八八 Tel:173--1795--1908



本文地址:http://m.qingdxww.cn/thread-364108-1-1.html     【打印本頁(yè)】

本站部分文章為轉(zhuǎn)載或網(wǎng)友發(fā)布,目的在于傳遞和分享信息,并不代表本網(wǎng)贊同其觀點(diǎn)和對(duì)其真實(shí)性負(fù)責(zé);文章版權(quán)歸原作者及原出處所有,如涉及作品內(nèi)容、版權(quán)和其它問(wèn)題,我們將根據(jù)著作權(quán)人的要求,第一時(shí)間更正或刪除。
您需要登錄后才可以發(fā)表評(píng)論 登錄 | 立即注冊(cè)

廠商推薦

  • Microchip視頻專(zhuān)區(qū)
  • Dev Tool Bits——使用MPLAB® Discover瀏覽資源
  • Dev Tool Bits——使用條件軟件斷點(diǎn)宏來(lái)節(jié)省時(shí)間和空間
  • Dev Tool Bits——使用DVRT協(xié)議查看項(xiàng)目中的數(shù)據(jù)
  • Dev Tool Bits——使用MPLAB® Data Visualizer進(jìn)行功率監(jiān)視
  • 貿(mào)澤電子(Mouser)專(zhuān)區(qū)

相關(guān)視頻

關(guān)于我們  -  服務(wù)條款  -  使用指南  -  站點(diǎn)地圖  -  友情鏈接  -  聯(lián)系我們
電子工程網(wǎng) © 版權(quán)所有   京ICP備16069177號(hào) | 京公網(wǎng)安備11010502021702
快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 亚洲最新网址 | 在线看免费毛片 | 国产日韩在线视频 | 高颜值露脸极品在线播放 | 四虎精品成人免费永久 | 亚洲天堂成人在线观看 | 色综合视频一区二区观看 | 久久er热这里只有精品免费 | 欧美在线视频导航 | 免费成人高清在线视频 | 国产精品一久久香蕉产线看 | 欧美高清国产在线观看 | 国产欧美在线不卡 | 日韩精品亚洲一级在线观看 | 九九国产 | 国产亚洲一区二区三区在线观看 | 性8成人有声小说在线播放 性88分钟在线播放 性88分钟 | 亚洲欧美日韩高清中文在线 | 欧美日本综合一区二区三区 | 日本在线不卡免 | 在线高清h视频在线观看 | 岛国片免费 | 日本成年人免费看 | 青青草在视线频久久 | 91亚瑟视频 | 狠狠狠色丁香婷婷综合久久88 | 欧美又硬又粗又长又大 | 亚洲精品成人网 | 国产精成人品 | a毛片免费看| 亚洲va在线va天堂成人 | 国产一级毛片国产 | 99久久免费精品视频 | 四虎国产精品永久地址48 | 欧美最爽乱淫视频播放黑人 | 自拍偷拍欧美图片 | 在线毛片网 | 羞羞视频在线观免费观看 | 久久www免费人成精品 | 色男天堂 | 日韩日韩日韩日韩日韩 |