後ARM時代,嵌入式工程師的自我修養

1 嵌入式學習的一些概念理解誤區

 

不少嵌入式初學者認爲,學嵌入式,就是學習ARM,就是學習開發板。買一塊開發板,而後在上面「移植」u-boot、Linux內核,再使用busybox製做一個根文件系統,大功告成!以爲能夠出去找工做了。這實際上是有必定片面性的:首先ARM是個CPU架構,跟PC上的X86架構同樣,你見過有人在Windows下面學習C/C++編程、MFC編程、網絡編程、互聯網編程,說本身學習X86的嗎?固然,也不能否認,嵌入式平臺的多樣性、硬件的可定製性致使咱們在嵌入式平臺上開發應用程序、驅動以前,首先要搭建這個平臺,就像咱們在Windows下面要裝操做系統同樣,可是這僅僅是咱們學習嵌入式開發的第一步。android

 

其次,關於系統的「移植」,不少人玩了開發板以後,會在本身的簡歷上寫本身移植過u-boot,Linux內核......其實,這種寫法也是有點瑕疵的。真正的移植,往一個新的芯片或開發板上porting一個u-boot或Linux內核,那可不是一我的能幹的事情,是一個團隊乾的事情。時鐘、DDR、存儲,可能牽涉到各個模塊,哪裏遇到問題,都須要各個模塊的owner去debug,有時候甚至多是芯片的bug,或者硬件開發板的bug,這就須要咱們使用軟件去解決、去規避這個坑,這都須要咱們在很短期,甚至一兩天的時間去解決這個問題,須要一個團隊的各個模塊專家協力完成。因此說,咱們所說的「移植」,其實就像是在Windows下面安裝操做系統,按照步驟完成裝機。固然,經過這個過程,能夠加深咱們對嵌入式系統的理解,可是咱們首先要知道的是,咱們「移植」的系統,都是芯片公司團隊作好的系統鏡像,咱們作的只是配置、編譯、安裝、甚至升級這些基本的操做。這些環境只是咱們學習嵌入式開發的平臺,萬里長征才走完了第一步。面試

 

2 學習嵌入式,咱們到底該學些什麼?

 

嵌入式愈來愈複雜,一個SOC芯片上集成的模塊愈來愈多。以手機爲例,典型的嵌入式產品,咱們看看上面集成了多少模塊:觸摸屏、LCD、USB、WiFi、4G等無線通訊、音視頻編解碼IP、DDR、存儲控制器、3D/2D加速、GPS、指紋識別、NFC、DMA、G-sensor各類傳感器.......。能夠說,如今一個手機的複雜度和硬件配置,已經超過咱們的桌面PC了。除了不斷增長的硬件,軟件方面,好比Linux內核,光內核代碼就有1000多萬行,天天更新的速度超過你學習的進度,你能學得完嵌入式的全部知識和技能嗎?編程

 

早期PC時代,咱們知道能作出X86 CPU量產的也沒有幾家,Intel、AMD和威盛。可是嵌入式時代不同了,ARM的IP受權模式致使不一樣的芯片廠商百家齊放,不一樣的SOC平臺和開發板眼花繚亂,針對不一樣行業需求定製的SOC平臺雨後春筍:手機芯片、平板芯片、視頻安防、物聯網、汽車電子、工業控制,甚至人工智能AI芯片....,你到Linux內核的ARCH下面能夠看看有多少種CPU架構,再到arch/arm下面看看有多少種開發平臺,這還只是加入到內核mainline的平臺,算上沒有加入Linux內核主線的各類平臺,其實數量更多。服務器

 

衆多的芯片架構、不一樣的開發板平臺,咱們該如何去學習?網絡

嵌入式和PC的概念也愈來愈模糊了,Intel已經推出X86架構的CPU和嵌入式產品了,好比平板。ARM也開始進軍服務器和筆記本領域了。不管什麼CPU架構,ARM、X8六、MIPS、PowerPC,還有最近火熱的物聯網芯片,不管是作嵌入式產品,仍是PC、服務器,他們的底層本質其實都沒有變,都是計算機原理和系統架構,都是馮諾依曼的計算機架構,圖靈原型機的各類實現。架構

 

不斷複雜的軟硬件系統,對嵌入式工程師或者學習者來講是一個挑戰。這對咱們自己的知識和技能有一個更新的要求。早期51單片機時代,咱們能夠本身使用麪包板或者本身畫PCB,作一個開發板,而後在上面開發軟件。軟件、硬件本身全搞。如今不斷複雜的SOC平臺,再想一我的全搞,軟硬通吃,基本不可能,這也致使咱們須要分工協做來完成。首先軟硬件的分工,各司其職,各自精通本身的領域,而後進行軟硬件整合,協做開發。再次,軟件方面,嵌入式軟件也愈來愈複雜,Linux內核1000多萬行,android源碼下載下來就佔幾個G的空間,本身想全搞,一樣不可能,一樣須要進行分工。好比android,須要分爲BSP工程師、Linux內核工程師、驅動工程師、android中間層開發工程師、APP開發工程師。對於一個Linux內核,也須要分工,各個模塊一樣進行分工:Linux內核的USB子系統、音頻子系統、視頻編解碼、文件系統......把其中一個模塊你搞精通了,工資絕對不是問題。框架

 

對於嵌入式學習者來講,咱們該學習什麼,或者說如何學習?才能提升本身的職場競爭力,或者說對於一個新手來講,如何經過自學,達到公司的用人標準和技術要求,找到一份本身想要的工做?學習

 

首先,你要學會作減法,從現實出發,要有這樣一個意識:我不可能精通全部的嵌入式技術,學會堅持,制定合理現實的小目標。不少人喜歡那種不切實際的廣告轟炸營銷,擊中你心理上的某個軟肋,某個G點,一會兒興奮起來。越熬越濃的心靈雞湯,並不能解決咱們吃飯的生存現實問題。不少人,包括我,在學習的時候,都喜歡給本身樹立各類路線、計劃、日程表。制定計劃時激情滿滿,熱情高漲,激動得睡不着覺。計劃宏偉而飽滿,彷彿成功就在眼前。可是每每不切實際,每每在早期,遇到各類困難,各類坑,各類拖延致使沒有堅持下來,最後夭折。而後接着制定下一個宏偉的計劃,繼續夭折,生活周而復始,day after day。觀察咱們生活周圍,真正作出成績的都是那些基於現實出發,能一路堅持下來的人,day by day。有時候你會發現,並不以爲他們有多聰明。人工智能

 

其次,保持本身的興趣,說白了就是爲了堅持下去。見過不少人想學習嵌入式,花了不少米買一塊開發板,激情滿滿,過一段是過去再看,已經不折騰了。嵌入式開發難,難在哪裏呢?主要在於開發環境的搭建,軟件調試上,不像在Windows上使用VC開發程序,集成開發環境都幫你弄好了,各類斷點、單步、查看堆棧、寄存器、內存窗口。而嵌入式不同,硬件環境搭建會遇到各類各樣的問題,各類電腦的兼容問題,各類莫名其妙的問題,有時候着實讓人抓狂,時間久了,慢慢地學習的激情殆盡,也就不想學習了。這還不算什麼,更嚴重的是,不少人學習嵌入式遇到挫折,每每會打擊人的自信,以爲本身能力不行,智商不夠,不適合幹這行,在心理留下了陰影。對於我的學習者來講,買了開發板,你不買配套的萬用表、示波器等調試設備,遇到硬件問題也是束手無策,沒法解決。其實咱們能夠徹底使用其它的平臺去開展咱們的研究和學習,好比QEMU,一款能夠仿真開發板的開源軟件,使用這款開源軟件,咱們能夠在電腦上虛擬一個世面上流行的開發板,而後再在這個仿真的開發板上跑u-boot、Linux內核、掛載根文件系統,使用和開發板同樣的源碼,運行效果和真實的開發板是同樣的。並且,使用QEMU的好處就是,「硬件」永遠不會出問題,可讓咱們避過硬件的各類坑,騰出更多的精力去研究嵌入式軟件的各類架構、編程技能、內核驅動....,這些纔是嵌入式工程師的核心競爭力,須要花大量的時間不斷地去積累,去磨合,去提升的。把大量的時間耗在一個本該不屬於學習範疇的硬件bug上或者硬件環境不兼容上,不划算,由於你之後進公司後,遇到一樣的問題,找硬件工程師,半分鐘幫你搞定。因此說,選擇一個理想的嵌入式學習平臺,尤爲對於初學者來講,很重要。操作系統

 

最後,要保持學習的深度,刻意練習。不要讓本身永遠待在學習的溫馨區,要學會挑戰本身,不斷去擴展本身知識的邊界,完善本身的知識體系和技能。不少人買了開飯,按照教程,「移植」了u-boot,Linux內核,製做了根文件系統,而後就陷入了迷茫:接着要幹什麼?要學習什麼?想學習又感受深刻不下去,東一耙子,西一耙子,看看這,看看那,時間不知不覺就過去了。其實,學習嵌入式,基本的嵌入式知識和理論學習仍是必要的,不少人推崇邊作邊學,到項目中學習,實踐出真知。固然這也是一個方法,可是也有弊端,那就是學習的不繫統,不少有心人到後來仍是得回來補課,完善本身的知識體系和技能。不少人玩開發板,燒寫鏡像,玩得賊溜,可是你知道這裏面的原理嗎?知道JTAG怎麼下載的嗎?Jlink和JTAG有什麼區別?爲何PC上要裝個JTAG軟件而Jlink不用?程序的編譯和連接是怎麼樣的?爲何內核鏡像要下載內存的某個地址?換個地址行不行?爲何咱們編寫的程序要在有OS的環境下運行,在ARM開發板裸機環境下,你能寫一個跑起來的程序嗎?只有對這些問題深刻思考,你纔會對嵌入式有一個更深的認識,超越了平臺,一通百通。

 

 

3 80%的嵌入式知識和技能,其實跟硬件平臺無關

 

嵌入式開發須要的知識體系和技能,80%其實跟硬件平臺無沒有無關係的。好比計算機系統原理、編程技能、程序的編譯連接、你對Linux內核的理解、設備模型、驅動架構、項目管理等等。

 

真正跟硬件平臺有關的,好比驅動開發,上面的框架是跟平臺無關的,下面跟各個硬件平臺的適配部分,可能跟硬件平臺就有關係了,寄存器配置、開發板硬件配置等。而對於嵌入式工程師來講,尤爲是驅動開發工程師,等你工做後,你會發現,跟應用開發相比,真正要寫的代碼量不多,每每只須要改幾行代碼。可是每每這幾行的代碼量,須要你深厚的背景知識:硬件知識、通訊協議、對芯片、開發平臺資源掌握、對Linux內核架構、設備模型、驅動框架的理解,這些纔是嵌入式工程師的核心競爭力。

 

若是你看到不少廣告還在以開發板或者平臺做爲噱頭,能拿多少工資做爲宣傳,這時候你的腦海裏要有這種意識,這是一種推廣宣傳。工資多少是由你本身的水平和市場大行情決定的,雖然在面試時HR會對你自己的水平評估有一些偏差,可是要相信,時間會證實你本身的真實價值,不斷提升本身的知識水平和技能纔是王道。真正的技術須要本身花時間慢慢吸取、積累、消化,內化爲本身的知識體系和技能。外在的心靈雞湯或高煲老鴨湯,只能讓你一時地熱情高漲,產生暫時的錯覺,並不能真正的提升技能。

相關文章
相關標籤/搜索