文章下方附學(xué)習(xí)資源,自助領(lǐng)取
摘要:BSP,全稱(chēng)Board Support Package,漢語(yǔ)意思即板級(jí)支持包。BSP工程師,顧名思義就是負(fù)責(zé)板級(jí)支持包的開(kāi)發(fā)、調(diào)試和維護(hù)工作。那么什么是板級(jí)支持包呢?什么是BSP工程師呢?如何才能成為一個(gè)優(yōu)秀的的嵌入式BSP?
一、嵌入式系統(tǒng)
要明白什么是嵌入式軟件工程師,我們先從嵌入式系統(tǒng)(嵌入式設(shè)備)說(shuō)起。維基百科上對(duì)嵌入式系統(tǒng)的定義如下:
“
嵌入式系統(tǒng)(Embedded System),是一種嵌入機(jī)械或電氣系統(tǒng)內(nèi)部、具有專(zhuān)一功能和實(shí)時(shí)計(jì)算性能的計(jì)算機(jī)系統(tǒng)。
”
通俗的講,嵌入式系統(tǒng)就是一種具有專(zhuān)一功能的計(jì)算機(jī)系統(tǒng)。我們身邊就有好多嵌入式設(shè)備,常見(jiàn)的比如智能手機(jī),數(shù)碼相機(jī)等消費(fèi)類(lèi)的電子設(shè)備,再比如最近幾年興起的諸如智能音箱、智能電視、掃地機(jī)器人智能家居設(shè)備。當(dāng)然還包括汽車(chē)防抱死系統(tǒng)、各種醫(yī)療成像系統(tǒng)等設(shè)備??傊餍懈鳂I(yè)我們都有可能接觸到它,尤其隨著智能化時(shí)代的到來(lái),很多非智能的設(shè)備也將逐步由嵌入式設(shè)備所替代,典型的如智能門(mén)鎖。
二、嵌入式工程師
隨著嵌入式設(shè)備應(yīng)用越來(lái)越廣泛,相關(guān)人才的需求也越來(lái)越大。那么相關(guān)的人才都有哪些呢?其中最主要的就是嵌入式工程師。嵌入式工程師分為兩種:嵌入式硬件工程師和嵌入式軟件工程師。
- 嵌入式硬件工程師主要職責(zé)是負(fù)責(zé)設(shè)計(jì)嵌入式系統(tǒng)的硬件原理圖,使用相應(yīng)的工具畫(huà)出PCB圖,后期配合嵌入式軟件工程師調(diào)試系統(tǒng)。
- 嵌入式軟件工程師從系統(tǒng)軟件上又可以分為兩種:BSP工程師和嵌入式應(yīng)用軟件工程師。嵌入式應(yīng)用軟件工程師主要是負(fù)責(zé)編寫(xiě)基于嵌入式系統(tǒng)的應(yīng)用軟件。類(lèi)似于基于windows上的QQ, word。由于我本人是做BSP的,因此這里我們著重討論BSP工程師。
嵌入式物聯(lián)網(wǎng)需要學(xué)的東西真的非常多,千萬(wàn)不要學(xué)錯(cuò)了路線和內(nèi)容,導(dǎo)致工資要不上去!
無(wú)償分享大家一個(gè)資料包,差不多150多G。里面學(xué)習(xí)內(nèi)容、面經(jīng)、項(xiàng)目都比較新也比較全!某魚(yú)上買(mǎi)估計(jì)至少要好幾十。
點(diǎn)擊這里找小助理0元領(lǐng)取:嵌入式物聯(lián)網(wǎng)學(xué)習(xí)資料(頭條)
嵌入式工程師分類(lèi)
三、BSP工程師
BSP,全稱(chēng)Board Support Package,漢語(yǔ)意思即板級(jí)支持包。BSP工程師,顧名思義就是負(fù)責(zé)板級(jí)支持包的開(kāi)發(fā)、調(diào)試和維護(hù)工作。那么什么是板級(jí)支持包呢?前面我們講過(guò),嵌入式硬件工程師負(fù)責(zé)設(shè)計(jì)硬件,畫(huà)出PCB圖,工廠會(huì)根據(jù)PCB圖生產(chǎn)出對(duì)應(yīng)的電路板。一個(gè)嵌入式系統(tǒng)光有電路板是不夠的,還要有對(duì)應(yīng)的軟件支持,軟件開(kāi)發(fā)的前提是首先使板子正常穩(wěn)定的工作,然后再在其上編寫(xiě)對(duì)應(yīng)的應(yīng)用軟件以實(shí)現(xiàn)其特有的功能。其中使板子正常穩(wěn)定的工作的代碼就屬于板級(jí)支持包。
那么BSP工程師的具體工作有哪些呢?
我們首先從嵌入式設(shè)備談起,前面我們談到了很多的嵌入式設(shè)備,從系統(tǒng)角度來(lái)講這些設(shè)備有些是跑操作系統(tǒng)的,有些沒(méi)有跑。對(duì)于不跑操作系統(tǒng)的設(shè)備來(lái)講,其功能相對(duì)簡(jiǎn)單一點(diǎn),使用的主控芯片一般也比較簡(jiǎn)單,比如風(fēng)靡一時(shí)的51系列單片機(jī)、stm系列的單片機(jī)。對(duì)于這些簡(jiǎn)單系統(tǒng)來(lái)講,它對(duì)軟件開(kāi)發(fā)人員要求相對(duì)比較低,當(dāng)然也就沒(méi)有我前面所說(shuō)的分工那么詳細(xì),有時(shí)候甚至從畫(huà)板、點(diǎn)亮、開(kāi)發(fā)都是由一個(gè)人來(lái)完成的。對(duì)于跑操作系統(tǒng)來(lái)講的設(shè)備,就不一樣了。一般來(lái)講,跑操作系統(tǒng)的設(shè)備其軟件開(kāi)發(fā)分三個(gè)階段:
1. 點(diǎn)亮板子
第一批板子出廠時(shí)是不包含任何軟件的。BSP工程師需要結(jié)合硬件原理圖修改從芯片廠商拿到的參考代碼,調(diào)試板子,使板子上的操作系統(tǒng)能夠正常穩(wěn)定工作,從而提供一個(gè)穩(wěn)定的開(kāi)發(fā)調(diào)試環(huán)境,這個(gè)過(guò)程叫做點(diǎn)亮板子,行話叫做Bringup。這屬于BSP工程師最具有價(jià)值含量的工作之一,因?yàn)樗鼘?duì)BSP工程師所掌握的知識(shí)的廣度和深度都有一定要求。其中會(huì)涉及到計(jì)算機(jī)原理、操作系統(tǒng),處理器架構(gòu)等,還包括硬件方面的一些知識(shí)。綜合起來(lái)其最核心的工作就是對(duì)內(nèi)核的移植、裁剪。
2. 使能板子上所有設(shè)備
上個(gè)階段中,板子的CPU和基本的器件已經(jīng)能正常工作,這個(gè)階段中將使能所有的外設(shè),并為后面要開(kāi)發(fā)的應(yīng)用程序提供對(duì)應(yīng)的軟件控制接口。這個(gè)過(guò)程的實(shí)質(zhì)是對(duì)應(yīng)的操作系統(tǒng)下驅(qū)動(dòng)開(kāi)發(fā)的過(guò)程,需要掌握硬件工作的原理,操作系統(tǒng)的相關(guān)知識(shí)。
3. 為板子開(kāi)發(fā)應(yīng)用程序
如前文所述,嵌入式系統(tǒng)是一個(gè)具有專(zhuān)一功能的系統(tǒng),其上所有的硬件,軟件都應(yīng)該為這一功能服務(wù)。第二個(gè)階段結(jié)束的時(shí)候,板子上所有的設(shè)備都已經(jīng)可以正常使用了。這個(gè)階段的任務(wù)就是開(kāi)發(fā)應(yīng)用程序來(lái)實(shí)現(xiàn)某種特定的功能,應(yīng)用程序中會(huì)使用第二階段提供的軟件接口控制板子上的設(shè)備來(lái)完成這一功能。
四、BSP工程師應(yīng)具備的能力
上述前兩個(gè)階段屬于BSP開(kāi)發(fā)的內(nèi)容,第三個(gè)階段屬于嵌入式應(yīng)用軟件開(kāi)發(fā)的過(guò)程。綜上所述,BSP工程師主要應(yīng)該具備的能力主要有:
- 掌握計(jì)算機(jī)原理方面的知識(shí);
- 掌握操作系統(tǒng)的相關(guān)知識(shí),深入研究某種操作系統(tǒng),目前來(lái)講,研究linux操作系統(tǒng)應(yīng)該是大部分人的選擇;
- 基本的linux(開(kāi)發(fā)環(huán)境)操作
- 精湛的C語(yǔ)言功底和一定的C /匯編的知識(shí)。
- 掌握一定的硬件和電路原理方面的知識(shí);
- 熟悉常見(jiàn)的接口協(xié)議,如I2C, SPI, UART, USB等。
當(dāng)然作為一個(gè)軟件開(kāi)發(fā)人員也必須掌握一些通用的軟件,比如:
- 代碼管理軟件,常見(jiàn)的如git等;
- 代碼閱讀軟件,這個(gè)就因個(gè)人喜好而不同了,比如:opengrok,source insight,vim下ctags/cscope插件組合等。
簡(jiǎn)單來(lái)講,作為一名嵌入式BSP工程師,既要和懂硬件工作原理,還要能編寫(xiě)對(duì)應(yīng)的軟件使之正常工作。其學(xué)習(xí)和開(kāi)發(fā)難度就不言而喻了。那么,究竟學(xué)習(xí)哪些知識(shí),怎么學(xué)習(xí)才能成為一名合格的嵌入式BSP工程師呢?
簡(jiǎn)單來(lái)講,作為一名嵌入式BSP工程師,既要和懂硬件工作原理,還要能編寫(xiě)對(duì)應(yīng)的軟件使之正常工作。其學(xué)習(xí)和開(kāi)發(fā)難度就不言而喻了。那么,究竟學(xué)習(xí)哪些知識(shí),怎么學(xué)習(xí)才能成為一名合格的嵌入式BSP工程師呢?
五、專(zhuān)業(yè)背景
我們首先從專(zhuān)業(yè)背景談起。經(jīng)過(guò)我的了解,從事嵌入式BSP開(kāi)發(fā)的人員主要來(lái)源于計(jì)算機(jī)專(zhuān)業(yè)和電子信息專(zhuān)業(yè)。這兩個(gè)專(zhuān)業(yè)是和嵌入式BSP最相關(guān)的專(zhuān)業(yè)了。當(dāng)然也有一些同事是從其他專(zhuān)業(yè)轉(zhuǎn)過(guò)來(lái)的(比如我,熟悉我的朋友知道我大學(xué)學(xué)的是物理專(zhuān)業(yè),這相對(duì)來(lái)講是比較偏的一個(gè)專(zhuān)業(yè)了)。
所以,如果你是計(jì)算機(jī)或者電子信息專(zhuān)業(yè)的,你的基礎(chǔ)已經(jīng)足夠好了。因?yàn)榻Y(jié)合上篇文章我們知道,對(duì)于BSP工程師來(lái)講,主要的工作就是使硬件及其上的操作系統(tǒng)穩(wěn)定的工作,所以理解硬件原理、計(jì)算機(jī)原理和操作系統(tǒng)是最基本的要求,而這兩個(gè)專(zhuān)業(yè)都會(huì)學(xué)習(xí)到像模擬電路,數(shù)字電路之類(lèi)的硬件原理基礎(chǔ),計(jì)算機(jī)原理和一門(mén)高級(jí)語(yǔ)言也是這兩個(gè)專(zhuān)業(yè)的必修課,這些已經(jīng)基本構(gòu)成了BSP工程師的必需的知識(shí)面。當(dāng)然,不是這兩個(gè)專(zhuān)業(yè)的同學(xué)也不用灰心喪氣,畢竟大學(xué)里學(xué)的課程大家能掌握到說(shuō)明程度都懂的,所以即便沒(méi)有經(jīng)歷過(guò)系統(tǒng)的學(xué)習(xí),只要興趣足夠,再加上一定的自制力,完全自學(xué)也不是不可能的。
六、推薦書(shū)籍
言歸正傳,我們結(jié)合上篇文章里BSP工程師必備的知識(shí)來(lái)介紹一下如何學(xué)習(xí)。
1. 計(jì)算機(jī)原理
前面我們談到過(guò),跑操作系統(tǒng)的嵌入式系統(tǒng)也屬于典型的計(jì)算機(jī)系統(tǒng),既然我們要把操作系統(tǒng)移植到計(jì)算機(jī)上,那么了解計(jì)算機(jī)運(yùn)行原理的細(xì)節(jié)對(duì)于開(kāi)發(fā)來(lái)講是必不可少的。在處理一些疑難雜癥時(shí),這些知識(shí)尤其能凸顯其作用來(lái)。這里推薦一本計(jì)算機(jī)原理的經(jīng)典書(shū)籍——《Computer Systems: A Programmer’s Perspective》(中文譯作:《深入理解計(jì)算機(jī)系統(tǒng)》),本書(shū)從這本書(shū)從程序員的視角系統(tǒng)的講述了計(jì)算機(jī)程序的存儲(chǔ),運(yùn)行的基本原理,并結(jié)合實(shí)例分析了如何優(yōu)化計(jì)算機(jī)程序,第二部分結(jié)合計(jì)算機(jī)原理引出了操作系統(tǒng)中一些重要的概念,并對(duì)這些概念從程序運(yùn)行的角度做了詳細(xì)的闡述和詮釋。
從2010年至今,個(gè)人已經(jīng)反復(fù)研讀了幾遍,每次重讀依然感覺(jué)有很多收獲。因此,在本博客中,我專(zhuān)門(mén)新建了一個(gè)主題,從一個(gè)“程序員編寫(xiě)出來(lái)的C文件到編譯生成可執(zhí)行文件,最終到程序運(yùn)行的過(guò)程”的角度來(lái)總結(jié)我對(duì)本書(shū)部分知識(shí)的理解和收獲。本書(shū)從出版至今已經(jīng)推出了三版,我自己收藏了第二版英文版和最新版第三版高清掃描的中文電子書(shū)(文件大小501M)。
2. 基本的Linux操作
多數(shù)嵌入式開(kāi)發(fā)都是在Linux操作環(huán)境進(jìn)行開(kāi)發(fā)的,因?yàn)樵谄渖洗嬖诤芏鄡?yōu)秀的開(kāi)源開(kāi)發(fā)工具,可以方便快速的搭建編譯環(huán)境,有很方便的debug工具可供使用。很多同學(xué)可能壓根就沒(méi)有接觸過(guò)Linux系統(tǒng),開(kāi)機(jī)之后一片茫然,甚至連文件都找不知道。這并不是問(wèn)題,畢竟它的設(shè)計(jì)思想和我們熟知的Windows完全不一樣,對(duì)于程序員來(lái)講,當(dāng)你適應(yīng)了Linux系統(tǒng)之后,你可能甚至都不愿意再用回Windows。關(guān)于學(xué)習(xí)Linux基礎(chǔ)操作的書(shū),我推薦《鳥(niǎo)哥的linux私房菜》,里面由淺入深的介紹了Linux系統(tǒng),不僅涉及Linux的基礎(chǔ)操作,還包括如何重裝Linux系統(tǒng),Linux的文件管理,shell腳本等知識(shí),其實(shí)這本書(shū)主要是面向Linux系統(tǒng)管理員的,但是它前面13章的內(nèi)容對(duì)于入門(mén)Linux系統(tǒng)來(lái)講是一個(gè)絕佳之選。
3. C語(yǔ)言基礎(chǔ)
前面我們說(shuō)過(guò)BSP工程師主要是和底層硬件、系統(tǒng)打交道,所以C語(yǔ)言是最主要的編程語(yǔ)言。學(xué)習(xí)C語(yǔ)言,我強(qiáng)烈推薦“C語(yǔ)言之父”Dennis Ritchie的著作——《The C Programming Language》。這本書(shū)僅僅有200多頁(yè),去掉附錄才100多頁(yè),但是字字珠璣,甚至連文中的示例程序都直接是libc庫(kù)里面的函數(shù),比國(guó)內(nèi)某著名C教材里面的計(jì)算器例子不知要經(jīng)典多少倍!
4. Linux操作系統(tǒng)
這里所說(shuō)的Linux系統(tǒng)和上面的Linux操作完全不一回事。上面講的Linux操作指的是你的工作電腦是linux系統(tǒng),你需要在上面下載、修改、編譯和調(diào)試代碼,而這里的Linux系統(tǒng)指的是你的目標(biāo)開(kāi)發(fā)板上跑的Linux系統(tǒng)。如果是BSP工程師,你需要了解系統(tǒng)從硬件上電開(kāi)始,到Linux系統(tǒng)初始化完成,init進(jìn)程起來(lái)的整個(gè)流程,當(dāng)然這個(gè)涉及的知識(shí)非常之多,所以我建議新手從Linux驅(qū)動(dòng)程序開(kāi)始入手。
所謂的驅(qū)動(dòng)程序,簡(jiǎn)單來(lái)講就是Linux系統(tǒng)中的一些模塊,這些模塊有統(tǒng)一的框架,開(kāi)發(fā)人員只需要在其中填入控制對(duì)應(yīng)硬件的C程序代碼就可以了。通過(guò)學(xué)習(xí)Linux驅(qū)動(dòng),逐步了解驅(qū)動(dòng)程序的框架,并發(fā)訪問(wèn)的原理,Linux分離分層的思想,這樣在擴(kuò)展到Linux系統(tǒng)的其他模塊、甚至整個(gè)Linux系統(tǒng)的學(xué)習(xí)時(shí)就非常容易了。對(duì)于Linux設(shè)備驅(qū)動(dòng)的修惡習(xí),我首推《Linux device driver》(中文譯做《Linux設(shè)備驅(qū)動(dòng)》),這本書(shū)大部分例子是取一小段內(nèi)存來(lái)模擬一個(gè)Linux設(shè)備,然后實(shí)現(xiàn)了對(duì)應(yīng)的字符設(shè)備驅(qū)動(dòng),并以此為例闡述了設(shè)備驅(qū)動(dòng)中常見(jiàn)的知識(shí)點(diǎn)。
在掌握了Linux設(shè)備驅(qū)動(dòng)之后,這時(shí)對(duì)Linux操作系統(tǒng)應(yīng)該有一個(gè)初步的認(rèn)識(shí)和輪廓了,后面就應(yīng)該要系統(tǒng)的認(rèn)識(shí)一下Linux了。當(dāng)然,這個(gè)時(shí)候如果你有強(qiáng)大的毅力,那么直接去讀Linux源碼也是一個(gè)選擇。但是,我認(rèn)為更重要的是結(jié)合之前我們從驅(qū)動(dòng)程序中提取出來(lái)的Linux思想,從整體上認(rèn)識(shí)一下Linux系統(tǒng),這就不得不談到又一本經(jīng)典的書(shū)籍了——《Linux Kernel Development》(中文譯做《Linux內(nèi)核設(shè)計(jì)與實(shí)現(xiàn)》),這本書(shū)省略了大量的細(xì)節(jié),通篇很少列舉大段的代碼,而是提綱挈領(lǐng)的闡述了linux設(shè)計(jì)和實(shí)現(xiàn)的原理。
從整體上掌握了原理之后,我們還缺少Linux實(shí)現(xiàn)的具體細(xì)節(jié),《Professional Linux Kernel Architecture》(中文譯做《深入Linux內(nèi)核架構(gòu)》)是一個(gè)不錯(cuò)的選擇,單從頁(yè)數(shù)上就能體現(xiàn)出來(lái)。原版1337頁(yè),中文版1055頁(yè)。
七、閱讀建議
- 在閱讀上述書(shū)籍的時(shí)候,建議務(wù)必坐在電腦前面,書(shū)上提到的任何操作,都照著做一遍,看看是否和書(shū)上的結(jié)果一致,這樣不僅可以深化理解,還可以加深印象。
- 上面的書(shū)籍除了《鳥(niǎo)哥的linux私房菜》之外,基本都是英文書(shū)籍,而且我也給出了中文版,如果有能力,建議大家閱讀原版書(shū)籍,因?yàn)楹芏鄷r(shí)候,中文版并沒(méi)有準(zhǔn)確的翻譯出作者的意思。如果實(shí)在困難,可以閱讀中文版,但建議在遇到疑問(wèn)或者難以理解的時(shí)候,及時(shí)對(duì)照原版書(shū)籍,或許你會(huì)發(fā)現(xiàn)你理解不了并非你的問(wèn)題,而是翻譯的問(wèn)題。
- 上述給出的書(shū)籍都是經(jīng)典的書(shū)籍,如果某些知識(shí)點(diǎn)理解不了,沒(méi)有關(guān)系,先跳過(guò)去,過(guò)段時(shí)間重新再讀,你會(huì)發(fā)現(xiàn)很多問(wèn)題自然而然就明白了。學(xué)習(xí)的過(guò)程也是一個(gè)螺旋上升的過(guò)程,經(jīng)典書(shū)籍需要反復(fù)閱讀咀嚼,才能真正掌握其精髓。
本文來(lái)源于?果果小師弟
本文轉(zhuǎn)載自“???果果小師弟”,如有侵權(quán),請(qǐng)聯(lián)系刪除
原文鏈接:如何成為一個(gè)優(yōu)秀的嵌入式BSP工程師?
版權(quán)聲明:本文來(lái)源網(wǎng)絡(luò),免費(fèi)傳達(dá)知識(shí),版權(quán)歸原作者所有。如涉及作品版權(quán)問(wèn)題,請(qǐng)聯(lián)系我進(jìn)行刪除。
版權(quán)聲明:本文內(nèi)容由互聯(lián)網(wǎng)用戶自發(fā)貢獻(xiàn),該文觀點(diǎn)僅代表作者本人。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如發(fā)現(xiàn)本站有涉嫌抄襲侵權(quán)/違法違規(guī)的內(nèi)容, 請(qǐng)發(fā)送郵件至 舉報(bào),一經(jīng)查實(shí),本站將立刻刪除。