嵌入式系統開發經驗談:Windows CE開發都做些什麼

來源:互聯網
上載者:User
我在部落格的簡歷裡說過我目前在從事基於Windows CE的BSP開發,這方面的文章到現在連一篇都沒寫過,似乎有些說不過去。老闆肯定在犯嘀咕了,這小子不幹正事兒,整天玩什麼外啊掛啊的。接下來,我得整 兩篇。以前我都想把文章寫的跟論文似的,枯吧乾燥,累人累己,以後我就胡亂侃了,一家之言,對不對的湊合著看吧。
Windows CE的文章前面寫過幾篇,看的人不多,可能是因為搞嵌入式系統相比案頭軟體和WEB開發的人少的多,搞基於Windows CE的嵌入式系統的更少。當然更大的可能是我的文章寫得不好,枯燥,太細節化。
進入現在這家公司之前我一直在做Windows平台的案頭軟體開發,什麼後台資料處理、中介軟體、介面,甚至外掛都做過,對嵌入式系統所知甚少,僅有的記憶 是在本科做畢業設計時玩過的一點兒東西:Windows CE 3.0,還有Motorola的什麼PPSM和DragonBall。硬體方面,不要說USB協議分析儀、硬體模擬器、溫濕度實驗箱這些進階玩意兒,我連 邏輯分析儀、脈衝發生器都沒聽說過;軟體方面,Windows CE長什麼樣子基本上沒概念,嵌入式系統開發包含哪些方面也一無所知。記得面試的筆試題中有一道是讓畫出Windows CE的虛擬記憶體布局,我當然不會,就按照自己對XP的理解畫了一個(不過回過頭來看,我當時畫的可是現在新鮮出爐的CE6的記憶體布局啊,哈哈)。更好笑的 是面談的時候老闆介紹工作內容時頻頻提到BSP一詞,我完全不知道是什麼意思,還虛心請教了一把。你看我這個嵌入式白癡稀裡糊塗的就這麼搞起了嵌入式開 發,而且還是嵌入式系統的底層開發。
嵌入式系統開發入門難不難,從案頭軟體開發轉入嵌入式系統開發容不容易?我想這可能是很多案頭軟體開發程式員想問的問題,我當年也深受其擾。人在涉及自己 不熟悉的領域時總是感覺不自信,這個很正常。現在這一步跨過去了,回過頭來再看,發現案頭軟體開發也好,嵌入式系統開發也好,其實並無多大區別。有一種說 法講得好:程式=資料+演算法。在嵌入式系統裡,資料還是那些資料,演算法也還是那些演算法,不同的只是細節。有些人說,搞嵌入式系統,要會數字電路、類比電 路,要學會看原理圖,等等。說實話,這些東西自從大學畢業還給老師後,我到現在也沒學會,沒感覺到有什麼障礙。當然搞懂這些也不是什麼問題,只是我覺得沒 有必要-有專門的硬體工程師負責,何必操這心呢你說是不是。廢話一大堆,我的意思是說,案頭軟體開發和嵌入式系統軟體開發並無太大區別,對於熟手來說互相 轉行很容易。當然,要想做底層開發的話,C/C++熟練是必須的,少數情況下還要懂彙編。老闆可以招一個嵌入式白癡,但肯定不會招C/C++白癡。所幸的 是之前我的C/C++以及彙編能力都還不錯-R/E(逆向工程)搞多了彙編不熟練都不行啊wuhaha。
在我看來,基於Windows CE的嵌入式系統開發(其他的基於通用嵌入式作業系統如VxWorks、Embedded Linux等的軟體開發我想也差不多)可以分成四類。
第一類是應用程式開發。這在Windows CE上幾乎就和案頭Windows沒差別,什麼C runtime/MFC/.NET framework/COM/DCOM/SOCKET/SOAP/SQL/MSMQ全都有,不過好像沒有JRE(Java Runtime Environment),呵呵。所以如果你入了案頭Windows開發的門也就等於入了Windows CE開發的門。
第二類是驅動程式開發。這也容易理解,比如說你們家做網卡的,得給它寫驅動吧。程式設計語言自然是C/C++。Windows CE下的裝置驅動程式和案頭Windows不一樣,不過特簡單,就是普通的運行在使用者態的WIN32 DLL(CE6開始驅動程式也可以運行在核心態)。所以按我說,CE下的裝置驅動程式開發不用入門,你會寫案頭Windows的DLL程式的話CE的驅動 開發就已經入了門。
第三類是CSP(Chipset Support Package)開發。和通用CPU不同的是,嵌入式CPU的晶片上除了CPU核外,一般還會根據CPU的市場定位整合一些外圍電路,比如LCD controller、USB host controller等,所以很多嵌入式CPU如Intel的PXA27x系列其實是SoC(System on Chip)。既然是CPU核加上一些外圍裝置(peripherals),CPU廠商就得為這些外圍裝置提供相應的代碼支援,包括完整的驅動程式或操作原 語集(primitives)。這些代碼集合起來就是CSP。
第四類是BSP開發,就是我目前在做的。BSP全稱叫Board Support Package,Board可以理解成PC的主板。一般來說嵌入式系統的主板都是根據產品需要定製的,比如說可能有定製的鍵盤、某個廠商的LAN chip,802.11b/g chip等等,不一而足。BSP的目標是讓嵌入式作業系統能夠在你自己定製的板子上穩定運行,並支援所有你要的外圍裝置。具體開發又可以分為三塊: boot loader、OAL(OEM Adaptation Layer)和裝置驅動程式的整合。boot loader相當於PC的BIOS加XP的ntldr(NT loader),負責引導作業系統核心。OAL相當於Windows XP的HAL(硬體抽象層),主要任務是初始化硬體、中斷處理和實現OEM特定的IOCTL(比如數位簽章機制)。最後一塊是裝置驅動的整合,注意我這裡 說的是整合不是開發。做BSP開發會接觸到很多類硬體,光CPU的開發人員手冊就有上千頁,我目前為止玩過的外圍裝置不完全統計就有:PCMCIA/CF、 USB(包括OHCI、UHCI、EHCI,前兩個是USB 1.1後一個是USB 2.0)、PS/2、LCD controller、SD/SDIO、Flash memory、802.11b/g、I2C、AC97等等。這些硬體規範隨便哪個都有幾百上千頁的,把這些SPEC統統研究一遍再自己寫driver,那 黃花菜都涼了,沒法做,即使做出來也很難保證有Product Quality。所以一般的做法是驅動程式由專門的外圍裝置廠商提供,BSP開發人員結合具體的板子、參考相關SPEC做一些修改。當然如果你想用FPGA 鼓搗個printer controller,那隻好自己寫驅動了。
相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.