嵌入式操作系統(tǒng)簡(jiǎn)介
嵌入式操作系統(tǒng)(EmbeddedSystem)是指以應(yīng)用為中心、以計(jì)算機(jī)技術(shù)為基礎(chǔ),軟件硬件可裁剪、適應(yīng)應(yīng)用系統(tǒng)對(duì)功能、可靠性、成本、體積、功耗嚴(yán)格要求的專(zhuān)用計(jì)算機(jī)系統(tǒng)。舉例來(lái)說(shuō),大到油田的集散控制系統(tǒng)和工廠(chǎng)流水線(xiàn),小到家用 VCD 機(jī)或手機(jī),甚至組成普通 PC 終端設(shè)備的鍵盤(pán)、鼠標(biāo)、硬盤(pán)、Modem 等均是由嵌入式處理器控制的。
嵌入式系統(tǒng)無(wú)疑是當(dāng)前最熱門(mén)最有發(fā)展前途的 IT 應(yīng)用領(lǐng)域之一。嵌入式系統(tǒng)用在一些特定專(zhuān)用設(shè)備上,通常這些設(shè)備的硬件資源(如處理器、存儲(chǔ)器等)非常有限,并且對(duì)成本很敏感,有時(shí)對(duì)實(shí)時(shí)響應(yīng)要求很高等。特別是隨著消費(fèi)家電的智能化,嵌入式更顯重要。像我們平常常見(jiàn)到的手機(jī)、PDA、電子字典、可視電話(huà)、VCD/DVD/MP3Player、數(shù)字相機(jī)(DC)、數(shù)字?jǐn)z像機(jī)(DV)、U-Disk、機(jī)頂盒(Set TopBox)、高清電視(HDTV)、游戲機(jī)、智能玩具、交換機(jī)、路由器、數(shù)控設(shè)備或儀表、汽車(chē)電子、家電控制系統(tǒng)、醫(yī)療儀器、航天航空設(shè)備等等都是典型的嵌入式系統(tǒng)。
為什么要學(xué)嵌入式軟件開(kāi)發(fā)?好處是什么?
(1)目前國(guó)內(nèi)外這方面的人都很稀缺。一方面,是因?yàn)檫@一領(lǐng)域入門(mén)門(mén)檻較高,不僅要懂較底層軟件(例如操作系統(tǒng)級(jí)、驅(qū)動(dòng)程序級(jí)軟件),對(duì)軟件專(zhuān)業(yè)水平要求較高(嵌入式系統(tǒng)對(duì)軟件設(shè)計(jì)的時(shí)間和空間效率要求較高),而且必須懂得硬件的工作原理,所以非專(zhuān)業(yè) IT 人員很難切入這一領(lǐng)域;另一方面,是因?yàn)檫@一領(lǐng)域較新,目前發(fā)展太快,很多軟硬件技術(shù)出現(xiàn)時(shí)間不長(zhǎng)或正在出現(xiàn)(如 ARM 處理器、嵌入式操作系統(tǒng)、MPEG 技術(shù)、無(wú)線(xiàn)通信協(xié)議等),掌握這些新技術(shù)的人當(dāng)然很找。嵌入式人才稀缺,身價(jià)自然就高,越有經(jīng)驗(yàn)價(jià)格就越高。其實(shí)嵌入式人才稀少,根本原因可能是大多數(shù)人無(wú)條件接觸,這需要相應(yīng)的嵌入式開(kāi)發(fā)板和軟件,另外需要有經(jīng)驗(yàn)的人進(jìn)行指導(dǎo)開(kāi)發(fā)流程。
(2)與企業(yè)計(jì)算等應(yīng)用軟件不同,嵌入式領(lǐng)域人才的工作強(qiáng)度通常低一些(但收入不低)。搞企業(yè)應(yīng)用軟件的 IT 企業(yè),這個(gè)用戶(hù)的系統(tǒng)搞完了,又得去搞下一個(gè)用戶(hù)的,而且每個(gè)用戶(hù)的需求和完成時(shí)間都得按客戶(hù)要求改變,往往疲于奔命,重復(fù)勞動(dòng)。相比而言,搞嵌入式系統(tǒng)的公司,都有自己的產(chǎn)品計(jì)劃,按自己的節(jié)奏行事。所開(kāi)發(fā)的產(chǎn)品通常是通用的,不會(huì)因客戶(hù)的不同而修改。一個(gè)產(chǎn)品型號(hào)開(kāi)發(fā)完了,往往有較長(zhǎng)一段空閑時(shí)間(或只是對(duì)軟件進(jìn)行一些小修補(bǔ)),有時(shí)間進(jìn)行充電和休整。另外,從事嵌入式軟件的每個(gè)人工作范圍相對(duì)狹窄,所涉及的專(zhuān)業(yè)技術(shù)范圍就是那些(ARM、RTOS、MPEG、802.11 等),時(shí)間長(zhǎng)了這些東西會(huì)越搞越有經(jīng)驗(yàn),賣(mài)賣(mài)老本,幾句指導(dǎo)也夠讓那些初入道者琢磨半年的。若搞應(yīng)用軟件,可能下一個(gè)客戶(hù)要換成一個(gè)完全不同的軟件開(kāi)發(fā)平臺(tái),那就苦了。
(3)哪天若想創(chuàng)業(yè),搞自已的產(chǎn)品,那么嵌入式是一個(gè)不錯(cuò)的主意,這可不像應(yīng)用軟件那樣容易被盜版。土木學(xué)院有一個(gè)叫啟明星的公司開(kāi)發(fā)出一個(gè)好象叫“工程 e”的掌上 PDA(南校區(qū)門(mén)口有廣告),施工技術(shù)人員用該 PDA 可當(dāng)場(chǎng)進(jìn)行土木概預(yù)算和其它土木計(jì)算,據(jù)說(shuō)銷(xiāo)路特好。我認(rèn)識(shí)的某大學(xué)老師,他開(kāi)發(fā)的飯館用的點(diǎn)菜 PDA(WinCE 平臺(tái),可無(wú)線(xiàn)連網(wǎng)和上網(wǎng)),據(jù)他說(shuō)銷(xiāo)路不錯(cuò),飯館點(diǎn)點(diǎn) PDA 讓客戶(hù)點(diǎn)菜,多顯派頭檔次。我記得 00 級(jí) 2+2 班當(dāng)年有一組同學(xué)在學(xué) Windows 程序設(shè)計(jì)課程時(shí)用 VC++設(shè)計(jì)了一個(gè)功能很強(qiáng)的點(diǎn)菜系統(tǒng)做為課程項(xiàng)目,當(dāng)時(shí)真想建議他們將這個(gè)軟件做成 PDA,估計(jì)會(huì)有些銷(xiāo)路(上?;疖?chē)站南廣場(chǎng)的 Macdonald 便使用很漂亮的 PDA 給用戶(hù)點(diǎn)食品,像摸像樣的)。這些 PDA 的硬件設(shè)計(jì)一般都是請(qǐng)其它公司給訂做(這叫“貼牌”:OEM),都是通用的硬件,我們只管設(shè)計(jì)軟件就變成自己的產(chǎn)品了。
八大入門(mén)的知識(shí)點(diǎn)
1、C 語(yǔ)言
嵌入式 Linux 工程師的學(xué)習(xí)需要具備一定的 C 語(yǔ)言基礎(chǔ),C 語(yǔ)言是嵌入式領(lǐng)域最重要也是最主要的編程語(yǔ)言,通過(guò)大量編程實(shí)例重點(diǎn)理解 C 語(yǔ)言的基礎(chǔ)編程以及高級(jí)編程知識(shí)。包括:基本數(shù)據(jù)類(lèi)型、數(shù)組、指針、結(jié)構(gòu)體、鏈表、文件操作、隊(duì)列、棧等。
2、Linux 基礎(chǔ)
Linux 操作系統(tǒng)的概念、安裝方法,詳細(xì)了解 Linux 下的目錄結(jié)構(gòu)、基本命令、編輯器 VI ,編譯器 GCC,調(diào)試器 GDB 和 Make 項(xiàng)目管理工具, Shell Makefile 腳本編寫(xiě)等知識(shí),嵌入式開(kāi)發(fā)環(huán)境的搭建。
3、Linux 系統(tǒng)編程
重點(diǎn)學(xué)習(xí)標(biāo)準(zhǔn) I/O 庫(kù),Linux 多任務(wù)編程中的多進(jìn)程和多線(xiàn)程,以及進(jìn)程間通信(pipe、FIFO、消息隊(duì)列、共享內(nèi)存、signal、信號(hào)量等),同步與互斥對(duì)共享資源訪(fǎng)問(wèn)控制等重要知識(shí),主要提升對(duì) Linux 應(yīng)用開(kāi)發(fā)的理解和代碼調(diào)試的能力。
4、Linux 網(wǎng)絡(luò)編程
計(jì)算機(jī)網(wǎng)絡(luò)在嵌入式 Linux 系統(tǒng)應(yīng)用開(kāi)發(fā)過(guò)程中使用非常廣泛,通過(guò) Linux 網(wǎng)絡(luò)發(fā)展、TCP/IP 協(xié)議、socket 編程、TCP 網(wǎng)絡(luò)編程、UDP 網(wǎng)絡(luò)編程、Web 編程開(kāi)發(fā)等方面入手,全面了解 Linux 網(wǎng)絡(luò)應(yīng)用程序開(kāi)發(fā)。重點(diǎn)學(xué)習(xí)網(wǎng)絡(luò)編程相關(guān) API,熟練掌握 TCP 協(xié)議服務(wù)器的編程方法和并發(fā)服務(wù)器的實(shí)現(xiàn),了解 HTTP 協(xié)議及其實(shí)現(xiàn)方法,熟悉 UDP 廣播、多播的原理及編程方法,掌握混合 C/S 架構(gòu)網(wǎng)絡(luò)通信系統(tǒng)的設(shè)計(jì),熟悉 HTML,Javascript 等 Web 編程技術(shù)及實(shí)現(xiàn)方法。
5、數(shù)據(jù)結(jié)構(gòu)與算法
數(shù)據(jù)結(jié)構(gòu)及算法在嵌入式底層驅(qū)動(dòng)、通信協(xié)議、及各種引擎開(kāi)發(fā)中會(huì)得到大量應(yīng)用,對(duì)其掌握的好壞直接影響程序的效率、簡(jiǎn)潔及健壯性。此階段的學(xué)習(xí)要重點(diǎn)理解數(shù)據(jù)結(jié)構(gòu)與算法的基礎(chǔ)內(nèi)容,包括順序表、鏈表、隊(duì)列、棧、樹(shù)、圖、哈希表、各種查找排序算法等應(yīng)用及其 C 語(yǔ)言實(shí)現(xiàn)過(guò)程。
6、C++ 、QT
C++是 Linux 應(yīng)用開(kāi)發(fā)主要語(yǔ)言之一,本階段重點(diǎn)掌握面向?qū)ο缶幊痰幕舅枷胍约?C++的重要內(nèi)容。圖形界面編程是嵌入式開(kāi)發(fā)中非常重要的一個(gè)環(huán)節(jié)。由于 QT 具有跨平臺(tái)、面向?qū)ο?、豐富 API、支持 2D/3D 渲染、支持 XML、多國(guó)語(yǔ)等強(qiáng)大功能,在嵌入式領(lǐng)域的 GUI 開(kāi)發(fā)中得到了廣范的應(yīng)用,在本階段通過(guò)基于 QT 圖形庫(kù)的學(xué)習(xí)使學(xué)員可以熟練編寫(xiě) GUI 程序,并移植 QT 應(yīng)用程序到 Cortex-A8 平臺(tái)。包括 IDE 使用、QT 部件及布局管理器、信息與槽機(jī)制的應(yīng)用、鼠標(biāo)、鍵盤(pán)及繪圖事件處理及文件處理的應(yīng)用。
7、Cortex A8 、Linux 平臺(tái)開(kāi)發(fā)
通過(guò)基于 ARM Cortex-A8 處理 s5pv210 了解芯片手冊(cè)的基本閱讀技巧,掌握 s5pv210 系統(tǒng)資源、時(shí)鐘控制器、電源管理、異常中斷控制器、nand flash 控制器等模塊,為底層平臺(tái)搭建做好準(zhǔn)備。Linux 平臺(tái)包括內(nèi)核裁減、內(nèi)核移植、交叉編譯、GNU 工具使用、內(nèi)核調(diào)試、Bootloader 介紹、制作與原理分析、根文件系統(tǒng)制作以及向內(nèi)核中添加自己的模塊,并在 s5pv210 實(shí)驗(yàn)平臺(tái)上運(yùn)行自己制作的 Linux 系統(tǒng),集成部署 Linux 系統(tǒng)整個(gè)流程。同時(shí)了解 Android 操作系統(tǒng)開(kāi)發(fā)流程。Android 系統(tǒng)是基于 Linux 平臺(tái)的開(kāi)源操作系統(tǒng),該平臺(tái)由操作系統(tǒng)、中間件、用戶(hù)界面和應(yīng)用軟件組成,是首個(gè)為移動(dòng)終端打造的真正開(kāi)放和完整的移動(dòng)軟件,目前它的應(yīng)用不再局限于移動(dòng)終端,還包括數(shù)據(jù)電視、機(jī)頂盒、PDA 等消費(fèi)類(lèi)電子產(chǎn)品。
8、驅(qū)動(dòng)開(kāi)發(fā)
驅(qū)動(dòng)程序設(shè)計(jì)是嵌入式 Linux 開(kāi)發(fā)工作中重要的一部分,也是比較困難的一部分。本階段的學(xué)習(xí)要熟悉 Linux 的內(nèi)核機(jī)制、驅(qū)動(dòng)程序與用戶(hù)級(jí)應(yīng)用程序的接口,掌握系統(tǒng)對(duì)設(shè)備的并發(fā)操作。熟悉所開(kāi)發(fā)硬件的工作原理,具備 ARM 硬件接口的基礎(chǔ)知識(shí),熟悉 ARM Cortex-A8 處理器 s5pv210 各資源、掌握 Linux 設(shè)備驅(qū)動(dòng)原理框架,熟悉工程中常見(jiàn) Linux 高級(jí)字符設(shè)備、塊設(shè)備、網(wǎng)絡(luò)設(shè)備、USB 設(shè)備等驅(qū)動(dòng)開(kāi)發(fā),在工作中能獨(dú)立勝任底層驅(qū)動(dòng)開(kāi)發(fā)。
十大課本上學(xué)不到的妙招
1、離開(kāi)舒適圈
雖然當(dāng)了多年的工程師、但自認(rèn)是系統(tǒng)與軟件技術(shù)“通才”的 DSP 與嵌入式軟件開(kāi)發(fā)顧問(wèn)公司 Jetperch 創(chuàng)辦人 MattLiberty 建議,不斷更新并提升原本擅長(zhǎng)的技術(shù)雖然很重要,但嵌入式工程師若能擴(kuò)展自己的知識(shí)領(lǐng)域會(huì)更有益。走出舒適圈,挑戰(zhàn)自我、去學(xué)習(xí)原本不熟悉的東西,包括工程以外的知識(shí),例如與客戶(hù)、同事之間的互動(dòng),將會(huì)收獲良多。
2、學(xué)習(xí)利用搜索引擎
當(dāng)了多年工程師、自認(rèn)是“看得懂系統(tǒng)架構(gòu)的軟件人”的 PTRGroup 首席科學(xué)家 MichaelAnderson 認(rèn)為,不要閉門(mén)造車(chē),要善用開(kāi)放源碼世界的信息,很多常見(jiàn)的設(shè)計(jì)問(wèn)題其實(shí)透過(guò)因特網(wǎng)就能找到同領(lǐng)域菁英貢獻(xiàn)的程序代碼;嵌入式工程師們要走出自己的小世界擁抱社群,與同領(lǐng)域的其他工程師們相互交流、互相幫助,而這也是開(kāi)放源碼世界的精神。
3、學(xué)習(xí)那些讓因特網(wǎng)實(shí)現(xiàn)的技術(shù)
具備多年嵌入式工程師經(jīng)驗(yàn)的獨(dú)立產(chǎn)品設(shè)計(jì)與顧問(wèn)公司 AuriumTechnologies 總經(jīng)理 KenWada 認(rèn)為,多數(shù)嵌入式領(lǐng)域工程師都知道如何撰寫(xiě) C 或 C++語(yǔ)言程序,但有時(shí)候這樣的技能是不夠的;他建議嵌入式工程師學(xué)習(xí)因特網(wǎng)有關(guān)的技術(shù),對(duì)職業(yè)生涯發(fā)展會(huì)有加分效果,例如他目前負(fù)責(zé)的幾個(gè)開(kāi)發(fā)案,都是在嵌入式系統(tǒng)中嵌入虛擬(virtual)的 XML,好讓一些小型連網(wǎng)設(shè)備能具備“即插即用”的運(yùn)作模式。
4、熟悉實(shí)時(shí)操作系統(tǒng)(RTOS)
在工程人才招募機(jī)構(gòu) RandstadTechnologies 負(fù)責(zé)嵌入式產(chǎn)業(yè)領(lǐng)域的解決方案經(jīng)理 HenryWintz 表示,目前產(chǎn)業(yè)界對(duì)于熟悉 RTOS 的工程師需求很高,也愿意提供更高的薪資水平;因此他鼓勵(lì)沒(méi)有接觸過(guò) RTOS 的嵌入式工程師從一些較小型的系統(tǒng)著手,累積相關(guān)技術(shù)經(jīng)驗(yàn)。此外他也發(fā)現(xiàn)產(chǎn)業(yè)界對(duì)嵌入式 Linux 人才有不少需求,主要是因?yàn)檫@種操作系統(tǒng)具備較大的設(shè)計(jì)彈性。
5、了解最新的處理器
有超過(guò)多年嵌入式軟件工程師經(jīng)驗(yàn)的 Embedded.fm 工程師 EleciaWhite 表示,除了要深入了解 C 或 C++等基本程序語(yǔ)言,有時(shí)也要認(rèn)識(shí)一些熱門(mén)的新程序語(yǔ)言以因應(yīng)特殊設(shè)計(jì)需求,但更重要的是了解最新的處理器技術(shù);處理器才是嵌入式系統(tǒng)的本質(zhì)。因?yàn)槲覀兊南到y(tǒng)資源有限,我們需要了解可用的資源有哪些。
6、培養(yǎng)多元化技能與系統(tǒng)觀(guān)
擔(dān)任近多年工程師、具備許多不同領(lǐng)域技術(shù)經(jīng)驗(yàn)的技術(shù)顧問(wèn)公司 Rebelbot 顧問(wèn) JenCostillo 建議,原本從事較小型系統(tǒng)架構(gòu)(例如 MCU)開(kāi)發(fā)的工程師,可以開(kāi)始去熟悉更大的系統(tǒng)(例如 Linux 驅(qū)動(dòng)程序),反之亦然。嘗試著去開(kāi)發(fā)手機(jī)應(yīng)用程序、或者是學(xué)習(xí)后端服務(wù)器的相關(guān)技術(shù),能讓你開(kāi)啟完全不同的觀(guān)點(diǎn);他并建議工程師去熟悉開(kāi)放性硬件,現(xiàn)在市面上有不少現(xiàn)成的開(kāi)發(fā)板,能讓工程師專(zhuān)注于學(xué)習(xí)獨(dú)特算法的開(kāi)發(fā)。
7、要能熟悉開(kāi)放源碼軟件
擁有多年工程師經(jīng)驗(yàn)的 FreescaleSemiconductor 數(shù)字網(wǎng)絡(luò)全球軟件開(kāi)發(fā)部門(mén)總監(jiān) RobOshana 表示,客戶(hù)往往會(huì)要求在系統(tǒng)中整合一大堆軟件,因此所有的嵌入式工程師需要熟悉各種軟件;他建議工程師避免只專(zhuān)長(zhǎng)單一領(lǐng)域,因?yàn)槟强赡軙?huì)阻礙你的成長(zhǎng)。對(duì)嵌入式工程師來(lái)說(shuō),確保自己對(duì)軟硬件技術(shù)都很了解,是非常寶貴的價(jià)值。
8、建立系統(tǒng)級(jí)的工程思維
自詡為高信賴(lài)度嵌入式系統(tǒng)專(zhuān)家、擔(dān)任了多年工程師的 E2V 電子系統(tǒng)總工程師 AdamTaylor 認(rèn)為,嵌入式工程師擁有系統(tǒng)導(dǎo)向的思維是很重要的,有不少開(kāi)發(fā)案遇到問(wèn)題,就是因?yàn)闆](méi)有在開(kāi)發(fā)初期充分考慮基準(zhǔn)、驗(yàn)證策略以及兼容性驗(yàn)證計(jì)劃等項(xiàng)目;此外每個(gè)嵌入式工程師都應(yīng)該具備優(yōu)良的項(xiàng)目管理技巧,力求準(zhǔn)時(shí)完成負(fù)責(zé)的項(xiàng)目。具備能明智因應(yīng)技術(shù)與項(xiàng)目風(fēng)險(xiǎn)的能力,對(duì)職業(yè)生涯發(fā)展會(huì)很有幫助。
9、學(xué)習(xí)無(wú)線(xiàn)連結(jié)技術(shù)
自認(rèn)是低階嵌入式工程師、有多年工作經(jīng)驗(yàn)的 iRobot 資深首席軟件工程師 ChrisSvec 建議,嵌入式工程師需要在接下來(lái) 1~3 年學(xué)習(xí)無(wú)線(xiàn)連結(jié)技術(shù),特別是 Wi-Fi 與藍(lán)牙低功耗(BLE);因?yàn)楝F(xiàn)在的嵌入式設(shè)備(至少各種消費(fèi)性電子都是)與使用者智能手機(jī)連結(jié)的主要(或唯一)方式,就是透過(guò)這些無(wú)線(xiàn)技術(shù),雖然 Wi-Fi 與 BLE 不一定會(huì)是嵌入式系統(tǒng)的標(biāo)準(zhǔn)配備,但熟悉這些技術(shù)對(duì)嵌入式工程師來(lái)說(shuō)會(huì)很實(shí)用。
10、要能明確表達(dá)自己的想法與意見(jiàn)透過(guò)文字或繪圖
Micrum 總裁 JeanLaBrosse 認(rèn)為,無(wú)論是哪一種工程師,都需要能有效表達(dá)自己的想法與意見(jiàn);往往有些菜鳥(niǎo)工程師無(wú)法清晰表達(dá)自己的想法,因?yàn)樽ゲ坏街攸c(diǎn),而最好的解決方法是練習(xí)將之圖形化,例如畫(huà)出流程圖。這聽(tīng)起來(lái)好像有點(diǎn)過(guò)時(shí),但有時(shí)利用各種圖框組合來(lái)整理自己的思緒、表達(dá)想法會(huì)是很有用的,例如 iPad 的 iThoughts 應(yīng)用程序。
審核編輯 黃昊宇
-
嵌入式開(kāi)發(fā)
+關(guān)注
關(guān)注
18文章
1030瀏覽量
47594
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論