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