Linux嵌入式工程師養成手冊-----前言

爲什麼會有這些博客

自己現在已經要進入大三下學期,很快就會面臨秋招,自己從進入大學開始就從事嵌入式相關的開發,從arduino到STM32再到ARM+Linux開發,自己接觸了不少的東西,寫這些博客一個是爲了對自己以往的知識進行一個總結,再一個也是希望可以給入門嵌入式的各位同學們提供一些幫助,都是從無到有,從看別人的到寫自己的也是一個分享的過程。
可能大家覺得總結並不是特別的重要,但是我想說把知識組成體系是十分必要且有益的,尤其對於嵌入式來說,我可以小聲的說一句,嵌入式涉及的東西確實多而雜,你接觸許多方面的知識,從硬件到軟件,從驅動到網絡,從彙編到面向對象,從裸機到操作系統,很多知識如果不加以組織,不把他們變成體系,看了就忘基本是學習的常態。

嵌入式需要什麼

崗位分類

首先來說嵌入式是一個比較寬泛的概念,大體來說面向應屆生的崗位可以分爲幾種:嵌入式硬件、單片機開發(裸機)、嵌入式驅動(Linux)、RTOS嵌入式開發、Linux嵌入式開發

  • 嵌入式硬件
    這個其實和硬件工程師差不多,需要有原理圖、PCB繪製、高速接口走線優化、電路板排錯的能力,這個的話更偏重於硬件、接口方面的知識,偏向於底層
  • 單片機開發(裸機)
    單片機裸機開發也是有很大的市場的,相信我們每一個搞嵌入式的都接觸過單片機,但是裸機開發並沒有那麼簡單,一般是前後臺系統或者使用狀態機進行調度,所做的工作和產品的用途以及定位緊密結合。
  • 嵌入式驅動(Linux)
    嵌入式驅動主要是來搭建一個系統到硬件的橋樑,多爲Linux的驅動開發,Linux經過20多年的發展已經形成的較爲成熟的驅動框架和開發的流程,不過這個工作大部分會在IC原廠完成,大部分的專注做產品的公司對於驅動的要求是可以跑起來或者對底層驅動進行一定的優化和封裝,而在IC原廠或者有底層開發需求的大企業則會有較多的驅動工程師需求,要成爲較爲優秀的驅動工程師不僅要可以在框架下完成驅動的編寫,更重要的是要對內核有一定的瞭解,瞭解內核的機制,還要掌握接口和硬件的知識,可以完成與硬件工程師的溝通與聯調
  • RTOS嵌入式開發
    很多產品裸機不能實現他的需求上Linux又會拉高成本,或者對實時性有較高的要求,比如物聯網設備、飛控等等,這樣的產品會使用RTOS系統進行開發,常見的包括開源的FreeRTOS、資料最豐富的但是商用收費的UCOS、國內地開源新星Rt-Thread、華爲的Lite OS等等。對於RTOS嵌入式開發需要對一款甚至多款RTOS有使用的經驗,最好可以對內部的重要機制有過研究(進程管理、中斷處理、同步管理等),同時也要了解一些協議棧庫的使用(LWIP、MQTT等),少數崗位也要求對UI界面的開發有了解(Emwin、柿餅等)
  • Linux嵌入式開發
    Linux嵌入式開發一般是在Linux操作系統下做一些應用層的開發工作,以C語言爲主,有的也需要C++,跑Linux的產品一般是有音視頻處理需求、較高的網絡需求、圖形界面的開發需求中的一個或多個,所以對Linux系統編程尤其是多線程編程和網絡編程的要求較高,如果是做圖形界面的話也會要求有QT的開發經驗,當然現在好多的企業也在用Android來做圖形界面,但是我瞭解到的Android底層開發還是難度較高的,需要有Linux底層爲基礎再有Android框架的加持,應屆生做這個的不是太多

這上面列出來的五個方向當然不是每一個都要做好,多而不精是沒有意義的,應當選定一兩個進行深入的學習,對我來說我目前深耕的領域是Linux的驅動開發,但是隻做驅動的話路子比較窄,所以也在學習Linux嵌入式開發的內容,努力成爲一個Linux平臺從底層驅動到上層應用都能遊刃有餘的高級工程師(路漫漫)

招聘需求(所需技術棧)

如果你學習一個技能或者方向是爲了找一份相關的工作的話,那麼看一看招聘信息你就可以大致瞭解到你需要學會什麼

  • 嵌入式驅動(Linux)
    在這裏插入圖片描述
    在這裏插入圖片描述
    在這裏插入圖片描述
  • Linux嵌入式開發
    在這裏插入圖片描述
    在這裏插入圖片描述
    看了以上的圖片我們可以做一個總結
    驅動工程師需要的技能的包括:熟練的C語言使用、對操作系統的原理有較深的認識、Linux的常用外設的驅動框架、uboot+kernel+rootfs+第三方庫移植流程、對Linux內核有一定的深入瞭解、能讀懂硬件原理圖
    Linux嵌入式開發工程師在招聘需求上寫的比較籠統,但我們依舊能歸納出一些來:熟練的C語言使用且最好會用C++、數據結構、Linux系統編程、要對計算機網絡和操作系統這兩個部分基礎知識有了解
    接下來我們將對每一塊知識做一個分解畫一個思維導圖出來

技能分解及思維導圖

我們可以從底層當上層將Linux嵌入式工程師所需的技能進行分解。
注意: 因爲很多知識並不能簡單直接分開,這隻能算是我個人的理解,如果有不同的意見也歡迎指出

  • 基礎
    這個基礎是獨立於底層、驅動、系統、應用的,而是作爲一個軟件相關的從業者應當掌握的基礎知識。包括:C語言(儘可能的熟悉)、數據結構(鏈表、隊列、棧、二叉樹等(對圖的需求較少))、算法(遞歸、排序、二分查找、搜索、哈希算法等)、操作系統的基礎知識、計算機網絡的基礎知識
  • 底層
    底層這裏涉及的就是一些電路相關的知識,比如如何去讀原理圖(簡單的比如三極管的驅動電路)、以及某些外設接口的電路特性(IIC接口上拉),這部分的要求其實是比較少的
  • 驅動
    這部分對於驅動工程師來說是核心的內容,包含字符驅動框架、Platform設備驅動、IIC總線驅動、SPI設備驅動、GPIO和Pinctrl子系統、塊設備驅動、Input子系統、Framebuffer子系統、驅動中的中斷處理、驅動中的同步機制等,更加重要的是不僅僅要會改代碼,而且要體會Linux內核驅動的框架與機制,從而可以通過學習幾個子系統來舉一反三
  • 系統
    我這裏的系統並不僅僅指Linux而是指整個嵌入式系統層面的技術,這裏首先包含uboot、Linux內核、rootfs的裁剪與移植,這個其實想要做到熟練是需要大量的項目經驗的,我們也不需要去深入代碼層次的理解,而是要體會系統啓動的整個流程,熟知每個部分的作用,並能進行移植操作。
    還有一個就是對Linux內核的理解了,內核是特別深的,作爲應屆生想要有較深的理解其實是很難的,但是我們要儘自己所能的去了解和學習,對內核的學習我很贊成宋寶華老師的觀點,先要有總體的認識然後在逐漸的深入,最後對每一塊進行逐個的攻破
  • 應用
    應用層面主要包含:Linux系統編程(尤其是網絡和多線程部分)、C++及面向對象的內容、QT開發

簡單的思維導圖如下
在這裏插入圖片描述
在接下來的博客中我爭取對各個部分的知識進行一個總結,當然如果以前有寫過不錯的總結博客我就不會再寫了,而是把以前博客的鏈接貼出來

發佈了123 篇原創文章 · 獲贊 616 · 訪問量 35萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章