跟濤哥一起學嵌入式 第03集:嵌入式要從u-boot移植學起?

大家好,我是濤哥,歡迎閱讀《跟濤哥一起學嵌入式》第3集。俄羅斯仲夏夜,世界盃依舊如火如萘。球場上,夕陽下,梅西沒落的身影、C羅的黯淡離場,並沒有打擊大家太多的熱情。戰火依舊,老兵不死,梅羅時代是否快要終結?然而新一代巨星冉冉升起,風起雲涌。在看球的同時,學習充電也不能落下,今天我們聊聊第3個話題:學習嵌入式,一定要從u-boot移植學起嗎?

嵌入式真要從U-boot移植學起?

故事緣起嵌入式技術羣(475504428)一位嵌入式學員遇到的問題:這位學員想在他的開發板上移植最新版本的U-boot。然而,將近半年過去了,發現還在羣裏問一些關於移植的一些問題,這就引發我的思考:照這樣的速度,再給他幾個月,能否移植成功?對於一個新手,沒有輔助的一些工具,費這麼大力氣,去做一些跟以後的工作不太相關的技能,是否划算?當看到這種學習方式給很多新手帶來的不是進步的喜悅,而是打擊,甚至是轉行去做其它,我覺得我們也許應該換種學習方式了,包括我在內,在上面也栽過不少坑。

我的悲催學習經歷

跟大家學習的經歷差不多,學生時代,玩完51單片機後,我就購買了第二塊開發板:某款ARM9開發板,這裏就不說具體的名字了。按照流程,裸機實驗做了一遍後,就開始開啓了U-boot的移植生涯,在燒寫U-boot時發現根本啓動不起來,當時由於沒有相關的調試工具,比如TRACE等,也不會相關的調試打印手段,所以只能嘗試各種可能的原因一一排除,逛各種論壇、到百度翻頁,發現根本解決不了問題。爲此前前後後折騰了幾個月,被折騰得有氣無力。到最後,聯繫廠商的工程師,開發板寄回去後,發現是NOR FLASH芯片的問題,重新換了一塊NOR FLASH,系統就可以正常運行了。雖然這個問題最後得到了解決,但是前前後後也浪費了我幾個月的時間,當然,有人可能會說,通過這個bug你也學到很多東西啊。是的,通過不斷分析這個問題,確實增長了不少知識和技能,但是對於新手來說,如果一上來就通過問題驅動來學習,是很容易打擊人的學習積極性的。大部分人可能會堅持不下去,折騰得差不多了,也就把板子扔到一邊落灰,去搞互聯網、Java去了,從而改變了自己的職業道路。爲了這個bug,我浪費了幾個月的時間,我覺得是不划算的,這幾個月的寶貴時間,我可以去學習以後嵌入式開發中用到的高頻技能,提高我的工作效率,而不是在這個低頻技能上耗費太多的時間。

高頻技能與低頻技能

什麼是高頻技能,低頻技能呢?寫這兩個詞時,特地到百度搜索了一下,發現並沒有相關的詞彙,姑且看作是我創造的兩個新詞吧(版權歸我啊,用時要交稅~)。顧名思義,高頻技能就是我們在工作中大概率使用到的技能;低頻技能,就是我們在工作中很少使用的技能。

早期的單片機開發,系統比較簡單,從硬件設計、PCB畫圖、軟件開發、測試,一個工程師就可以搞定,軟硬通吃。按照今天的流行語,就叫全棧工程師。但現在不同了,嵌入式開發,尤其是上了OS後的嵌入式系統開發,需要的理論基礎和技能儲備太多太雜:從硬件、計算機系統結構、操作系統、應用層、GUI等,都要有所涉獵。同時,隨着嵌入式越來越複雜,分工也越來越明確:硬件工程師、PCB工程師、BSP工程師、驅動工程師、應用工程師、測試工程師,大家以一個團隊的形式共同開發維護一個嵌入式項目。

分工的形成,以前全棧工程師需要的軟硬技能,就不需要全部學習了。當然,你也學不完,就算你學完了,有些知識你一輩子也可能用不到。分工機制下,每個人精通各自的模塊,分工協作,效率最高。現在一個嵌入式SOC,幾十個IP模塊,你說你都掌握,有點不現實,一個音視頻解碼、GPS、GPU、USB都可能讓你啃幾年才能談得上精通。系統越來越複雜,分工越來越明確,這就需要我們可能要換一種新的方式了。

對於嵌入式學習者來說,面對越來越複雜的系統,我們該如何學習,學習什麼,這是一個很值得思考的問題。在思考這個問題之前,我們首先要有一個前提:人的精力是有限的,不可能掌握所有的知識和技能。如果你不認可這個前提,非得按照那種全棧工程師的模式學習,那下面就沒有看的需要了。

該如何學習呢?我們需要對嵌入式開發,需要的技能進行重構和分解。哪些是常用的,基礎的,必須掌握的,即高頻技能,哪些是不常用的,即低頻技能,然後再根據需要,科學地學習。這纔是嵌入式2.0時代,學習嵌入式的正確姿勢,適應職場技新形勢新需求的學習捷徑。

學習U-boot的正確姿勢

同樣一個U-boot,不同的職位、不同的開發人員,對它的掌握程度是不一樣的。一個團隊就和一個特種小分隊一樣:狙擊手要求精通狙擊、爆破手要精通各種爆破技術、通信兵要掌握各種電子情報獲取技術。團隊中不同的成員精通不同的技能,集合在一起,就可以形成恐怖的戰鬥力。人的精力是有限的,精通一門技術的同時,就不可能在另一門技術上花費同樣的心力了,學習U-boot也是一樣,你也不必什麼都學。

那對於新手來說,U-boot要學習什麼呢?我覺得兩點就夠了:U-boot的啓動流程和U-boot跟內核的傳參交互。這些是基礎,也是各種開發人員經常接觸到的。至於各種啓動方式、底層實現的一些細節,這些原廠都已經做好了,我們直接用就可以了。軟件開發中有軟件複用的思想,同樣,嵌入式系統開發中,我們也要有這種思想,不要什麼都自己幹,什麼輪子都自己造,尤其是硬件,尤其是新手!高手造輪子,一般人用輪子,這是規律,先學會用輪子造汽車,在慢慢學着造更好的輪子。因爲很多硬件上的坑、芯片內部的bug,這些都是不可見的,不會對外公開的,很多都是通過軟件規避、或者其它手段曲線救國來實現的,這些東西你可能永遠都不會知道,所以,如果你是新手,儘量不要跌到這些坑裏,可以參考我上面所說的學習方式。

嵌入式工程師自我修養

《嵌入式工程師自我修養》體系教程,就是根據這種思路,適應嵌入式新時代需求、對嵌入式中的高頻技能、低頻技能不斷重構,分解,重新設計而成的一種培訓教程體系,也是我未來幾年努力打造的一套培訓課程。跟隨這套教程學習的學員也許會發現,裏面的相關課程,跟目前市面上、培訓機構的都不太一樣,沒錯,這也算是我的一個小小原創,互聯網上首家使用新概念:高頻技能、低頻技能重新打造的一門嵌入式自學體系教程。

這門教程的威力在哪裏?一般的教程,大家學到最後,學到的都是同樣的知識和技能,就像流水線一樣,出來的都是同樣的產品。而《嵌入式工程師自我修養》體系教程,不是這樣:每個人的學習強度不同、選擇方向不同,最後結果也不一樣:你有可能發現太難、學不下去,知難而退;有可能是基礎紮實的普通士兵;也有可能是身懷絕技的特種兵;也有可能是身兼數門絕技的兵王。課程的難度強度梯度足夠大,對你的技術成長上限不設限,它跟你的目標、要投入的時間和精力成正比,只要你肯吃苦、願意努力,你可以把你的潛力推高到極致。對你,對我,都是同樣的挑戰。

《跟濤哥一起學嵌入式》,會持續跟大家分享嵌入式相關技術、學習方法、學習路線、求職面試等,歡迎收聽頭條號(微信公衆號):宅學部落,QQ羣:475504428

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