文章下方附學習資源,自助領取
摘要:BSP,全稱Board Support Package,漢語意思即闆級支持包。BSP工程師,顧名思義就是負責闆級支持包的開發、調試和維護工作。那麼什麼是闆級支持包呢?什麼是BSP工程師呢?如何才能成為一個優秀的的嵌入式BSP?
一、嵌入式系統要明白什麼是嵌入式軟件工程師,我們先從嵌入式系統(嵌入式設備)說起。維基百科上對嵌入式系統的定義如下:
“
嵌入式系統(Embedded System),是一種嵌入機械或電氣系統内部、具有專一功能和實時計算性能的計算機系統。
”
通俗的講,嵌入式系統就是一種具有專一功能的計算機系統。我們身邊就有好多嵌入式設備,常見的比如智能手機,數碼相機等消費類的電子設備,再比如最近幾年興起的諸如智能音箱、智能電視、掃地機器人智能家居設備。當然還包括汽車防抱死系統、各種醫療成像系統等設備。總之各行各業我們都有可能接觸到它,尤其随着智能化時代的到來,很多非智能的設備也将逐步由嵌入式設備所替代,典型的如智能門鎖。
二、嵌入式工程師随着嵌入式設備應用越來越廣泛,相關人才的需求也越來越大。那麼相關的人才都有哪些呢?其中最主要的就是嵌入式工程師。嵌入式工程師分為兩種:嵌入式硬件工程師和嵌入式軟件工程師。
- 嵌入式硬件工程師主要職責是負責設計嵌入式系統的硬件原理圖,使用相應的工具畫出PCB圖,後期配合嵌入式軟件工程師調試系統。
- 嵌入式軟件工程師從系統軟件上又可以分為兩種:BSP工程師和嵌入式應用軟件工程師。嵌入式應用軟件工程師主要是負責編寫基于嵌入式系統的應用軟件。類似于基于windows上的QQ, word。由于我本人是做BSP的,因此這裡我們着重讨論BSP工程師。
嵌入式物聯網需要學的東西真的非常多,千萬不要學錯了路線和内容,導緻工資要不上去!
無償分享大家一個資料包,差不多150多G。裡面學習内容、面經、項目都比較新也比較全!某魚上買估計至少要好幾十。
點擊這裡找小助理0元領取:嵌入式物聯網學習資料(頭條)
嵌入式工程師分類
三、BSP工程師BSP,全稱Board Support Package,漢語意思即闆級支持包。BSP工程師,顧名思義就是負責闆級支持包的開發、調試和維護工作。那麼什麼是闆級支持包呢?前面我們講過,嵌入式硬件工程師負責設計硬件,畫出PCB圖,工廠會根據PCB圖生産出對應的電路闆。一個嵌入式系統光有電路闆是不夠的,還要有對應的軟件支持,軟件開發的前提是首先使闆子正常穩定的工作,然後再在其上編寫對應的應用軟件以實現其特有的功能。其中使闆子正常穩定的工作的代碼就屬于闆級支持包。
那麼BSP工程師的具體工作有哪些呢?
我們首先從嵌入式設備談起,前面我們談到了很多的嵌入式設備,從系統角度來講這些設備有些是跑操作系統的,有些沒有跑。對于不跑操作系統的設備來講,其功能相對簡單一點,使用的主控芯片一般也比較簡單,比如風靡一時的51系列單片機、stm系列的單片機。對于這些簡單系統來講,它對軟件開發人員要求相對比較低,當然也就沒有我前面所說的分工那麼詳細,有時候甚至從畫闆、點亮、開發都是由一個人來完成的。對于跑操作系統來講的設備,就不一樣了。一般來講,跑操作系統的設備其軟件開發分三個階段:
1. 點亮闆子第一批闆子出廠時是不包含任何軟件的。BSP工程師需要結合硬件原理圖修改從芯片廠商拿到的參考代碼,調試闆子,使闆子上的操作系統能夠正常穩定工作,從而提供一個穩定的開發調試環境,這個過程叫做點亮闆子,行話叫做Bringup。這屬于BSP工程師最具有價值含量的工作之一,因為它對BSP工程師所掌握的知識的廣度和深度都有一定要求。其中會涉及到計算機原理、操作系統,處理器架構等,還包括硬件方面的一些知識。綜合起來其最核心的工作就是對内核的移植、裁剪。
2. 使能闆子上所有設備上個階段中,闆子的CPU和基本的器件已經能正常工作,這個階段中将使能所有的外設,并為後面要開發的應用程序提供對應的軟件控制接口。這個過程的實質是對應的操作系統下驅動開發的過程,需要掌握硬件工作的原理,操作系統的相關知識。
3. 為闆子開發應用程序如前文所述,嵌入式系統是一個具有專一功能的系統,其上所有的硬件,軟件都應該為這一功能服務。第二個階段結束的時候,闆子上所有的設備都已經可以正常使用了。這個階段的任務就是開發應用程序來實現某種特定的功能,應用程序中會使用第二階段提供的軟件接口控制闆子上的設備來完成這一功能。
四、BSP工程師應具備的能力上述前兩個階段屬于BSP開發的内容,第三個階段屬于嵌入式應用軟件開發的過程。綜上所述,BSP工程師主要應該具備的能力主要有:
- 掌握計算機原理方面的知識;
- 掌握操作系統的相關知識,深入研究某種操作系統,目前來講,研究linux操作系統應該是大部分人的選擇;
- 基本的linux(開發環境)操作
- 精湛的C語言功底和一定的C /彙編的知識。
- 掌握一定的硬件和電路原理方面的知識;
- 熟悉常見的接口協議,如I2C, SPI, UART, USB等。
當然作為一個軟件開發人員也必須掌握一些通用的軟件,比如:
- 代碼管理軟件,常見的如git等;
- 代碼閱讀軟件,這個就因個人喜好而不同了,比如:opengrok,source insight,vim下ctags/cscope插件組合等。
簡單來講,作為一名嵌入式BSP工程師,既要和懂硬件工作原理,還要能編寫對應的軟件使之正常工作。其學習和開發難度就不言而喻了。那麼,究竟學習哪些知識,怎麼學習才能成為一名合格的嵌入式BSP工程師呢?
簡單來講,作為一名嵌入式BSP工程師,既要和懂硬件工作原理,還要能編寫對應的軟件使之正常工作。其學習和開發難度就不言而喻了。那麼,究竟學習哪些知識,怎麼學習才能成為一名合格的嵌入式BSP工程師呢?
五、專業背景我們首先從專業背景談起。經過我的了解,從事嵌入式BSP開發的人員主要來源于計算機專業和電子信息專業。這兩個專業是和嵌入式BSP最相關的專業了。當然也有一些同事是從其他專業轉過來的(比如我,熟悉我的朋友知道我大學學的是物理專業,這相對來講是比較偏的一個專業了)。
所以,如果你是計算機或者電子信息專業的,你的基礎已經足夠好了。因為結合上篇文章我們知道,對于BSP工程師來講,主要的工作就是使硬件及其上的操作系統穩定的工作,所以理解硬件原理、計算機原理和操作系統是最基本的要求,而這兩個專業都會學習到像模拟電路,數字電路之類的硬件原理基礎,計算機原理和一門高級語言也是這兩個專業的必修課,這些已經基本構成了BSP工程師的必需的知識面。當然,不是這兩個專業的同學也不用灰心喪氣,畢竟大學裡學的課程大家能掌握到說明程度都懂的,所以即便沒有經曆過系統的學習,隻要興趣足夠,再加上一定的自制力,完全自學也不是不可能的。
六、推薦書籍言歸正傳,我們結合上篇文章裡BSP工程師必備的知識來介紹一下如何學習。
1. 計算機原理前面我們談到過,跑操作系統的嵌入式系統也屬于典型的計算機系統,既然我們要把操作系統移植到計算機上,那麼了解計算機運行原理的細節對于開發來講是必不可少的。在處理一些疑難雜症時,這些知識尤其能凸顯其作用來。這裡推薦一本計算機原理的經典書籍——《Computer Systems: A Programmer’s Perspective》(中文譯作:《深入理解計算機系統》),本書從這本書從程序員的視角系統的講述了計算機程序的存儲,運行的基本原理,并結合實例分析了如何優化計算機程序,第二部分結合計算機原理引出了操作系統中一些重要的概念,并對這些概念從程序運行的角度做了詳細的闡述和诠釋。
從2010年至今,個人已經反複研讀了幾遍,每次重讀依然感覺有很多收獲。因此,在本博客中,我專門新建了一個主題,從一個“程序員編寫出來的C文件到編譯生成可執行文件,最終到程序運行的過程”的角度來總結我對本書部分知識的理解和收獲。本書從出版至今已經推出了三版,我自己收藏了第二版英文版和最新版第三版高清掃描的中文電子書(文件大小501M)。
2. 基本的Linux操作多數嵌入式開發都是在Linux操作環境進行開發的,因為在其上存在很多優秀的開源開發工具,可以方便快速的搭建編譯環境,有很方便的debug工具可供使用。很多同學可能壓根就沒有接觸過Linux系統,開機之後一片茫然,甚至連文件都找不知道。這并不是問題,畢竟它的設計思想和我們熟知的Windows完全不一樣,對于程序員來講,當你适應了Linux系統之後,你可能甚至都不願意再用回Windows。關于學習Linux基礎操作的書,我推薦《鳥哥的linux私房菜》,裡面由淺入深的介紹了Linux系統,不僅涉及Linux的基礎操作,還包括如何重裝Linux系統,Linux的文件管理,shell腳本等知識,其實這本書主要是面向Linux系統管理員的,但是它前面13章的内容對于入門Linux系統來講是一個絕佳之選。
3. C語言基礎前面我們說過BSP工程師主要是和底層硬件、系統打交道,所以C語言是最主要的編程語言。學習C語言,我強烈推薦“C語言之父”Dennis Ritchie的著作——《The C Programming Language》。這本書僅僅有200多頁,去掉附錄才100多頁,但是字字珠玑,甚至連文中的示例程序都直接是libc庫裡面的函數,比國内某著名C教材裡面的計算器例子不知要經典多少倍!
4. Linux操作系統這裡所說的Linux系統和上面的Linux操作完全不一回事。上面講的Linux操作指的是你的工作電腦是linux系統,你需要在上面下載、修改、編譯和調試代碼,而這裡的Linux系統指的是你的目标開發闆上跑的Linux系統。如果是BSP工程師,你需要了解系統從硬件上電開始,到Linux系統初始化完成,init進程起來的整個流程,當然這個涉及的知識非常之多,所以我建議新手從Linux驅動程序開始入手。
所謂的驅動程序,簡單來講就是Linux系統中的一些模塊,這些模塊有統一的框架,開發人員隻需要在其中填入控制對應硬件的C程序代碼就可以了。通過學習Linux驅動,逐步了解驅動程序的框架,并發訪問的原理,Linux分離分層的思想,這樣在擴展到Linux系統的其他模塊、甚至整個Linux系統的學習時就非常容易了。對于Linux設備驅動的修惡習,我首推《Linux device driver》(中文譯做《Linux設備驅動》),這本書大部分例子是取一小段内存來模拟一個Linux設備,然後實現了對應的字符設備驅動,并以此為例闡述了設備驅動中常見的知識點。
在掌握了Linux設備驅動之後,這時對Linux操作系統應該有一個初步的認識和輪廓了,後面就應該要系統的認識一下Linux了。當然,這個時候如果你有強大的毅力,那麼直接去讀Linux源碼也是一個選擇。但是,我認為更重要的是結合之前我們從驅動程序中提取出來的Linux思想,從整體上認識一下Linux系統,這就不得不談到又一本經典的書籍了——《Linux Kernel Development》(中文譯做《Linux内核設計與實現》),這本書省略了大量的細節,通篇很少列舉大段的代碼,而是提綱挈領的闡述了linux設計和實現的原理。
從整體上掌握了原理之後,我們還缺少Linux實現的具體細節,《Professional Linux Kernel Architecture》(中文譯做《深入Linux内核架構》)是一個不錯的選擇,單從頁數上就能體現出來。原版1337頁,中文版1055頁。
七、閱讀建議
- 在閱讀上述書籍的時候,建議務必坐在電腦前面,書上提到的任何操作,都照着做一遍,看看是否和書上的結果一緻,這樣不僅可以深化理解,還可以加深印象。
- 上面的書籍除了《鳥哥的linux私房菜》之外,基本都是英文書籍,而且我也給出了中文版,如果有能力,建議大家閱讀原版書籍,因為很多時候,中文版并沒有準确的翻譯出作者的意思。如果實在困難,可以閱讀中文版,但建議在遇到疑問或者難以理解的時候,及時對照原版書籍,或許你會發現你理解不了并非你的問題,而是翻譯的問題。
- 上述給出的書籍都是經典的書籍,如果某些知識點理解不了,沒有關系,先跳過去,過段時間重新再讀,你會發現很多問題自然而然就明白了。學習的過程也是一個螺旋上升的過程,經典書籍需要反複閱讀咀嚼,才能真正掌握其精髓。
本文來源于果果小師弟
本文轉載自“果果小師弟”,如有侵權,請聯系删除原文鍊接:如何成為一個優秀的嵌入式BSP工程師?
版權聲明:本文來源網絡,免費傳達知識,版權歸原作者所有。如涉及作品版權問題,請聯系我進行删除。
,更多精彩资讯请关注tft每日頭條,我们将持续为您更新最新资讯!