嵌入式Linux+Android學(xué)習(xí)路線圖
嵌入式Linux的特點(diǎn)是版權(quán)費(fèi)免費(fèi),購(gòu)買費(fèi)用媒介成本技術(shù)支持全世界的自由軟件開發(fā)者提供支持網(wǎng)絡(luò)特性免費(fèi),而且性能優(yōu)異,軟件移植容易,代碼開放,有許多應(yīng)用軟件支持等。下面是小編整理的嵌入式Linux+Android學(xué)習(xí)路線圖,希望大家喜歡!
1. 程序員的三大方向
程序員的方向,一般可以分為3類:專業(yè)領(lǐng)域、業(yè)務(wù)領(lǐng)域、操作系統(tǒng)領(lǐng)域。你了解它們后,按興趣選擇吧。
對(duì)于專業(yè)領(lǐng)域,我提供不了建議。
業(yè)務(wù),也就是應(yīng)用程序,它跟操作系統(tǒng)并不是截然分開的:
、匍_發(fā)實(shí)體產(chǎn)品時(shí),應(yīng)用程序?qū)懙煤玫娜,有時(shí)候需要操作系統(tǒng)的知識(shí),比如調(diào)度優(yōu)先級(jí)的設(shè)置、知道某些函數(shù)可能會(huì)令進(jìn)程休眠。
、趯憫(yīng)用程序的人進(jìn)階為系統(tǒng)工程師時(shí),他需要從上到下都了解,這時(shí)候就需要有操作系統(tǒng)領(lǐng)域的知識(shí)了,否則,你怎么設(shè)計(jì)整個(gè)系統(tǒng)的方案呢?
、圩鰬(yīng)用程序的人,需要了解行業(yè)的需求,理解業(yè)務(wù)的邏輯。所以,當(dāng)領(lǐng)導(dǎo)的人,多是做應(yīng)用的。一旦鉆入了某個(gè)行業(yè),很難換行業(yè)。
④而操作系統(tǒng)領(lǐng)域,做好了這是通殺各行業(yè):他只負(fù)責(zé)底層系統(tǒng),在上面開發(fā)什么業(yè)務(wù)跟他沒(méi)關(guān)系。這行很多是技術(shù)宅,行業(yè)專家。
、莶僮飨到y(tǒng)和業(yè)務(wù)之間并沒(méi)有一個(gè)界線。有操作系統(tǒng)經(jīng)驗(yàn),再去做應(yīng)用,你會(huì)對(duì)系統(tǒng)知根知底,碰到問(wèn)題時(shí)都有解決思路。有了業(yè)務(wù)經(jīng)驗(yàn),你再了解一下操作系統(tǒng),很快就可以組成一個(gè)團(tuán)隊(duì)自立門戶,至少做個(gè)CTO沒(méi)問(wèn)題。
1.1 專業(yè)領(lǐng)域
它又可以分為下面2類。
1.1.1 學(xué)術(shù)研究
比如語(yǔ)音、圖像處理、人工智能,這類工作需要你有比較強(qiáng)的理論知識(shí),我傾向于認(rèn)為這類人是“科學(xué)家”,他們鉆研多年,很多時(shí)候是在做學(xué)術(shù)研究。
在嵌入式領(lǐng)域,需要把他們的成果用某種算法表達(dá)出來(lái),針對(duì)某種芯片進(jìn)行優(yōu)化,這部分工作也許有專人來(lái)做。
1.1.2 工程實(shí)現(xiàn)
也有這樣一類人,他們懂得這些專業(yè)領(lǐng)域的概念,但是沒(méi)有深入鉆研?梢允褂酶黝愰_源資料實(shí)現(xiàn)某個(gè)目標(biāo),做出產(chǎn)品。比如圖像處理,他懂得用opencv里幾百個(gè)復(fù)雜函數(shù)來(lái)實(shí)現(xiàn)頭像識(shí)別。有時(shí)候還可以根據(jù)具體芯片來(lái)優(yōu)化這些函數(shù)。
“專業(yè)領(lǐng)域”不是我的菜,如果你要做這一塊,我想最好的入門方法是在學(xué)校學(xué)習(xí)研究生、博士課程。
1.2 業(yè)務(wù)領(lǐng)域
換句話說(shuō),就是應(yīng)用程序,這又可以分為下面2類。
1.2.1 界面顯示
做產(chǎn)品當(dāng)然需要好的界面,但是,不是說(shuō)它不重要,是沒(méi)什么發(fā)展后勁。
現(xiàn)在的熱門詞是Android APP和IOS APP開發(fā)。你不要被Android、IOS兩個(gè)詞騙了,它們跟以前的VC、VB是同一路貨色,只是、僅僅是一套GUI控件的實(shí)現(xiàn)。
希望沒(méi)有冒犯到你,我有理由。
一個(gè)程序需要有GUI界面,但是程序的內(nèi)在邏輯才是核心。Android、IOS的開發(fā)工具給我們簡(jiǎn)化了GUI的開發(fā),并提供了這些控件的交互機(jī)制,封裝并提供了一些服務(wù)(比如網(wǎng)絡(luò)傳輸)。
但是程序內(nèi)部的業(yè)務(wù)邏輯、對(duì)視頻圖像聲音的處理等等,這才是核心。
另外別忘了服務(wù)器那邊的后臺(tái)程序:怎樣更安全地保存數(shù)據(jù)、保護(hù)客戶的隱私,怎樣處理成千上萬(wàn)上百萬(wàn)的并發(fā)訪問(wèn),等等,這也是核心。
但是,從Android、IOS APP入門入行,這很快!如果你是大四,急于找到一份工作,那么花上1、2個(gè)月去學(xué)習(xí)Android或IOS,應(yīng)該容易找到工作,畢竟APP的需求永遠(yuǎn)是最大的,現(xiàn)在這兩門技術(shù)還算熱門。
在2011、2012年左右,Android程序員的起薪挺高,然后開始下滑。Android APP的入門基本只要1個(gè)月,所以懂的人也越來(lái)越多。
2013、2014年,IOS開發(fā)的工資明顯比Android高了,于是各類IOS培訓(xùn)也火曝起來(lái)。中華大地向來(lái)不缺速成人才,估計(jì)再過(guò)一陣子IOS工程師也是白菜價(jià)了。
會(huì)Android、IOS只是基本要求,不信去51job搜搜Android或IOS,職位要求里肯定其他要求。
1.2.2 業(yè)務(wù)邏輯
舉個(gè)簡(jiǎn)單例子,做一個(gè)打卡軟件,你需要考慮這些東西:
、僬A鞒淌巧习嘞掳鄷r(shí)都要打卡
②有人忘記了怎么辦?作為異常記錄在案,推送給管理員
、壅(qǐng)假時(shí)怎么處理?
④加班怎么處理?
對(duì)于更復(fù)雜的例子,視頻會(huì)議系統(tǒng)里,各個(gè)模塊怎么對(duì)接,各類協(xié)議怎么兼容,你不深入這個(gè)行業(yè),你根本搞不清楚。
應(yīng)用開發(fā)的職位永遠(yuǎn)是最多的,入門門檻也低;旧现灰銜(huì)C語(yǔ)言,面試時(shí)表現(xiàn)比較得體,一般公司都會(huì)給你機(jī)會(huì)。因?yàn)椋?/p>
、倌氵M(jìn)公司后,還需要重新培訓(xùn)你:熟悉它們的業(yè)務(wù)邏輯。
、谀阋龅模疽簿褪且粋(gè)個(gè)模塊,框架都有人給你定好了,你去填代碼就可以了。
說(shuō)點(diǎn)讓你高興的事:軟件公司里,做領(lǐng)導(dǎo)的基本都是寫應(yīng)用程序的(當(dāng)然還有做市場(chǎng)的)。寫應(yīng)用程序的人,對(duì)外可以研究市場(chǎng)接待客戶,對(duì)內(nèi)可以管理程序員完成開發(fā),不讓他做領(lǐng)導(dǎo)讓誰(shuí)做?
如果你的志向是寫應(yīng)用程序,那么我建議你先練好基本功:數(shù)據(jù)結(jié)構(gòu)、算法是必備,然后憑興趣選擇數(shù)據(jù)庫(kù)、網(wǎng)絡(luò)編程等等進(jìn)行深入鉆研。
最后,選擇你看好的、感興趣的行業(yè)深耕個(gè)10年吧。做應(yīng)用開發(fā)的人選擇了某個(gè)行業(yè),后面是很難換行業(yè)的,選行很重要!
1.3 操作系統(tǒng)領(lǐng)域
UCOS太簡(jiǎn)單,VxWorks太貴太專業(yè),Windows不玩嵌入式了,IOS不開源,所以對(duì)于操作系統(tǒng)領(lǐng)域我們也只能玩Linux了。
在嵌入式領(lǐng)域Linux一家獨(dú)大!
Android呢?Android跟QT一樣,都是一套GUI系統(tǒng)。只是Google的實(shí)力太強(qiáng)了,現(xiàn)在Android無(wú)處不在,所以很多時(shí)候Linux+Android成了標(biāo)配。注意,在這里我們關(guān)心的是Android的整個(gè)系統(tǒng)、里面的機(jī)制,而不是學(xué)習(xí)幾個(gè)API然后開發(fā)界面程序。
操作系統(tǒng)領(lǐng)域所包含的內(nèi)容,簡(jiǎn)單地說(shuō),就是制作出一臺(tái)裝好系統(tǒng)的專用“電腦”,可以分為:
、贋楫a(chǎn)品規(guī)劃硬件:
按需求、性能、成本選擇主芯片,搭配周邊外設(shè),交由硬件開發(fā)人員設(shè)計(jì)。
②給單板制作、安裝操作系統(tǒng)、編寫驅(qū)動(dòng)
③定制維護(hù)、升級(jí)等系統(tǒng)方案
、苓可能要配置、安裝Android等GUI系統(tǒng):
、轂閼(yīng)用開發(fā)人員配置開發(fā)環(huán)境
⑥從系統(tǒng)角度解決疑難問(wèn)題
這個(gè)領(lǐng)域,通常被稱為“底層系統(tǒng)”或是“驅(qū)動(dòng)開發(fā)”。
先解決2個(gè)常見(jiàn)誤區(qū):
①這份工作是寫驅(qū)動(dòng)程序嗎?
看看上面羅列的6點(diǎn),應(yīng)該說(shuō),它包含驅(qū)動(dòng)開發(fā),但遠(yuǎn)遠(yuǎn)不只有驅(qū)動(dòng)開發(fā)。
、谖覀冞需要寫驅(qū)動(dòng)嗎?不是有原廠嗎?或者只需要改改就可以?
經(jīng)常有人說(shuō),芯片原廠都做好驅(qū)動(dòng)了,拿過(guò)來(lái)改改就可以了。如果,你的硬件跟原廠的公板完全一樣,原廠源碼毫無(wú)BUG,不想優(yōu)化性能、削減成本,不想做一些有特色的產(chǎn)品,那這話是正確的。
但是在這個(gè)不創(chuàng)新就是找死的年代,可能嗎?!原因有二:
、偌词怪皇切薷拇a,能修改的前提是能理解;能理解的最好煅煉方法是從零寫出若干驅(qū)動(dòng)程序
、诤芏鄷r(shí)候,需要你深度定制系統(tǒng)。
以前做聯(lián)發(fā)科手機(jī)只需要改改界面就可以出貨了,現(xiàn)在山寨廠一批批倒下。大家都使用原廠的方案而不加修改時(shí),最后只能拼成本。
舉個(gè)例子,深圳有2家做交通攝像頭、監(jiān)控?cái)z像頭的廠家,他們?cè)?jīng)找我做過(guò)4個(gè)項(xiàng)目:
、俑倪M(jìn)廠家給的SD卡驅(qū)動(dòng)性能,使用DMA。
、趽Q了Flash型號(hào)后,系統(tǒng)經(jīng)常出問(wèn)題,需要修改驅(qū)動(dòng)BUG。
、塾|摸屏點(diǎn)擊不準(zhǔn),找原因,后來(lái)發(fā)現(xiàn)是旁路電容導(dǎo)致的。
、懿脺p成本,把4片DDR換為2片DDR,需要改bootloader對(duì)DDR的初始化。
這些項(xiàng)目都很急,搞不定就無(wú)法出貨,這時(shí)候找原廠?除非你是中興華為等大客戶,否則誰(shuí)理你?
我在中興公司上班時(shí),寫驅(qū)動(dòng)的時(shí)間其實(shí)是很少的,大部分時(shí)間是調(diào)試:系統(tǒng)調(diào)優(yōu),上幫APP工程師、下幫硬件工程師查找問(wèn)題。
我們從廠家、網(wǎng)上得到的源碼,很多都是標(biāo)準(zhǔn)的,當(dāng)然可以直接用。但是在你的產(chǎn)品上也許優(yōu)化一下更好。比如我們可以把攝像頭驅(qū)動(dòng)和DMA驅(qū)動(dòng)揉合起來(lái),讓攝像頭的數(shù)據(jù)直接通過(guò)DMA發(fā)到DSP去。
我們可以在軟件和硬件之間起橋梁作用,對(duì)于實(shí)體產(chǎn)品,有可能是軟件出問(wèn)題也可能是硬件出問(wèn)題,一般是底層系統(tǒng)工程師比較容易找出問(wèn)題。
當(dāng)硬件、軟件應(yīng)用出現(xiàn)問(wèn)題,他們解決不了時(shí),從底層軟件角度給他們出主意,給他們提供工具。
再比如方案選擇:芯片性能能否達(dá)標(biāo)、可用的BSP是否完善等等,這只能由負(fù)責(zé)整個(gè)方案的人來(lái)考慮,他必須懂底層。
在操作系統(tǒng)領(lǐng)域,對(duì)知識(shí)的要求很多:
、俣布R(shí)才能看懂電路圖
②英文好會(huì)看芯片手冊(cè)
、塾芯帉憽⒁浦豺(qū)動(dòng)程序的能力
、軐(duì)操作系統(tǒng)本身有一定的理解,才能解決各類疑難問(wèn)題
、堇斫釧ndroid內(nèi)部機(jī)制
⑥懂匯編、C語(yǔ)言、C++、JAVA
它絕對(duì)是一個(gè)大坑,沒(méi)有興趣、沒(méi)有毅力的人慎選。
、龠@行的入門,絕對(duì)需要半年以上,即使全天學(xué)習(xí)也要半年。
、谒穆毼,絕對(duì)比APP的職位少
③并且你沒(méi)有1、2年經(jīng)驗(yàn),招你到公司后一開始你做的還是APP。
優(yōu)點(diǎn)就是:
、賹W(xué)好后,行業(yè)通殺,想換行就換行;想自己做產(chǎn)品就自己做產(chǎn)品。
②相比做應(yīng)用程序的人,不會(huì)被經(jīng)常變動(dòng)的需求搞得天天加班。
、坶T檻高,當(dāng)然薪水相對(duì)就高。
操作系統(tǒng)領(lǐng)域,我認(rèn)為適合于這些人:
、儆布こ處熛朕D(zhuǎn)軟件工程師,從底層軟件入門會(huì)比較好
②單片機(jī)工程師,想升級(jí)一下。會(huì)Linux底層的人肯定會(huì)單片機(jī),會(huì)單片機(jī)的人不一定會(huì)Linux。
③時(shí)間充足的`學(xué)生:如果你正讀大二大三,那么花上半年學(xué)習(xí)嵌入式Linux底層多有益處。
、芟胝莆照麄(gè)系統(tǒng)的人,比如你正在公司里寫APP,但是想升為系統(tǒng)工程師,那么底層不得不學(xué)。
、菹胱约簞(chuàng)業(yè)做實(shí)體產(chǎn)品的工程師,你有錢的話什么技術(shù)都不用學(xué),但是如果沒(méi)錢又想做產(chǎn)品,那么Linux底層不得不學(xué)。
⑥做Linux APP的人,沒(méi)錯(cuò),他們也要學(xué)習(xí)。
這部分人不需要深入,了解個(gè)大概就可以:bootloader是用來(lái)啟動(dòng)內(nèi)核,Linux的文件系統(tǒng)(第1個(gè)程序是什么、做什么、各目錄干嘛用)、APP跟驅(qū)動(dòng)程序的調(diào)用關(guān)系、工具鏈,有這些概念就可以了
本文中,就把操作系統(tǒng)默認(rèn)為L(zhǎng)inux,講講怎么學(xué)習(xí)嵌入式Linux+Android系統(tǒng)。
1.4 嵌入式Linux+Android系統(tǒng)包含哪些內(nèi)容
嵌入式Linux系統(tǒng)包含哪些東西?不要急,舉一個(gè)例子你就知道了。
、匐娔X一開機(jī),那些界面是誰(shuí)顯示的?
是BIOS,它做什么?一些自檢,然后從硬盤上讀入windows,并啟動(dòng)它。
類似的,這個(gè)BIOS對(duì)應(yīng)于嵌入式Linux里的bootloader。這個(gè)bootloader要去Flash上讀入Linux內(nèi)核,并啟動(dòng)它。
、趩(dòng)windows的目的是什么?
當(dāng)然運(yùn)行應(yīng)用程序以便上網(wǎng)、聊天什么的了。
這些上網(wǎng)程序、聊天程序在哪?
在C盤、D盤上。
所以,windows要先識(shí)別出C盤、D盤。在Linux下我們稱之為根文件系統(tǒng)。
、踳indows能識(shí)別出C盤、D盤,那么肯定有讀寫硬盤的能力。
這個(gè)能力我們稱之為驅(qū)動(dòng)程序。當(dāng)然不僅僅是操作硬盤,還有網(wǎng)卡、USB等等其他硬件。
嵌入式Linux能從Flash上讀出并執(zhí)行應(yīng)用程序,肯定也得有Flash的驅(qū)動(dòng)程序啊,當(dāng)然也不僅僅是Flash。
簡(jiǎn)單地說(shuō),嵌入式LINUX系統(tǒng)里含有bootloader、內(nèi)核、驅(qū)動(dòng)程序、根文件系統(tǒng)、應(yīng)用程序這5大塊。而應(yīng)用程序,我們又可以分為:C/C++、Android。
所以,嵌入式Linux+Android系統(tǒng)包含以下6部分內(nèi)容:
、賐ootloader
②Linux內(nèi)核
、垓(qū)動(dòng)程序
④使用C/C++編寫的應(yīng)用程序
、軦ndroid系統(tǒng)本身
⑥Android應(yīng)用程序
Android跟Linux的聯(lián)系實(shí)在太大了,它的應(yīng)用是如此廣泛,學(xué)習(xí)了Linux之后沒(méi)有理由停下來(lái)不學(xué)習(xí)Android。在大多數(shù)智能設(shè)備中,運(yùn)行的是Linux操作系統(tǒng);它上面要么安裝有Android,要么可以跟Android手機(jī)互聯(lián),F(xiàn)在,Linux+Android已成標(biāo)配。
2. 怎么學(xué)習(xí)嵌入式Linux操作系統(tǒng)
本文假設(shè)您是零基礎(chǔ),以實(shí)用為主,用最快的時(shí)間讓你入門;后面也會(huì)附上想深入學(xué)習(xí)時(shí)可以參考的資料。
在實(shí)際工作中,我們從事的是“操作系統(tǒng)”周邊的開發(fā),并不會(huì)太深入學(xué)習(xí)、修改操作系統(tǒng)本身。
、俨僮飨到y(tǒng)具有進(jìn)程管理、存儲(chǔ)管理、文件管理和設(shè)備管理等功能,這些核心功能非常穩(wěn)定可靠,基本上不需要我們修改代碼。我們只需要針對(duì)自己的硬件完善驅(qū)動(dòng)程序
、趯W(xué)習(xí)驅(qū)動(dòng)時(shí)必定會(huì)涉及其他知識(shí),比如存儲(chǔ)管理、進(jìn)程調(diào)度。當(dāng)你深入理解了驅(qū)動(dòng)程序后,也會(huì)加深對(duì)操作系統(tǒng)其他部分的理解
、跮inux內(nèi)核中大部分代碼都是設(shè)備驅(qū)動(dòng)程序,可以認(rèn)為L(zhǎng)inux內(nèi)核由各類驅(qū)動(dòng)構(gòu)成
但是,要成為該領(lǐng)域的高手,一定要深入理解Linux操作系統(tǒng)本身,要去研讀它的源代碼。
在忙完工作,閑暇之余,可以看看這些書:
①趙炯的《linux內(nèi)核完全注釋》,這本比較薄,推薦這本。他后來(lái)又出了《Linux 內(nèi)核完全剖析》,太厚了,搞不好看了后面就忘記前面了。
、诿虏佟⒑C鞯摹禠INUX核心源代碼情景分析》,此書分上下冊(cè),巨厚無(wú)比。當(dāng)作字典看即可:想深入理解某方面的知識(shí),就去看某章節(jié)。
、燮渌脮有很多,我沒(méi)怎么看,沒(méi)有更多建議
【嵌入式Linux+Android學(xué)習(xí)路線圖】相關(guān)文章:
學(xué)習(xí)嵌入式10-14
嵌入式學(xué)習(xí)技巧10-04
嵌入式學(xué)習(xí)指南10-14
嵌入式學(xué)習(xí)方法10-14
學(xué)習(xí)嵌入式的技巧10-04