| 嵌入式工程師成長之路 系列文章 總目錄 |
|---|
| 系列文章總目錄 |
| 希望本是無所謂有,無所謂無的,這正如腳下的路,其實地上本沒有路,走的人多了,也便成了路 |
| 原創不易,文章會持續更新,歡迎微信掃碼關注公眾號 |
| 承接 小程式 / 嵌入式 / PC端專案開發,歡迎添加筆者微信18166056253 |

1.嵌入式領域
嵌入式是用來做產品或做控制系統的一類技術的總稱,把嵌入式看成一個行業我覺得是不對的,你可以說智能電視是一個行業,無人機是一個行業,他們都使用了嵌入式技術,
整個領域如下圖所示:

英國有一家芯片設計公司,名字叫arm,arm這家公司很特別,它只設計芯片,不生產芯片,我們把arm設計輸出的東西叫芯片內核,它是整個領域最上游的公司,
把嵌入式領域比作房地產建筑行業,
(1)arm公司就是建筑設計師,并且這些設計師能力非常強,他們只設計圖紙,
(2)ic設計公司就是房地產公司,房地產公司也有自己的設計師,但這些設計師是把arm公司設計的圖紙買過來,進行二次開發,并且針對自己的房地產專案的側重點,對圖紙進行不同的修改,
譬如,如果是剛需專案,那就把房屋面積整體改小,改到100平左右;如果是酒店房地產專案,那就把房間改大;如果是別墅房地產專案,那就把樓層高度加高,
也就是ic公司把arm公司設計的芯片設計圖紙買來之后,針對自己所定位的行業來設計適合該行業的芯片,我們也把這類公司稱為SoC芯片原廠,
譬如意法半導體,他們拿到arm公司的圖紙之后,針對微控制領域的特點,設計出了非常受歡迎的stm32芯片,譬如華為海思半導體,他們拿到arm公司的圖紙之后,針對路由器等通信領域,設計出對應的芯片,
這些公司也僅僅是對圖紙進行二次開發,這些公司輸出的東西還是圖紙,因為他們自身沒有把圖紙變為芯片的能力,華為找到臺灣的臺積電晶圓代工廠,讓他們幫忙根據海思設計的圖紙把芯片加工出來,
就好比建筑設計師沒有建房子的能力,他們把建筑圖紙設計出來之后,需要找專門的施工隊,讓他們按照建筑圖紙來施工建房子,
(3)產品公司就非常多了,
譬如無人機公司,很多四旋翼無人機公司使用意法半導體的stm32來做無人機的主控,譬如oppo手機用高通的芯片來做手機,譬如小米公司用amlogic的芯片來做智能電視,
(4)方案公司
有公司就是自己做無人機,自己研發,自己找代工廠生產,打上自己公司的logo對外銷售,這類就是產品公司,但如果產品公司不想自己研發,譬如人手不夠,知識儲備不夠,那這些產品公司就會去找方案公司,俗稱外包公司,幫忙研發產品,產品研發好之后,再貼產品公司的logo,
有些大的工業設計公司也會承包產品方案的設計,工業設計的首要作業是幫客戶設計產品結構;如果該設計公司有供應鏈和開模方面的經驗,有些創業公司也會把所有東西都包給設計公司,這里的設計公司其實也擔任了一個方案公司的角色,
2.cpu架構和擇業
arm針對目前的市場,設計了三種不同的架構,
(1)針對于微控制器領域,設計出了cortex-M架構,譬如意法半導體拿到這個cpu架構圖紙,在此基礎上設計出了stm32;飛思卡爾也拿到這個cpu架構圖紙,在此基礎上設計出了k60,基于這種架構設計出來的cpu主要是對標以前的51單片機,也俗稱MCU,微控制器,
cortex-M架構又分很多細分系列:
譬如低功耗系列,cortex-M0,
通用微處理器領域,cortex-M3,
高性能微處理器領域,cortex-M4,
除了增加了特定的功能模塊和性能有所提升之外,它們本質上沒有區別,會一種型別,很容易就能學會其他型別,
智能磨面機,空氣凈化器,3D列印機或很多的無人機都是使用這種架構的cpu做主控,如果是做這種產品,需要依次學習以下知識:
[1] C語言
[2] stm32芯片裸機編程,也就是用C語言來操作各種外設,
[3] rtos,
[4] 模擬電路設計,mcu外圍電路設計,
然后自己再從0到1做一個專案,包括軟體和硬體,
有以下作業崗位:
(1)stm32工程師,單片機軟體工程師,嵌入式軟體工程師,
(2)嵌入式硬體工程師,
大公司一般分得比較細,有專門的嵌入式stm32軟體工程師和嵌入式硬體工程師,最好的方法就是自己到前程無憂等招聘網站搜索,看看這些作業崗位需要什么樣的專業知識.

這種主要是做mcu外圍電路設計的,主要是mcu和模擬電路需要掌握,


這兩種主要是做軟體的,C語言和arm微處理器是核心,
如果你就想做無人機:

如果你就想做電機控制:

沒事就到招聘網站上看看這些招聘資訊,你就知道你要學什么了,
(2)針對消費類電子領域,設計出了cortex-A架構,cortex-A架構也有很多系列,譬如單核心cpu架構cortex-A8,四核心cpu架構cortex-A53等,三星公司拿到arm公司設計的架構圖紙,設計針對智能手機行業的芯片,聯發科拿到arm公司設計的架構圖紙,設計針對智能電視行業的芯片,
手機、智能電視、機頂盒、智能音箱等產品比微控制領域的產品更復雜一些,這類產品一般都是直接跑linux或Android的,所以這種嵌入式行業,分工更明確,也基本是比較大的公司,小公司因為人數少,很難有這樣的技術儲備,很難搞定,
這種產品非常復雜,我就拿我之前從事過的智能電視行業舉例吧,
xx公司(某芯片原廠)拿到arm架構的授權之后,開始設計針對智能電視行業專用的SoC,譬如將音視頻編解碼硬體模塊集成到SoC內部,將自家wifi芯片集成到SoC內部,圖紙設計好之后,會首先在一臺芯片模擬器上預演,也就是看看芯片設計是否有問題,怎么預演呢?這就是軟體團隊的作業了,軟體團隊有bootloader團隊(uboot團隊),linux內核團隊,Linux驅動團隊,Android團隊,
bootloader團隊會首先把移植uboot到芯片模擬器上,先把bootloader跑起來;緊接著再是linux內核團隊負責把Linux跑起來,驅動團隊一般也負責uboot的驅動,驅動都整好后,再是Android,一步一步得把整個系統跑起來,如果沒什么大問題,就把圖紙給臺積電,讓他們代工生產(這一程序也叫流片),等拿到芯片樣片后,再在真實的芯片上把上面的步驟重新做一遍,
需要依次學習以下知識:
[1] C語言
[2] cortex-A8架構的處理器,譬如三星的s5pv210,對應的開發板廠商有:深圳九鼎或友善之臂等,對于軟體工程師來說,SoC是單核的,還是多核的都不重要,對軟體開發并沒有什么本質區別,并且s5pv210的資料眾多,更好學習,把它學會,基本可以無縫對接其他多核處理器,
[3] uboot,知道怎么用uboot的命令,知道怎么移植,如果想深入,研究一部分原始碼也是可以的,
[4] linux應用,主要學習linux的系統api,知道怎么呼叫,什么場合下使用什么,
[5] linux驅動,驅動往往是最難的,但也僅僅是一開始,知道套路后也不過如此,
還有一類作業是和Android相關的,做整個Android系統,注意,不是Android app開發,主要是Android framework開發,Android app呼叫Android提供的api,而這些api本身呼叫了linux驅動,linux驅動再通過寫暫存器來操作硬體,
因為只有芯片原廠才真正最熟悉這塊SoC(因為是他們自己設計的),設計這個東西的人比任何人都了解這個東西怎么使用,
所以,SoC原廠把芯片、智能電視的主板以及配套的系統軟體都弄好,基本上,一開機就能正常看電視了,把這三者再賣給做產品的公司,譬如海信電視,譬如小米電視,譬如TCL電視,TCL拿到原廠給的這三個東西之后,如果需要修改,譬如重新定義電視按鍵的功能,可以TCL自己修改,也可以喊原廠幫忙修改,這里就涉及到了三種作業崗位了,
SoC原廠自己的linux驅動或系統工程師,SoC原廠和TCL產品公司之間的對接,需要SoC原廠的FAE和TCL公司的FAE參與,如果FAE解決不了,再喊SoC原廠的linux驅動工程師幫忙,TCL也有自己的linux驅動工程師,不過他們肯定沒有原廠的驅動工程師那么了解這個芯片,所以絕大部分需要原廠的驅動工程師配合,
公司里面有幾個專有名詞:
(1)FAE:現場工程師,譬如產品有問題,原廠就要配自己公司的FAE去客戶那里出差,解決問題,所以FAE是需要經常出差的,并且出差一般是常駐,我之前有同事在青島海爾電視駐扎了半年,出差補貼還挺高,所以我們當時非常羨慕,如果出差解決不了問題,原廠就會讓公司研發人員協助,
但如果是應屆生一出來直接去做FAE,離職率也比較高,相對來說FAE側重的是整體,對專案和產品的總體都比較了解,有點類似于小公司的產品經理,這對于就想做技術的年輕人來說,可能學不到具體的技術,所以離職率也比較高,
最好是做了幾年技術之后,再去大公司做FAE,這樣心里比較有底,女生做FAE的還挺多的,畢竟不用寫代碼,還是挺不錯的,
(2)PM:專案管理/專案經理,負責協調資源以及和客戶對接,
(3)RD:研發工程師,需要寫代碼的,需要畫原理圖的,需要有鉆研精神,一般負責搭平臺,將基礎代碼跑通,男生偏多,軟體的話,一般是用c語言開發,
(4)AE:業務工程師,RD把整個系統跑起來之后,接下來就是AE根據客戶的要求來撰寫產品具體的業務邏輯了,
可以理解為就是做專案的,譬如做智能音箱,至于智能音箱跑的linux系統,他們可以不用管,他們只要在linux系統的基礎上開發智能音箱產品本身的業務邏輯,一般是用C++開發,
做驅動最好是去SoC原廠,因為那是比較有技術含量的;但原廠不多,所以絕大部分Linux驅動的作業都是在產品公司,
有些產品,譬如車機系統,往往買到原廠的芯片之后,只要Android系統或linux系統能夠跑起來就行了,剩下的絕大部分車機系統本身的軟體開發都是產品公司自己完成,這種公司可能配了一到兩個驅動工程師,剩下的都是linux應用工程師,
linux應用這種作業崗位非常多,
作業崗位有:
Linux驅動工程師
Linux應用工程師


以上兩種都是產品公司,


寒武紀和聯發科都是SoC原廠,上面的是原廠的驅動作業,
在原廠做linux驅動工程師,主要是在做什么呢?
主要有四種作業內容:
(1)解決產品的bug,當然這個bug必須是和你維護的模塊有關,譬如你在維護gpio按鍵模塊,如果產品的測驗人員,也就是QA,發現按鍵不管用了,怎么按都沒反應,經過一套bug管理系統之后,這個bug就會被領導分給你,然后你只需要解決它就行了,這類作業不多,因為驅動往往很穩定,基本不會有什么bug,
(2)解決客戶定制化的需求,譬如TCL有一個新需求,需要按連續按兩下電視按鍵之后,電視機進入home界面,剛好你在維護按鍵模塊,所以你需要寫代碼實作它,這類作業內容也不會非常多,
(3)由于芯片迭代,導致你維護的模塊的暫存器發生了變化,這是你也需要修改代碼,讓這個驅動能在新的芯片上繼續使用,這類作業很多,基本一個月就會迭代一次芯片,當然還包括客戶一些定制化的芯片,
(4)linux系統迭代,譬如linux系統從4.9升級到5.0,如果你負責的模塊剛好呼叫了內核的介面,譬如申請中斷,申請gpio,如果這些介面剛好發生了變化,那么你也需要修改驅動代碼,這類作業一般兩年一次,
在原廠做linux驅動比較穩定和輕松,作業基本是雙休且福利很好,
還有一些比較專的行業,譬如音視頻編解碼行業,一般需要學習c++和qt,然后在學習ffmpeg,opencv,


(3)針對軍工領域的cortex-R架構,這種架構的cpu我也沒接觸過,不好妄自下筆,
3.專業術語的含義
cortex-M、cortex-A、cortex-R這些是arn公司設計的cpu內核,是最核心的東西,arm7是arm以前設計的架構,現在已經不再維護,armV7、armV8是指cpu指令集,cortex-A8采用就是arm-V7的指令集(可以理解為匯編陳述句),
4,總結,嵌入式進階路線,僅供參考
嵌入式是一個領域,不是一個行業,行業不同,具體的嵌入式知識是不一樣的,但基礎都是一樣的,
(1)大學階段和作業一年,如果從大二開始學習嵌入式,這里一共有4年時間,這段時間把嵌入式的基礎知識好好學完,stm32,rtos,模擬電路,電路設計,arm裸機,uboot,Linux應用,linux驅動,
(2)作業后的兩年左右的時間,學習行業知識:找到一個自己感興趣的行業,因為每個行業對應的行業知識是不一樣的,譬如無人機行業,需要學習直流無刷電機控制,飛控演算法,譬如音視頻行業,如果是做底層,linux攝像頭驅動,編解碼模塊(但這一般只有在原廠才能真正接觸);如果是做應用,就是ffmpeg,opencv這些,
每個行業所需的行業知識都是不一樣的,
(3)花一到兩年學習行業標準以及摸清楚你做的產品需要哪些認證,
每個產品,都不是隨便就能拿到市場上去賣的,必須有相關認證,把認證,供應商上下游摸清,
如果還在學校,有很多時間,學習嵌入式就不要再糾結要不要學硬體,要不是學linux,還是只做stm32這種問題了,把你的職業生涯拉長,你會發現,學的東西越多,學東西也就越快,等后面發現自己感興趣的行業時,在側重去學習該行業的專業知識,
如果是轉行或再次擇業,嵌入式工資一般,相對于互聯網行業,工資還是比較低的,并且學習內容非常多,如果沒人告訴你要怎么學,要學什么,很容易陷進去而出不來,要慎重,但一旦進入該行業,由于門檻比較高,可以很好的保護你的職業生涯,并且硬體這方面的作業,從事時間越久越有價值,
所有嵌入式行業,基礎知識永遠都是c語言、arm的處理器以及模擬電路,其他的就要看具體所在的行業了,
這個時候你已經畢業3到4年了,加上學校的那幾年,估計已經在嵌入式領域折騰七八年了,你已經是大神了,

文章也會第一時間發布在微信公眾號,希望能給個支持掃碼關注,從0到1開始學習嵌入式,也祝各位前程似錦,
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/278905.html
標籤:其他
