嵌入式驅動工程師開發學習路線

ARM+LINUX路線,主攻嵌入式Linux操作系統及其上應用軟件開發目標:

(1)掌握主流嵌入式微處理器的結構與原理(初步定爲arm9)
(2)必須掌握一個嵌入式操作系統 (初步定爲uclinux或linux,版本待定)
(3)必須熟悉嵌入式軟件開發流程並至少做一個嵌入式軟件項目。

從事嵌入式軟件開發的缺點是:

(1) 入門起點較高,所用到的技術往往都有一定難度,若軟硬件基礎不好,特別是操作系統級軟件功底不深,則可能不適於此行。
(2)這方面的企業數量要遠少於企業計算類企業。
(3)有少數公司經常要碩士以上的人搞嵌入式,主要是基於嵌入式的難度。但大多數公司也並無此要求,只要有經驗即可。
(4)平臺依託強,換平臺比較辛苦。

方法步驟:

1、基礎知識:
目的:能看懂硬件工作原理,但重點在嵌入式軟件,特別是操作系統級軟件,那將是我的優勢。
科目:數字電路、計算機組成原理、嵌入式微處理器結構。
彙編語言、C/C++、編譯原理、離散數學。
數據結構和算法、操作系統、軟件工程、網絡、數據庫。
方法:雖科目衆多,但都是較簡單的基礎。不一定全學,可根據需要選修。
主攻書籍:the c++ programming language(一直沒時間讀)、數據結構-C2。

2、學習linux:
目的:深入掌握linux系統。
方法:使用linux—〉linxu系統編程開發—〉驅動開發和分析linux內核。先看《深》,那主講原理。看幾遍後,看《情景分析》,對照深看,兩本交叉,深是綱,情是目。剖析則是0.11版,適合學習。最後深入代碼。
主攻書籍:linux內核完全剖析、unix環境高級編程、深入理解linux內核、情景分析和源代。

3、學習嵌入式linux:
目的:掌握嵌入式處理器其及系統。
方法:(1)嵌入式微處理器結構與應用:直接arm原理及彙編即可,不要重複x86。
(2)嵌入式操作系統類:ucOS/II簡單,開源,可供入門。而後深入研究uClinux。
(3)必須有塊開發板(arm9以上),有條件可參加培訓(進步快,能認識些朋友)。
主攻書籍:毛德操的《嵌入式系統》及其他arm9手冊與arm彙編指令等。

4、深入學習:
A、數字圖像壓縮技術:主要是應掌握MPEG、mp3等編解碼算法和技術。
B、通信協議及編程技術:TCP/IP協議、802.11,Bluetooth,GPRS、GSM、CDMA等。
C、網絡與信息安全技術:如加密技術,數字證書CA等。
D、DSP技術:Digital Signal Process,DSP處理器通過硬件實現數字信號處理算法。

說明:太多細節未說明,可根據實際情況調整。重點在於1、3,不必完全按照順序作。對於學習c++,理由是c++不只是一種語言,一種工具,她還是一種藝術,一種文化,一種哲學理念、但不是拿來炫耀得東西。對於linux內核,學習編程,讀一些優秀代碼也是有必要的。

注意:要學會舉一反多,有強大的基礎,很多東西簡單看看就能會。想成爲合格的程序員,前提是必須熟練至少一種編程語言,並具有良好的邏輯思維。一定要理論結合實踐。
不要一味鑽研技術,雖然擠出時間是很難做到的,但還是要留點餘地去完善其他的愛好,比如宇宙,管理,心理學,音樂、遊戲、科幻電影。還有一些不願意做但必須要做的!
技術是通過編程編程再編程編出來的。永遠不要夢想一步登天,不要做浮躁的人,不要覺得路途漫長。而是要編程編程再編程,完了再編程,再編程!等機會來了在創業(不要相信有奇蹟發生,盲目創業很難成功,即便成功了發展空間也不一定很大)。

嵌入式書籍推薦:

Linux基礎
1、《Linux與Unix Shell 編程指南》
C語言基礎
1、《C Primer Plus,5th Edition》【美】Stephen Prata着
2、《The C Programming Language, 2nd Edition》【美】Brian W. Kernighan David M. Rithie(K & R)着
3、《Advanced Programming in the UNIX Environment,2nd Edition》(APUE)
4、《嵌入式Linux應用程序開發詳解》
Linux內核
1、《深入理解Linux內核》(第三版)
2、《Linux內核源代碼情景分析》毛德操 胡希明着
研發方向
1、《UNIX Network Programming》(UNP)
2、《TCP/IP詳解》
3、《Linux內核編程》
4、《Linux設備驅動開發》(LDD)
硬件基礎
1、《ARM體系結構與編程》杜春雷着
2、S3C2410 Datasheet
英語基礎
1、《計算機與通信專業英語》
系統教程
1、《嵌入式系統――體系結構、編程與設計》
2、《嵌入式系統――採用公開源代碼和StrongARM/Xscale處理器》毛德操 胡希明着
3、《Building Embedded Linux Systems》
理論基礎
1、《算法導論》
2、《數據結構(C語言版)》
3、《計算機組織與體系結構?性能分析》
4、《深入理解計算機系統》【美】Randal E. Bryant David O”Hallaron着
5、《操作系統:精髓與設計原理》
6、《編譯原理》
7、《數據通信與計算機網絡》
8、《數據壓縮原理與應用》

C語言書籍推薦

  1. The C programming language 《C程序設計語言》
  2. Pointers on C 《C和指針》
  3. C traps and pitfalls 《C陷阱與缺陷》
  4. Expert C Lanuage 《專家C編程》
  5. Writing Clean Code
    —–Microsoft Techiniques for Developing Bug-free C Programs
    《編程精粹–Microsoft 編寫優質無錯C程序祕訣》
  6. Programming Embedded Systems in C and C++
    《嵌入式系統編程》
    7.《C語言嵌入式系統編程修煉》
    8.《高質量C++/C編程指南》林銳
    儘可能多的編碼,要學好C,不能只注重C本身。算法,架構方式等都很重要。

嵌入式軟件工程師學習路線

1、打好嵌入式軟件編程的基礎
這一階段重點打好嵌入式軟件編程的基礎,包括

  • 學習Linux系統的基本應用
  • Linux的常用命令
  • C語言編程基礎
  • 常用的數據結構

特別是C語言中對指針的理解和應用。這一階段的主要目的是學習編程語言、開發環境、和培養自己的編程思維,爲進一步學習嵌入式開發打下良好的基礎。

2、學習ARM體系結構編程
這一階段纔是真正的嵌入式編程,首先我們要
選擇一款嵌入式CPU和一款嵌入式開發平臺,目前ARM 嵌入式CPU應用最廣泛,這一階段重點是
學習嵌入式CPU的裸機編程:

  • 熟悉中斷
  • 定時器
  • 串口
  • NAND FLASH
  • 網絡控制器
  • LCD屏、觸摸屏
  • I2C 設備
  • SPI 設備
    等常用嵌入式外圍設備的硬件工作原理,以及如何使用C語言來編程、控制這些硬件。這一階段除了要學習對硬件編程之外,還需要學習嵌入式硬件的知識,但是對於嵌入式軟件工程師來講,重點是學習硬件的工作原理,在掌握硬件工作原理的基礎上,對硬件進行編程控制。這和硬件工程師學習的側重點有所不同。
    這一階段對應的學校的課程主要包括模擬電路、數字電路、微機原理和單片機。這一階段重點是要看CPU的芯片手冊,大部分的參考書也是對芯片手冊的翻譯。

3、學習嵌入式系統的構建
這一階段主要學習帶有操作系統的嵌入式系統的構建,包括系統的
啓動流程

  • Bootloader的工作流程
  • UBOOT的編譯
  • 裁剪與移植,嵌入式Linux內核的裁剪、移植與編譯
  • 嵌入式根文件系統的定製
  • BootLoader、內核和根文件系統的燒寫
    這一階段的主要目的是掌握帶有操作系統的嵌入式系統的構建和燒寫過程,以及對嵌入式系統軟件的總體構成有個整體認識,爲我們接下來學習嵌入式應用和驅動開發打下堅實的基礎。

4、學習嵌入式Linux應用程序開發
這一階段主要學習上層的嵌入式Linux應用程序開發,包括

  • 基於Linux多進程
  • 多線程網絡
  • 文件與目錄
    掌握嵌入式Linux環境下應用程序開發技術。

5、學習嵌入式Linux驅動程序開發
這一階段主要學習底層嵌入式Linux設備驅動程序開發設計,包括

  • 常用的字符設備驅動
  • 塊設備驅動
  • LCD設備驅動
  • 觸摸屏設備驅動
    以及驅動程序開發中的核心技術。

6、完成一個綜合項目
嵌入式技術關鍵在於理論和實踐的結合,要能夠學以致用,完成了以上的所有階段的知識點學習後,到底有沒有學會,會不會用,能不能應用所學知識來解決實際開發中的問題,我們需要來完成一個綜合的嵌入式實訓項目,例如: 基於嵌入式Linux平臺實現的飛行器、 基於嵌入式Linux平臺實現的智能機器人等,這些項目都綜合應用了嵌入式開發當中的應用,驅動和QT開發技術。

(一)嵌入式驅動的方向

嵌入式驅動工程師目前有兩個走向。(主要說上操作系統的,片上的暫且不討論)

第一,一線IC廠商,諸如德州儀器,三星,還有ADI之類的。你可能說ADI這種做模擬數字芯片的公司怎麼可能要到嵌入式驅動的,你可以翻開Linux內核對driver目錄下有個staging下的iio的adc或者dac的目錄,看到ADI型號的芯片,打開c文件看到ADI的版權信息,沒錯,這就是ADI公司的AE提供的對應他們芯片的Linux驅動。在這裏不得不誇一下ADI公司,驅動支持的相當好,ADC,DAC,頻率源那是一個齊全,(ADI公司的AE相當有水平,看他們寫的驅動,有種醍醐灌頂的感覺,是一手好的學習資料)。

像TI,三星,賽靈思公司更不用說了,他們有ARM的業務,尤其各種千奇百怪的異構多核平臺,例如OMAPL,Davinci,賽靈思的ZYNQ,這些都需要適配Linux且要處理好多核通信,他們的AE開發驅動和維護需求是相當的多也需要相當的水平。對於用戶,多核通信我們能用好已經算是大牛了,就別說開發和設計了。而且這些一線IC廠商另闢蹊徑,爲了達到一條龍服務,從芯片出廠到應用,甚至玩起解決方案一對一設計,少不了嵌入式驅動開發人員。AE這條路無疑是艱難的,工作量也是巨大的,要求也是相當高的,但是公司內部分工明確,有組織有紀律。很少的人能進入到一線開發,這的確是一個有挑戰的工作,如果你有興趣,可以去應聘這些公司的數字類應用工程師。

第二,是應用型公司,可以說IC廠商的客戶,消費者類的小米,華爲手機業務,大疆,工業級的艾默生等等,還有各種創業公司,這一部分很具備國內風格,“全能”,應用加驅動加平臺加軟件,按公司項目工程走,只要能解決問題,就是好同志。幹這個任務就雜了,只要跟嵌入式是相關的,都是你的duty,好處就是你可以不限制平臺選擇,TI的ARM能解決還省錢,就用TI的,三星的能解決,就用三星的,玩的是嵌入式開發的套路,壞在也是不限制平臺,你需要掌握流行的ARM平臺,記住特性,雖說大同小異,但差距還是有的。大多數嵌入式工程師走的是這條道路。目前這種情況,大部分底層驅動IC廠商開發出來了,涉及底層驅動的,會修改移植就保你豐衣足食,要求相對一線AE沒那麼高,但相比於互聯網的程序員,工作量和學習量就有點大了。

(二)入職工資

最關心的是入職工資。

多跑幾個招聘網站,多接觸一下行業內的人,深圳的價位,剛開始一般嵌入式工程師5K-15K,有人說5K才這麼少。工資多少當然和工作屬性和你的屬性息息相關了,深圳創業公司,不太注重學歷這些,基本上都會給你個工作機會,這也是深圳的好處,但工資不會高,一般大專高職HR會定位到4K~5K,做的也基本上是應用級的事情,涉及不太深的技術,如果學歷偏低但酷愛嵌入式行業的童鞋,可以把社會當成第二個學校,多多鍛鍊,只要技術牛總有出頭之日。

我覺得身邊能選擇嵌入式行業的人,也心知肚明這水比較深,多少有些功夫和心氣在裏面。大多數人的工資基本上集中在8K12K,例如:前幾天在羣裏,大疆做攝像頭Linux驅動的的給的價格就是8K12K;還有一箇中型的安防公司,給的價格是1W;(應用級公司基本上了)

下一個檔次,基本上是一線IC廠商,有基友(純基友)在英特爾製造部1.78W(Linux崗位),第二個基友,ADI的AE(Linux崗位),拿到2.5W的月薪(13個月);德州儀器AE(汽車電子Linux的AE,工作兩年),入職小於2W,兩年內給到平均4W一月的月薪,共同點就是主動加班(真心心甘情願的)沒23點前下班過的。

實際上看看分佈,基本上是合理的,高薪就高要求,低薪就低要求。能力,學歷,可塑造力,社會多方面考察人才,錢是真心的不好賺。不是誰輕而易舉的能拿到很多的錢,沉甸甸的,得能負的起的。

(三)題外話:怎麼進一線?

一線具備着高工資,這基本上處於技術金字塔尖的人了,技術牛逼又多金,很多人當然都想躍躍欲試。說下一線IC廠商,衆所周知,一般IC廠商都是歐美企業了,當然多少受歐美外資企業風氣影響,它們注重自己培養,談軟能力談的比較多,比如演講水平,影響力,eager to learn之類的情懷,你可能fuck了,我是純技術啊,這些不行呢,可外企風格就是這樣,他們要找的是值得培養的人,而不是拿過來就能用的人。我們還開那些冠冕堂皇的玩笑“面試怎麼才能看出有影響力啊?說話聲音大,就有影響力啊。”,所以,在外人看來,它名校情結嚴重,篩選嚴苛,有些人自信滿滿等結果,卻不知道怎麼就掉了,有些人覺得沒戲了,反而還進去了,很詭異。

注意我這裏沒有說社招,都是校招。外企的社招可以說難於上青天,可遇不可求。德州儀器HR的原話:“無論你們在學校多厲害,拿過多少獎,寫過多少專利論文,TI不在乎,進入TI,一切從零開始”。基本上一線IC廠商進入後去總部輪崗,導師制,例如德州儀器,他們的AE輪崗0.5-2年去達拉斯總部,費用有新人培養啓動基金,輪崗後,有導師老工程師帶你,所以這裏有一段時間的培養週期你才能唯它所用,所以可以看到歐美企業對於技術人才是儲備,而不是現缺現招。對於你來說,這段日子,絕對是塑造自己的過程,當然這時候的工資雖然不高,但過了培養階段,正式進入崗位,可以想想能賺多少,同時也要過着一個多變態壓力多大的生活。

(四)題外話:勸君稍安勿躁

入職以後,完全憑自己的摸爬滾打求富貴,有人被逼着轉行退出嵌入式行業,有人能求得一席之地多個公司蹲着牆角高薪搶着要,有人成績平平過的不溫不火。每個人都有自己的可能性,但大家都是從C語言鍵入printf 函數開始的,沒人天生就是大牛。當你決定在這個行業行走,當你走一段旅途覺得不適合自己,當你覺得這個行業陪你走過無數孤獨的歲月是多麼可貴,甚至你怨恨這個行業,我們尋求希望在它身上找到發財樹,一輩子衣食無憂。可終究它是一個血汗的行業,耕種一份,收穫一份。今天我學會一個小小的驅動程序,明天我爲之披上一個名校研究生的外衣,無論如何,你做的所有的努力都是在豐富你的嵌入式道路,你也知道有些元素缺一不可,就像是我,研究生階段也是不得不修學分,學沒用的課,可我始終清晰自己的嵌入式道路。

互聯網行業,可謂是“亂花漸欲迷人眼”,似乎鄙視鏈的一端是互聯網人,一端是嵌入式人。稍微具備一點金融知識的人都清楚,互聯網行業正處於通風口和轉型時期,而這個時期需要巨大的能量和資金,基本上有眼力的金融家都來橫插一腳。沒有事情是永恆的,就像是支付寶的聖誕大紅包,領着過癮,可終究是曇花一現。大批量的互聯網人,產品經理、程序員涌入,一旦泡沫拂去,誰在船上,誰在水裏自然見分曉。萬物在變,萬變不離其宗的就是本心踏實寧靜,多學多用,以期待少學多賺,終究是可替代性太強,太容易被淘汰。

認清自己,相信自己,風颳哪裏就去哪裏,終究是不入流啊。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章