单片机6年想转嵌入式Linux ,不知如何下手?
關注、星標公眾號,直達精彩內容
來源:知乎
作者:snowdream
刷知乎看到下面這個提問。
單片機6年想轉嵌入式Linux ,不知如何下手?
現在挺尷尬,做的單片機產品總是感覺重復重復再重復,想學習點新東西,不知道如何轉。
說實話,這個問題自己關注了很久。
今天就借題主這個問題,回顧一下自己的 MCU->Linux 的技術道路。
期間有過技術突破時候的快樂,也有面對技術難題時候的苦惱和彷徨乃至想要放棄。
站在今天回頭看,自己對于技術的堅持才能支持自己一步一步走下來。
希望我的經歷和建議,能夠對題主和其他對嵌入式技術有興趣愛好的朋友,有所幫助。
我是本科階段就開始接觸51單片機,也經歷了電子大賽的考驗。
碩士階段也使用 MSP430 做出過一些產學研結合的嵌入式產品,也進行了小批量的實用。
雖然碩士階段也有接觸 Linux 嵌入式開發,但是回顧自己的碩士階段,PLC+組態和 MSP430 MCU 的確是我的優勢技術(畢業課題搞的 FPGA+Verilog 上不了臺面,當時不知天高地厚去面試 FPGA 崗位,結果可想而知)。
入職華為后,雖然是 Linux、VxWorks的操作系統,但是其實接觸最多的還是 MCU 以及 Linux 用戶態下的應用編程。在大一點公司有過經歷的人都知道,螺絲釘就是螺絲釘,你永遠只能看到樹木看不到森林。不過華為幾年,我的編碼能力的確有了大幅度質的提高。
當年離開華為,和題主的想法有些類似,每天都是面對基本相同的芯片,做的永遠是自己最熟悉的模塊,產品重復造輪子的現象也很嚴重。想去學習新的技能棧也沒有任何時間和精力。
終于等到了乙方通信芯片供應商給出的 Linux 嵌入式開發的 offer,想著自己也曾經搞過Linux嵌入式,有些基礎就欣然跳入了這個芯片巨頭500強做通信協議棧的開發。
理想很豐滿,現實很骨感。可以說嵌入式 Linux 和 MCU 的開發,有相同和相通,但是差別也是非常巨大的。但是,對于答主來說退無可退,而且答主也看好了 Linux 在技術壁壘上的優勢。怎么辦?只能拿出當年剛入職華為死啃C語言的勁頭,干就完了。
當年沒有知乎這樣的知識問答平臺,就找了新公司的老員工還有答主同屆畢業搞 Linux 嵌入式開發的同學咨詢經驗和學習路線。在收到他們熱心的回復和指導后,答主開始了又一輪的死啃 Linux 嵌入式技術旅程。
Linux 的嵌入式開發從大類來看,分為 BSP 和應用開發。
答主為了應付新工作的挑戰,先選擇了嵌入式 Linux 應用開發的復習及進階。后面等答主離開這家公司自主創業的時候,也因為成本問題也自己死啃了嵌入式Linux的BSP,這里咱先說應用。
1. Shell、VIM 及 Makefile
很多朋友可能說,這兩個工具有必要學習么?我的建議是,非常有必要。如果你連基本的 shell 都不懂,怎么去搗鼓 Linux 的文件系統。
如果 VIM 用的不好,雖然 windows的文件夾可以和Linux系統映射,但是 windows 下的字符編碼經常在 Linux 下引起莫名其妙的問題。你說VIM的文本編輯你要不要學習一下?
至于 Makefile,搞 MCU,DSP 的朋友可能都比較陌生。因為 MCU,DSP 的配套編碼下載軟件幫你搞定了 Makefile,你只需要在 UI 界面下配置一下就可以自動生成編譯文件鏈。比如 Keil中,你告訴 Keil 編譯文件在哪里,宏定義是啥就行了。可是當時答主編譯 Linux,只能自己手動在 Maikfile 中告訴嵌入式編譯器,編譯什么文件,生成什么文件等等:
另外:學會搭建交叉編譯環境,也是一個嵌入式 Linux 開發人員必須的技能。這個東西沒啥技術可言,理解大概原理半個小時搞定。
以上這些,不建議拿出大塊時間進行學習和操練。工作之余,安裝個虛擬機環境和Linux 系統,買本基本的 Shell 教程,搗鼓幾天基本 Shell 和 VIM 就差不多了。
至于Makefile,推薦網上自行尋找一下《跟我一起學Makefile》這篇古老的文檔。
2. Linux 常用 API
學習既然題主和當年答主一樣,都是從 MCU 過來的。C語言肯定沒有問題。如果題主接觸過 RTOS 那理解 Linux,也會快很多。
即使沒有 RTOS 的經驗,也沒有關系。從頭開始學,反而少受到以前知識和理解的影響。
其實常用的 Linux 應用態編碼,主要用到的就那么幾個庫和 API:多線程,多進程,阻塞非阻塞等理論互斥機制:讀寫鎖,自旋鎖等線程通信機制和信號網絡通信 Socket 其他你工作可能涉及到的。
跟著一本書,從頭看下來,邊看邊用工作實踐,邊用你上面裝好的虛擬機+Linux系統進行編碼驗證。有基礎的情況下,還是很容易入門和上手的。
如果沒有 RTOS 的概念和基礎,也真的不用擔心,你理解 MCU 的 RTOS 無非就是能讓學習 Linux 線程和進程更快一些,不理解那就學的慢點而已。這里推薦我用過的教材,不一定多高贊,但是個人感覺足夠用:
至于 UI 開發是否要學習,就看題主的工作情況。
3. Debug 技術
耐心復習完前面兩個階段的知識,并配合以工作和自己虛擬機環境的編碼練習。基本上一個項目邊學邊干下來,題主完全可以摸到嵌入式 Linux 的門道。
不過,但凡程序總會 有bug。以前 MCU 的 IDE 可以幫助我們提供一些Debug信息,斷點調試等手段。在 Linux 下,我們只能依靠 GDB 這個強大的工具,幫助我們在 Linux 的世界里,尋找 Bug 的蛛絲馬跡。
關于 GDB 的學習,網絡上有很多資料。策略依然是邊學,邊干,邊總結。積累多了,GDB 自然就會用了。這里就不再多說。答主經過了死啃階段,在項目過程中,慢慢實現了Linux應用開發的轉變。答主編寫的通信芯片底層協議的代碼,沒準都用在各位朋友的電腦和手機芯片上,哈哈。
這個過程雖然很艱辛,但是對于追求技術進階的人來說,學習新技術和新技能,永遠是快樂的。
其實,Linux Bsp 也是嵌入式 Linux 開發的另一個大頭。答主在后期合伙創業中,也是通過死啃的方式,掌握了基本的Linux Bsp 技能棧。過程和路線因為今天篇幅有點長了,寫的太多了。后續如果有朋友感興趣或者需要,答主再來繼續往下寫怎么從 Linux 的應用開發,擴展到Linux Bsp 開發的技能棧領域。
以上,僅代表個人經歷和觀點,僅供參考。另外,如果里面有技術說的不準確乃至錯誤的地方,還請各位批評指正。
作者:snowdream
來源:知乎
-END-
猜你喜歡(點擊下劃線閱讀)
用單片機控制導彈?
你眼中的嵌入式是什么樣?
為什么很多電器設備都要使用單片機?
??最 后??
?若覺得文章不錯,轉發分享,也是我們繼續更新的動力。
5T資源大放送!包括但不限于:C/C++,Linux,Python,Java,PHP,人工智能,PCB、FPGA、DSP、labview、單片機、等等!
點擊下方卡片,在公眾號內回復「更多資源」,即可免費獲取。
總結
以上是生活随笔為你收集整理的单片机6年想转嵌入式Linux ,不知如何下手?的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 峰米投影2022年发展势头强劲:出货量同
- 下一篇: linux 其他常用命令