嵌入式軟體工程師雜談之一 ----- BSP工程師

在徵得作者同意的情況下,本網站的作品允許非盈利性引用,並請註明出處:「作者:luomuxiaoxiao 轉載自:www.luomuxiaoxiao.com"字樣,以尊重作者的勞動成果。版權歸原作者所有。未經允許,嚴禁轉載。


  • 嵌入式系統
  • 嵌入式工程師
  • BSP工程師
    • 1. 點亮板子
    • 2. 使能板子上所有設備
    • 3. 為板子開發應用程序
  • BSP工程師應具備的能力

嵌入式系統

要明白什麼是嵌入式軟體工程師,我們先從嵌入式系統(嵌入式設備)說起。維基百科上對嵌入式系統的定義如下:

嵌入式系統(Embedded System),是一種嵌入機械或電氣系統內部、具有專一功能和實時計算性能的計算機系統。

通俗的講,嵌入式系統就是一種具有專一功能的計算機系統。我們身邊就有好多嵌入式設備,常見的比如智能手機,數碼相機等消費類的電子設備,再比如最近幾年興起的諸如智能音箱、智能電視、掃地機器人智能家居設備。當然還包括汽車防抱死系統、各種醫療成像系統等設備。總之各行各業我們都有可能接觸到它,尤其隨著智能化時代的到來,很多非智能的設備也將逐步由嵌入式設備所替代,典型的如智能門鎖。

嵌入式工程師

隨著嵌入式設備應用越來越廣泛,相關人才的需求也越來越大。那麼相關的人才都有哪些呢?其中最主要的就是嵌入式工程師。嵌入式工程師分為兩種:嵌入式硬體工程師嵌入式軟體工程師

  • 嵌入式硬體工程師主要職責是負責設計嵌入式系統的硬體原理圖,使用相應的工具畫出PCB圖,後期配合嵌入式軟體工程師調試系統。
  • 嵌入式軟體工程師從系統軟體上又可以分為兩種:BSP工程師嵌入式應用軟體工程師。嵌入式應用軟體工程師主要是負責編寫基於嵌入式系統的應用軟體。類似於基於windows上的QQ, word。由於我本人是做BSP的,因此這裡我們著重討論BSP工程師。

BSP工程師

BSP,全稱Board Support Package,漢語意思即板級支持包BSP工程師,顧名思義就是負責板級支持包的開發、調試和維護工作。那麼什麼是板級支持包呢?前面我們講過,嵌入式硬體工程師負責設計硬體,畫出PCB圖,工廠會根據PCB圖生產出對應的電路板。一個嵌入式系統光有電路板是不夠的,還要有對應的軟體支持,軟體開發的前提是首先使板子正常穩定的工作,然後再在其上編寫對應的應用軟體以實現其特有的功能。其中使板子正常穩定的工作的代碼就屬於板級支持包。 那麼BSP工程師的具體工作有哪些呢?

我們首先從嵌入式設備談起,前面我們談到了很多的嵌入式設備,從系統角度來講這些設備有些是跑操作系統的,有些沒有跑。對於不跑操作系統的設備來講,其功能相對簡單一點,使用的主控晶元一般也比較簡單,比如風靡一時的51系列單片機、stm系列的單片機。對於這些簡單系統來講,它對軟體開發人員要求相對比較低,當然也就沒有我前面所說的分工那麼詳細,有時候甚至從畫板、點亮、開發都是由一個人來完成的。對於跑操作系統來講的設備,就不一樣了。一般來講,跑操作系統的設備其軟體開發分三個階段:

1. 點亮板子

第一批板子出廠時是不包含任何軟體的。BSP工程師需要結合硬體原理圖修改從晶元廠商拿到的參考代碼,調試板子,使板子上的操作系統能夠正常穩定工作,從而提供一個穩定的開發調試環境,這個過程叫做點亮板子,行話叫做Bringup。這屬於BSP工程師最具有價值含量的工作之一,因為它對BSP工程師所掌握的知識的廣度和深度都有一定要求。其中會涉及到計算機原理、操作系統,處理器架構等,還包括硬體方面的一些知識。綜合起來其最核心的工作就是對內核的移植、裁剪。

2. 使能板子上所有設備

上個階段中,板子的CPU和基本的器件已經能正常工作,這個階段中將使能所有的外設,並為後面要開發的應用程序提供對應的軟體控制介面。這個過程的實質是對應的操作系統下驅動開發的過程,需要掌握硬體工作的原理,操作系統的相關知識。

3. 為板子開發應用程序

如前文所述,嵌入式系統是一個具有專一功能的系統,其上所有的硬體,軟體都應該為這一功能服務。第二個階段結束的時候,板子上所有的設備都已經可以正常使用了。這個階段的任務就是開發應用程序來實現某種特定的功能,應用程序中會使用第二階段提供的軟體介面控制板子上的設備來完成這一功能。

BSP工程師應具備的能力

上述前兩個階段屬於BSP開發的內容,第三個階段屬於嵌入式應用軟體開發的過程。綜上所述,BSP工程師主要應該具備的能力主要有:

  • 掌握計算機原理方面的知識;
  • 掌握操作系統的相關知識,深入研究某種操作系統,目前來講,研究linux操作系統應該是大部分人的選擇;
  • 精湛的C語言功底和一定的C++/彙編的知識。
  • 掌握一定的硬體和電路原理方面的知識;
  • 熟悉常見的介面協議,如I2C, SPI, UART, USB等。

當然作為一個軟體開發人員也必須掌握一些通用的軟體,比如:

  • 代碼管理軟體,常見的如git等;
  • 代碼閱讀軟體,這個就因個人喜好而不同了,比如:opengrok,source insight,vim下ctags/cscope插件組合等。

後續在博客中,我會逐步詳細的介紹上述知識的學習方法,並推出一些BSP工程師入門的博客,大家有什麼需要,也請在我的博客下留言告訴我。

繼續查看本篇文章姊妹篇:嵌入式軟體工程師雜談之二 —– BSP工程師學習路線

如果你覺得有收穫,請點擊左下角的贊,你的支持是我繼續寫的動力!謝謝!


想第一時間查看我的文章嗎?請關注我的微信公眾號號,搜索「落木蕭蕭技術論壇」或登陸我的個人博客:www.luomuxiaoxiao.com,更多精彩文章等你。

weixin.qq.com/r/8y_-p2z (二維碼自動識別)


推薦閱讀:

TAG:嵌入式系統 | 嵌入式開發 | 嵌入式軟體開發 |