當前位置:首頁 > 嵌入式 > 嵌入式軟件
[導讀]熟練掌握C/C++,熟悉Linux/Windows操作系統,對于OS的軟、硬件資源的分配、任務調度,控制、協調并發(fā)活動有較深的研究。熟悉TCP/IP及無線網絡(Zigbee、Wi-Fi、藍牙、2/3/4G

熟練掌握C/C++,熟悉Linux/Windows操作系統,對于OS的軟、硬件資源的分配、任務調度,控制、協調并發(fā)活動有較深的研究。熟悉TCP/IP及無線網絡(Zigbee、Wi-Fi、藍牙、2/3/4G)協議,熟悉TCP/IP、USB、串口、SPI協議的處理;行業(yè)的需求帶動人才的發(fā)展,越來越多的人選擇嵌入式技術,今天我們來談談嵌入式Linux的入門。

一、系統環(huán)境

1、環(huán)境搭建

開發(fā)嵌入式需要大量輔助軟件,一般來說,我們是在電腦上開發(fā)好程序,然后通過某些方式將程序下載到開發(fā)板上運行。按這個順序列出一些我認為必須的:

Linux系統:主要作為程序開發(fā)的系統,選擇多人使用并資源豐富的版本,建議ubuntu或fedora,目前我使用ubuntu??梢允褂迷谔摂M機或物理機上。

虛擬機:有條件的推薦使用物理機安裝,但一般經常使用vmware這類虛擬機軟件,通過這個軟件安裝ubuntu系統,然后設置共享。然后在這個系統上交叉編譯。

共享方式:有的人喜歡用vmware自帶共享功能,有的人喜歡用samba共享。個人建議在ubuntu中設置samba共享,這樣可以在windows上將ubuntu共享目錄映射成為其中一個盤符,這樣做,就可以在windows下操作linux系統的目錄、文件了,不過前提是需要網絡性能良好。另一種常見的共享方式是nfs,多用于主機和開發(fā)板之間的文件傳輸。

開發(fā)IDE:有的人建議在linux系統中用vim或emacs,但作為初學者入門,不要如此,使用vim、emacs學習成本高,而會打擊積極性。在samba共享情況下,建議使用Notepad++、source insight進行代碼編譯。

交叉編譯:交叉編譯是嵌入式一個很重要的概念。由于我們編譯的程序是在開發(fā)板(開發(fā)板又稱目標板)上運行的,但開發(fā)板又沒有環(huán)境進行編譯,所以帶出“交叉編譯”概念。即在一臺linux主機系統上使用交叉編譯器對代碼進行編譯,但編譯得到的二進制文件無法在該主機運行,只能在開發(fā)板上運行。不同的板子使用的交叉編譯器不同。一般使用商家自帶的交叉編譯器。

下載手段:根據應用場合,可以用jtag燒錄器下載程序(適用如u-boot開發(fā))??梢允褂胻ftp方式下載程序(適用kernel開發(fā))。在開發(fā)板系統啟動后且網絡正常情況下,可以使用tftp下載、nfs拷貝等方式進行調試(適用于應用層程序開發(fā))。

另外對于USB轉串口線、網絡這類的東西,就不一一詳細說明了。

掌握程度:不同人使用的開發(fā)環(huán)境不盡相同。原則上只要是自己熟悉的環(huán)境就可以了,以提高開發(fā)效率為準則。

推薦軟件:vmware、notepad++、source insight、tftpd32(均為windows系統軟件)。

2、系統使用

工欲善其事,必先利其器。系統環(huán)境使用熟悉程度越高,越能提高開發(fā)速度。舉個例了,曾經遇到過別人在設備上調試應用程序,步驟是:編碼、編譯、制作軟件包、用工具升級軟件包到設備上,設備上電看效果。這一系列步驟中,制作包、升級軟件包耗時很長,對于調試十分不利。如果使用NFS,時間能省至少三分之二。所以說,環(huán)境的熟悉是十分重要和必要的。

這里主要針對Linux系統,對于入門者而言,Linux系統的使用是一個大坎。但要知道,嵌入式開發(fā)是離不開linux系統的,是必須學的。目前網絡資料十分廣泛,幾乎遇到的問題都在找到答案,但質量往往良莠不齊,有些甚至會誤導人。因此,建議一邊學一邊做筆記,把自己的疑問、心得、步驟都記錄下來(比如,記錄第1小節(jié)提到的nfs、samba服務安裝的步驟)。

如果時間允許,最好找書本來學習,邊看書邊敲命令。因為書籍介紹比較系統,有利于了解全貌,再逐個知識點深入,做到胸有成竹。下面列一下需要學習的知識點。

1、掌握常用命令。必須要學的命令不多,像查看文件、拷貝文件、創(chuàng)建文件、查找文件、顯示日期、查看/修改IP,等等。這些常用命令只要使用次數多了,就能熟練掌握。具體的自行搜索。

2、掌握軟件安裝步驟。一般linux系統發(fā)行版自帶有安裝工具,如unbutu,在聯網情況下直接輸入命令apt-get install tool-name,就能安裝了。

3、編譯源碼方式安裝軟件。有些工具提供源碼需要自己進行編譯(比如要在開發(fā)板上運行的程序,則無法通過apt-get來安裝,需要交叉編譯)。linux編譯一般有三個步驟:

l 配置:./configure

l 編譯:make

l 安裝:make install。

這個知識點請大家自行百度吧,這里由于篇幅原因就不細說了。

4、了解linux文件系統、目錄結構、設備文件。如根目錄名稱是“/”,配置文件一般位于/etc目錄,運行程序一般位于/bin、/sbin、/usr/bin、/usr/sbin,等等。因為嵌入式涉及到根文件系統概念,因而需要對linux目錄結構有了解。如果感興趣,可以去搜索一下LFS。

5、學習IO重定向、管道概念,學習并會寫簡單shell腳本。

6、學習編輯器vi的簡單使用(因為有些情況下只有這個編輯器可用)、編譯器gcc用法、Makefile知識、gdb調試。(此項針對開發(fā)而言)

學習建議:

1、看書、網絡搜索

2、學會man命令(這是linux內置的幫助命令,比如要了解cp命令的用法,則輸入man cp)

3、記錄筆記

二、應用層

1、C/C++語言

C/C++語言本身與具體平臺相關不大,但必須結合具體環(huán)境平臺才能展現其作用。比如,MFC使用C/C++,QT也使用C/C++,Linux內核中使用C,單片機使用C,等等。環(huán)境不同,其側重點不同。在學校里學習C/C++語法,考完試,卻沒有結合實際項目編程,就有人糾結學了C/C++不懂能做什么。只有真正在某一領域使用了C語言,它才是一個可以看得見、摸得著的東西,而不再是抽象的。

這里結合Linux系統,列舉出一些要掌握、學習的知識點。

1、linux系統編程基本概念:Makefile、gcc、gdb。

2、文件IO操作。

3、進程控制、進程間通信、多線程操作

4、信號處理

5、網絡編程

6、串口編程

另外也列舉C/C++語言的學習點:

1、標準庫

輸入輸出(fprintf、sscanf)、文件操作(fopen、fclose)、字符類操作(isalpha、islower)、字符串操作(strcpy、strcmp、memcpy)、信號處理(signal)、日期時間(mktime、ctime)

[!--empirenews.page--]

2、C++ STL

向量vector、隊列queue、棧stack、列表list。

推薦網站:http://www.cplusplus.com/reference/

下面列出一些我認為較好的書籍。每種類型的書籍應用場合不同,按需求學習。——不僅嵌入式Linux領域,其它很多領域同時需要C,因而要提高C技能。

入門篇:

《Linux C 編程一站式學習》

《Linux C從入門到精通》

《Linux C編程從初學到精通 》

《Linux C編程實戰(zhàn)》

《嵌入式linux應用開發(fā)完全手冊》 (該書對嵌入式Linux開發(fā)整體都有講述,一書以看窺全貌,入門適用)

學習路線:

環(huán)境:安裝虛擬機linux,配置好samba,有windows下用notepad++編寫代碼,然后在命令行使用gcc編譯并運行。像ubuntu安裝必要開發(fā)工具sudo apt-get install build-essential 這類的知識點本文就不涉及了。

實踐:首先了解linux下gcc編譯基本概念,然后逐個知識點學習。以上每點均是一個知識塊,需要手動寫代碼。建議在github上建立倉庫,形成自己的代碼庫,方便日后使用。

2、版本控制

版本控制可以提高開發(fā)效率,目前很多公司使用svn或git進行代碼管理,很多開源項目——包括kernel,都使用git來管理。對于不涉密的代碼,推薦使用github托管,而不便公開的代碼,可以在bitbucket上托管。養(yǎng)成保存代碼的習慣很重要。筆者很多年前沒有代碼托管意識,一次電腦被偷,導致很多代碼消失了,如今想找也想不回來了。

版本控制學習成本不大,無非創(chuàng)建倉庫、提交代碼這些過程,結合日常編碼練習,慢慢熟悉掌握即可。

3、腳本

Linux系統的腳本語言有很多,使用場合也不同,主要目的是提高開發(fā)效率。比如:在shell腳本中完成代碼的編譯并拷貝到nfs共享目錄(或tftp服務目錄)。這樣只需要執(zhí)行腳本就完成多項工作,節(jié)省很多時間。

4、界面開發(fā)

界面開發(fā)不是筆者強項,就寫一寫筆者的經歷。筆者接觸過的界面開發(fā)有QT、SDL、MFC。這些都是作為工具而存在的,不是專門研究,都是工作需要時再去學習,邊學習邊實踐。

比如,做一個視頻采集的軟件,使用了SDL進行顯示。

比如,為了顯示YUV格式的文件,使用MFC編寫一個播放器。

5、其它書籍推薦

內功修煉篇:

《程序員的自我修養(yǎng)——鏈接、裝載與庫》(偏底層的人建議看看)

《高效程序員的45個習慣 敏捷開發(fā)修煉之道》

《高質量程序設計指南》(建議看看,工作中編寫代碼一定要注意編碼規(guī)范,否則維護難度太大)

《Linux開發(fā)工具箱:項目開發(fā)的最有效途徑》(對應英文版本《The Linux Programmer's Toolbox》,網絡有資源)

(注:入門級別書籍不建議購買,通過網絡資源或去圖書館借書等手段來學習就行了。當然經濟條件允許的除外)

三、底層

這里說的底層包括三大方面,這三大方面缺一不可。

bootloader:作為上電運行的第一個程序,負責最原始的初始化操作,初始化芯片、初始化內存、初始化IO復用,讀取內核代碼并將控制權移交到內核,從而完成使命。

kernel:提供基本的運行環(huán)境,提供外設操作控制接口。

rootfs:向用詞(應用層)提供基本操作環(huán)境,包括命令行、程序庫等。

1、bootloader(啟動裝載程序)

嵌入式Linux常見的bootloader是u-boot,而X86領域中一般稱為BIOS。u-boot的學習沒有捷徑,最好是在有ARM開發(fā)板情況下進行研究,通過打印信息的方法跟蹤其流程。但是,看懂u-boot代碼需要電路基本知識、芯片手冊知識等等。這些知識,同樣適用于內核驅動的開發(fā)。

首先要建立的是整體概念和認識。建議先把廠商提供的u-boot源碼編譯通過,并下載到開發(fā)板上看到正常結果后,再用串口打印信息搜索代碼,以了解u-boot的代碼流程。然后再慢慢研究。如果bootloader不是學習重點,在有一定概念前提下就可以跳過到內核驅動層了,不過就筆者經驗來看,bootloader和內核關系十分密切且部分代碼是相通的。

一般初始化的代碼是匯編代碼,對于入門者而言,初學階段不用追究,等有一定基礎后再回頭研究也不晚。

2、kernel(內核)

內核是比較大的一塊,涉及內容十分多。作為入門者,與u-boot類似,首先要建立的整體概念。先把廠商提供的內核源碼編譯通過,并下載到開發(fā)板上,串口會打印很多啟動信息,這些啟動信息能幫助我們學習內核,自己也可以在內核中打印語句,以了解其流程。

每一個平臺芯片不同,外設不同,內核均不同,需要進行移植。所謂的“移植”,就是找到合適的驅動,修改適應到該平臺的過程。比如,某平臺使用2個LCD屏,一個是3.5寸的,另一個是4.3寸的,這需要對內核進行修改。比如,這個平臺使用nand flash是1GB的,另一個平臺使用的是512MB的,也需要修改內核。其它如EEPROM、電源芯片、網卡,等等,均如此。

內核知識點分2部分,一是kernel本身的知識點,如內存管理機制(MMU)、時間管理、同步機制,等等。二是外設驅動,如LED燈、GPIO、按鍵。

初學者建議學習:

1、了解內核編譯的過程:配置內核、編譯uImage。

2、了解platform驅動模型(筆者文章有現成的模板,已經應用于很多個平臺上)。

3、了解一般外設驅動模型。建議從簡單的LED、GPIO入門。

高階知識點:

1、學習各種子系統,如MTD、USB、IIC、SPI、RTC、WDT。

2、學習內核知識,如延時隊列、時間管理,同步機制,等等。

3、rootfs(根文件系統)

一般情況下,開發(fā)板廠商會提供根文件系統,如果沒有,則可以自己編譯制作。一般嵌入式Linux使用busybox制作文件系統必要的程序、庫、配置文件。因為busybox編譯出來的內容體積小,節(jié)省空間,所以很多ARM開發(fā)板上都是用busybox的。另外還涉及到文件系統格式,像Yaffs2、ramfs、ext4、UBI,等等。

掌握程度:

1、知道系統啟動過程涉及到哪些腳本。知道上電啟動時如何添加自己程序啟動。

2、了解各目錄功能、存儲哪些文件(如改IP在哪個配置文件,動態(tài)庫在哪些目錄)。

[!--empirenews.page--]

四、其他知識

1、電路原理圖、datasheet

作為底層開發(fā)人員來說,能看懂硬件原理圖和datasheet是必要的一項技能。

看懂硬件原理圖,就可以知道這個系統上有什么器件,哪些器件有什么功能,如何連接(使用什么協議),提供什么接口。有了這些認知后,才會對系統有一個全局整體的認識掌握。對于開發(fā)人員來說絕對是有利的。

看懂datasheet,才能知道如何訪問器件,如何操作器件,了解其時序。

另外,對于嵌入式經常接觸到的如I2C協議,SPI協議等等的協議也要掌握。

掌握程度:不需要像硬件專業(yè)同學那樣學習數電、模電課程。但起碼掌握上升沿、下降沿的概念,知道高電平、低電平概念,懂得看I2C協議的時序圖。懂得如何找到datasheet中關鍵信息(寄存器說明、時序圖)。

學習路線:碎片時間多的人,建議在遇到不懂知識點時上網搜索學習。有條件的建議借書或買來學習。

五、入門路線

這里以偏重嵌入式Linux(ARM)驅動開發(fā)為例,給出一條入門的路線。

1、買一款使用廣泛、資料多的ARM開發(fā)板。因為使用的人多,你遇到的問題別人可能早就遇到并解決了,這樣能省很多時間,并且提高自信心??梢缘侥硨毶峡纯窗遄?。因為是學習使用,最好便宜又適用的。

2、使用vmware安裝一個ubuntu系統。在vmware軟件中設置物理橋接方式上網。在ubuntu設置好samba服務、nfs服務、tftp服務。

3、首先自己動手親自編譯u-boot、kernel,燒寫到板子上(注:有可能rootfs不提供源碼,而是提供img鏡像文件)。

4、自己修改kernel,并編譯busybox,燒寫到板子,在板子掛載NFS,在虛擬機交叉編譯一個Helloworld程序,并在板子上運行。

5、根據興趣,開始搗鼓:u-boot、kernel、應用層開發(fā)、QT開發(fā)。

5、選擇自己重點關注方面,繼續(xù)研究。

這個路線不一定要嚴格遵守時間軸。

六、補充

以上這些項,因不同人的基礎而異。像硬件專業(yè)的同學,數電、模電和電路圖已經掌握,就要加強C和Linux系統的學習。反之,計算機軟件專業(yè)的同學,就要去學習硬件知識。等等。

對于書籍,有的可能一下子無法理解,那是因為功力不到。有的可能覺得沒有用處,那是因為還沒有涉及此方面。比如,非計算專業(yè)的人看《編譯原理》,《操作系統原理》,《計算機體系結構》,肯定是看不懂的,而且初學者也不必要看。又比如,嵌入式有的領域使用到H264編碼、MPEG編碼,802.11、CDMA,如果不是進入有關行業(yè)的,也不必學習。另外網上很多人寫的嵌入式入門文章提到0.11內核版本、2.4內核版本的書,還有離散數字、算法導論的書,并不是都適用所有人。 所以大家一定要量體裁衣,有多大胃口吃多少飯,有多大頭戴多大帽,根據自己已有的知識和所處的階段進行選擇。

另外要說明的是,很多知識點是密不可分的,且界線是很模糊的。比如應用層和底層。因為有時出現問題,并不知道具體哪里的問題,這就需要站在比較高的層面(系統視野)看問題,才會快速定位并解決問題。建議以某一方面為核心點,另一方面做了解掌握。如果有能力,最好都學。

一般情況下,嵌入式Linux沒有速成。但可以達到入門速成,根據個人能力,我認為大約半個月~2個月即可,不過入門后就要不斷學習和積累了,——這個積累,需要精力、時間的投入。

本站聲明: 本文章由作者或相關機構授權發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點,本站亦不保證或承諾內容真實性等。需要轉載請聯系該專欄作者,如若文章內容侵犯您的權益,請及時聯系本站刪除。
換一批
延伸閱讀

9月2日消息,不造車的華為或將催生出更大的獨角獸公司,隨著阿維塔和賽力斯的入局,華為引望愈發(fā)顯得引人矚目。

關鍵字: 阿維塔 塞力斯 華為

加利福尼亞州圣克拉拉縣2024年8月30日 /美通社/ -- 數字化轉型技術解決方案公司Trianz今天宣布,該公司與Amazon Web Services (AWS)簽訂了...

關鍵字: AWS AN BSP 數字化

倫敦2024年8月29日 /美通社/ -- 英國汽車技術公司SODA.Auto推出其旗艦產品SODA V,這是全球首款涵蓋汽車工程師從創(chuàng)意到認證的所有需求的工具,可用于創(chuàng)建軟件定義汽車。 SODA V工具的開發(fā)耗時1.5...

關鍵字: 汽車 人工智能 智能驅動 BSP

北京2024年8月28日 /美通社/ -- 越來越多用戶希望企業(yè)業(yè)務能7×24不間斷運行,同時企業(yè)卻面臨越來越多業(yè)務中斷的風險,如企業(yè)系統復雜性的增加,頻繁的功能更新和發(fā)布等。如何確保業(yè)務連續(xù)性,提升韌性,成...

關鍵字: 亞馬遜 解密 控制平面 BSP

8月30日消息,據媒體報道,騰訊和網易近期正在縮減他們對日本游戲市場的投資。

關鍵字: 騰訊 編碼器 CPU

8月28日消息,今天上午,2024中國國際大數據產業(yè)博覽會開幕式在貴陽舉行,華為董事、質量流程IT總裁陶景文發(fā)表了演講。

關鍵字: 華為 12nm EDA 半導體

8月28日消息,在2024中國國際大數據產業(yè)博覽會上,華為常務董事、華為云CEO張平安發(fā)表演講稱,數字世界的話語權最終是由生態(tài)的繁榮決定的。

關鍵字: 華為 12nm 手機 衛(wèi)星通信

要點: 有效應對環(huán)境變化,經營業(yè)績穩(wěn)中有升 落實提質增效舉措,毛利潤率延續(xù)升勢 戰(zhàn)略布局成效顯著,戰(zhàn)新業(yè)務引領增長 以科技創(chuàng)新為引領,提升企業(yè)核心競爭力 堅持高質量發(fā)展策略,塑強核心競爭優(yōu)勢...

關鍵字: 通信 BSP 電信運營商 數字經濟

北京2024年8月27日 /美通社/ -- 8月21日,由中央廣播電視總臺與中國電影電視技術學會聯合牽頭組建的NVI技術創(chuàng)新聯盟在BIRTV2024超高清全產業(yè)鏈發(fā)展研討會上宣布正式成立。 活動現場 NVI技術創(chuàng)新聯...

關鍵字: VI 傳輸協議 音頻 BSP

北京2024年8月27日 /美通社/ -- 在8月23日舉辦的2024年長三角生態(tài)綠色一體化發(fā)展示范區(qū)聯合招商會上,軟通動力信息技術(集團)股份有限公司(以下簡稱"軟通動力")與長三角投資(上海)有限...

關鍵字: BSP 信息技術
關閉
關閉