天天看點

嵌入式職業規劃

嵌入式職業規劃

(大部分内容轉載,自己總結)

一、嵌入式系統的概念 着重了解“嵌入”的概念

    主要從三個方面上來了解。   

      1、從硬體上,将基于CPU的處圍器件,整合到CPU晶片内部,比如早期基于X86體系結構下的計算機,CPU隻是有運算器和累加器的功能,一切晶片要造外部橋路來擴充實作,象序列槽之類的都是靠外部的16C550/2的序列槽控制器晶片實作,而目前的這種序列槽控制器晶片早已內建到CPU内部,還有PC機有顯示卡,而多數嵌入式處理器都帶有LCD控制器,但其種意義上就相當于顯示卡。比較高端的ARM類Intel Xscale架構下的IXP網絡處理器CPU内部內建PCI控制器(可配成支援4個PCI從裝置或配成自身為CPI從裝置);還內建3個NPE網絡處理器引擎,其中兩個對應于兩個MAC位址,可用于網關交換用,而另外一個NPE網絡處理器引擎支援DSL,隻要外面再加個PHY晶片即可以實作DSL上網功能。IXP系列最高主頻可以達到1.8G,支援2G記憶體,1G×10或10G×1的以太網口或Febre channel的光通道。IXP系列應該是目标基于ARM體系統結構下由intel進行整合後成Xscale核心的最高的處理器了。

     2、從軟體上前,就是在定制作業系統核心裡将應用一并選入,編譯後将核心下載下傳到ROM中。而在定制作業系統核心時所選擇的應用程式元件就是完成了軟體的“嵌入”,比如WinCE在核心定制時,會有相應選擇,其中就是Wordpad,PDF,MediaPlay等等選擇,如果我們選擇了,在CE啟動後,就可以在界面中找到這些東西,如果是以前PC上将的windows作業系統,多半的東西都需要我們得新再裝。    

       3、把軟體核心或應用檔案系統等東西燒到嵌入式系統硬體平台中的ROM中就實作了一個真正的“嵌入”。

     以上的定義是我在6、7年前給嵌入式系統下自話側重于了解型的定義,書上的定義也有很多,但在這個領域範圍内,誰都不敢說自己的定義是十分确切的,包括那些專家學者們,曆為畢竟嵌入式系統是計算機範疇下的一門綜合性學科

二、嵌入式系統的分層與專業的分類。

             嵌入式系統分為4層,硬體層、驅動層、作業系統層和應用層。

  1、硬體層,是整個嵌入式系統的根本,如果現在單片機及接口這塊很熟悉,并且能用C和彙編語言來程式設計的話,從嵌入式系統的硬體層走起來相對容易,硬體層也是驅動層的基礎,一個優秀的驅動工程師是要能夠看懂硬體的電路圖和自行完成CPLD的邏輯設計的,同時還要對作業系統核心及其排程性相當的熟悉的。但硬體平台是基礎,增值還要靠軟體。 硬體層比較适合于,電子、通信、自動化、機電一體、資訊工程類專業的人來搞,需要掌握的專業基礎知識有,單片機原理及接口技術、微機原理及接口技術、C語言。

  2、驅動層,這部分比較難,驅動工程師不僅要能看懂電路圖還要能對作業系統核心十分的精通,以便其所寫的驅動程式在系統調用時,不會獨占作業系統時間片,而導至其它任務不能動行,不懂作業系統核心架構和實時排程性,沒有良好的驅動編寫風格,按大多數書上所說添加的驅動的方式,很多人都能做到,但可能連個初級的驅動工程師的水準都達不到,這樣所寫的驅動在應用調用時就如同windows下我們打開一個程式運作後,再打開一個程式時,要不就是中斷以前的程式,要不就是等上一會才能運作後來打開的程式。想做個好的驅動人員沒有三、四年功底,作業系統核心不研究上幾編,不是太容易成功的,但其工資在嵌入式系統四層中可是最高的。驅動層比較适合于電子、通信、自動化、機電一體、資訊工程類專業尤其是計算機偏體系結構類專業的人來搞,除硬體層所具備的基礎學科外,還要對資料結構與算法、作業系統原理、編譯原理都要十分精通了解。

    3、作業系統層,對于作業系統層目前可能隻能說是簡單的移植,而很少有人來自已寫作業系統,或者寫出缺胳膊少腿的作業系統來,這部分工作大都由驅動工程師來完成。作業系統是負責系統任務的調試、磁盤和檔案的管理,而嵌入式系統的實時性十分重要。據說,XP作業系統是微軟投入300人用兩年時間才搞定的,總時工時是600人年,中科院軟體所自己的女娲Hopen作業系統估計也得花遇幾百人年才能搞定。是以這部分工作相對來講沒有太大意義。

    4、應用層,相對來講較為容易的,如果會在windows下如何進行程式設計接口函數調用,到作業系統下隻是編譯和開發環境有相應的變化而已。如果涉及Jave方面的程式設計也是如此的。嵌入式系統中涉及算法的由專業算法的人來處理的,不必歸結到嵌入式系統範疇内。但如果涉及嵌入式系統下面嵌入式資料庫、基于嵌入式系統的網絡程式設計和基于某此應用層面的協定應用開發(比如基于SIP、H.323、Astrisk)方面又較為複雜,并且有難度了。

三、 練好基本功

       嵌入式系統專業是綜合了 計算機硬體技術,計算機軟體技術 以及 電子電路技術的一門綜合學科,所涉及的内涵和知識非常廣泛,包括: 數字電路,模拟電路,計算機組成原理,單片機基礎,C語言基礎,作業系統,資料結構,編譯原理,計算機控制,計算機網絡等知識。

      在真正學習嵌入式開發之前, 首先要打好基礎。其中最重要的是C語言基礎、數字電路、計算機組成原理三門課程。對于C語言,至少能單獨編寫調試一個3 ~ 500行的程式,能夠了解C語言的基本文法規則,基本語句的使用,了解指針概念并能靈活使用各種指針。

計算機組成原理要能了解組成一個計算機系統的幾大部件,計算機系統的結構,了解系統總線,了解處理器和計算機外部裝置的關系,處理器和計算機外設是如何協調工作完成某一項功能的,計算機軟體和硬體是如何分工協作完成某一項任務的,了解軟體是通過寄存器來控制硬體的。

      數字電路 ,模拟電路要了解其基本原理個概念,能看懂簡單模拟、數字電路原理圖。了解數字電路中的寄存器,時序的概念,能看懂晶片手冊和時序圖。對于其他基礎課程,重點要了解其中的一些基本概念,如何使用等等。

對于電子,自動化,通信,計算機類專業的學生,在大二、大三開設的專業基礎或專業課程中基本包含了以上的大部分課程。因為缺乏實踐,可能學得不是很深入,但是一些基本的概念和基本知識應該還是有所了解,針對一些薄弱環節,自己稍微加強學習一下,基本上已經具備了學習嵌入式開發的基礎。 在嵌入式基本功學習階段,最重要的是C語言和單片機基礎,最好是能用C語言開發一個小的單片機程式,例如用C語言實作單片機和PC的序列槽通信,用C語言控制LED等顯示,用C語言控制數位管顯示等小程式。在這個期間需要的學習工具就是單片機51學習開發闆。推薦飛淩的OK-51學習開發闆。詳情參考:

四、 嵌入式linux應用開發

     嵌入式開發基礎知識學習完後,這時候你已經有了一定的嵌入式開發基礎了,可以進行基于單片機的嵌入式系統設計了。單片機程式設計本身也是屬于嵌入式程式設計,但是在這裡我們隻是把單片機開發當作嵌入式系統開發的基礎,不把單片機開發作為真正的嵌入式系統開發,在這裡我們的嵌入式系統開發是指在帶有作業系統的嵌入式平台上的應用和驅動開發,特别指在嵌入式linux平台上的開發。

單片機開發在很早以前是非常熱門的,現在在一些比較簡單的系統上單片機也用的非常廣泛,随着硬體的成本不斷降低,在一些比較複雜的嵌入式裝置一般都采用嵌入式linux作業系統,在嵌入式linux平台上進行開發,這樣可以極大的提高嵌入式開發效率,提高系統的穩定性和可靠性,降低開發成本。由于linux是一個開源的作業系統,你可以通過閱讀linux核心來了解核心的實作機制,如果有需要,你甚至可以通過修改核心源碼來提高系統的性能;同時,全球參與linux開發的隊伍非常龐大,網上有大量的嵌入式linux開發資料和源代碼,很多你需要實作的功能在網上基本都能找到相關源碼,參考一下别人寫的源碼,這樣可以極大的提高自己的工作效率和技術能力,近幾年,随着參與linux開發的人越來越多,linux系統的穩定性、實時性有了很大的提高,linux系統無論在伺服器上還是嵌入式裝置平台上都應用越來越廣泛,現在包括華為、中興、朗訊的各大通信巨頭都開始把自己裝置的底層平台從vxworks作業系統遷移到linux系統,可以說嵌入式linux是嵌入式技術發展一個方向,是嵌入式技術的一面旗幟。 基于以上原因,我的建議是學嵌入式開發,就學嵌入式linux開發,相對于wince等其他的嵌入式平台,你可以真正學到更多的東西,學到嵌入式技術的精髓,同時他又符合嵌入式産業發展的方向,不容易被日新月異的技術發展所淘汰。

有了嵌入式開發的基礎,又知道了我們為什麼要學習嵌入式linux開發,那我們就要開始動手開始學習了,那如何開始學習嵌入式linux開發,從哪裡開始着手呢?

       做任何事情都有一個循序漸進的過程,學習嵌入式linux也一樣。在有了一定的嵌入式開發基礎後,學習嵌入式linux開發比較适合的切入點是 從嵌入式linux應用程式開發開始,即暫時先不去關心嵌入式硬體平台,不去關心linux的底層驅動,先把精力集中在現有的嵌入式linux平台上進行嵌入式linux應用程式設計開發。學習嵌入式linux開發絕不是看看書就可以學好的,需要多實踐,程式設計調試;因為嵌入式開發不同于普通的基于PC機或伺服器的應用程式開發, 嵌入式開發的應用程式是要燒寫到嵌入式闆卡或開發闆上運作的,是以首先你要給自己購買一塊開發闆,現在普遍流行的嵌入式開發闆都是基于三星的ARM9 CPUS3C2440,成本效益極高,在這裡我推薦使用飛淩公司FL-2440 高成本效益ARM9學習開發闆,開發闆資源豐富,穩定,同時配有大量的實驗源碼,視訊教程和實驗指導書。

    有了開發闆後, 先後開始學習嵌入式linux開發環境搭建、嵌入式linux開發模型、linux核心移植和檔案系統、嵌入式linux應用程式移植、嵌入式linux多程序,多線程應用程式設計、嵌入式linux網絡程式設計,如果對嵌入式資料庫或圖形軟體開發有興趣的,可以進一步學習嵌入式linux資料庫開發或基于QT的嵌入式linux圖形應用軟體設計。 每學一章節都要通過相關實驗來來驗證你從書上學到的東西,同時提高自己編寫代碼,調試程式的能力。 這個過程根據不同學員的基礎不同,大概要花上1 ~ 2個月時間。學完這些課程後,你就有了再現有的嵌入式linux平台上進行應用程式設計開發的能力,到一些嵌入式軟體公司去,能夠勝任在現有的嵌入式linux平台上進行上層的應用程式開發工作。但是目前你還不能進行嵌入式linux系統和驅動的開發,也就是說,你現在隻能在一個已經建構好的嵌入式linux平台上進行應用程式開發,而自己還沒有能力根據實際需要去重新建構一個嵌入式linux平台。要讓自己有能力根據實際需要重新建構一個嵌入式linux軟硬體平台,這時候就需要進行下一階段的學習了,即嵌入式linux系統和驅動開發。

五、嵌入式Linux系統和驅動開發

有了嵌入式linux平台上開發應用程式的基礎,你已經 對linux的功能、linux對應用程式提供的接口和系統調用有了一定的了解,知道如何利用linux提供的功能來進行應用程式開發,知道如何來使用裝置驅動來進行應用程式設計,有了這些知識後,你就可以更深入的去學習Linux系統原理和基于Linux驅動的開發,Linux核心的裁剪,檔案系統構,bootloader等等底層的知識了。

想要更深入學習嵌入式Linux系統和驅動開發,要學的内容非常多包括計算機軟體、硬體、作業系統知識。這時候你可以參照以下的學習思路,因為嵌入式Linux系統和驅動的開發,和底層硬體聯系非常緊密,是以 首先我們從學習了解嵌入式硬體開始,包括:ARM體系架構、S3C2440微處理器接口設計、時鐘系統、LCD屏接口、存儲控制器及系統的存儲空間配置設定、NAND FLASH接口和NOR FLASH接口等。對嵌入式系統硬體有了一定的了解後,接下來就可以 開始學習bootloader了,了解bootloader的概念,功能,和原理,重點掌握U-BOOT的使用和移植。接下來就開始學習嵌入式linux核心機制,分析嵌入式Linux源碼組成、核心的子產品機制、核心程序管理、記憶體管理機制、linux的中斷系統、Linux核心的移植等。有了核心的基礎, 就可以學習嵌入式Linux裝置驅動開發了,重點掌握字元裝置驅動開發,LCD屏裝置驅動開發、觸摸屏裝置驅動開發、USB裝置驅動開發,網卡裝置驅動開發。學完這些知識點并通過相關實驗驗證後,嵌入式Linux系統和驅動的開發就算掌握了差不多了,能夠勝任絕大部分基于linux平台的驅動開發工作了。學完這些知識點,根據學員的不同情況, 一般需要花三個月到半年時間。通過這一階段的學習,你在嵌入式Linux開發領域已經算是有了一定的功底,已經不再被人稱為菜鳥了, 已經進入嵌入式linux開發高手行列了。

六、更上一層樓

  深入了解了嵌入式核心和驅動開發,這時候寫個什麼驅動對你已經沒有什麼問題了,開發過程中一些基本問題都難不倒你了。這是你可能 想優化一下系統的性能,比如實時性,提高系統的啟動速度,或者優化系統的記憶體管理機制,要達到修改核心核心機制的境界,你就需要去深入去研讀linux核心源碼了,參考《linux源碼深度分析》、《linux情景分析等》等linux源碼分析的書籍,深入了解linux各部分的實作機制和原理,以及可能存在的問題。你隻有在深入了解現有代碼和實作機制的基礎上,才能提出更好的改進方案。如果你能達到這個境界,那你 已經是高手中的高手,可以笑傲群雄了。

七、誤區

一、全身投入學習桌面或伺服器版本linux系統

Linux桌面環境隻是嵌入式linux的一個開發工具,開發環境而已。我們的目标不是學習linux伺服器的配置和使用,linux伺服器的進階配置和使用那是另外一個領域,不屬于嵌入式linux讨論的範疇。我們進行嵌入式linux開發,隻是把linux桌面環境當作一個工具,在linux桌面環境下運作嵌入式linux開發工具,例如gcc 編譯器,make工具來開發我們的嵌入式linux應用程式而已,對于嵌入式開發工程師來說,沒有必要花費那麼多的精力和時間去研究linux桌面版和伺服器的應用,隻要能了解最基本的操作即可。現在的桌面linux系統的圖形化界面做的也相當好,跟window具有相同的易用性能,例如ubuntu很多操作都可以在圖形界面下完成,就沒有必要去記每個linux指令了。熟悉linux桌面系統的使用和基本操作指令,安排1~2天時間學習基本就可以掌握了。

二、直接閱讀linux核心源代碼

  很多想學linux,在連linux是什麼東西,一點都還不會使用的情況下去就閱讀linux核心源代碼,花了大量時間去閱讀《linux源碼深度分析》、《linux情景分析等》等書。這樣的結果很可能就是看的頭昏眼花,不知所雲,最後隻能放棄了。這也是同學們學習嵌入式linux的一個誤區,在有一定嵌入式linux開發基礎後,帶着一定的目的去閱讀linux源代碼,這樣可以極大的提高你的技術能力,但是你在沒有任何基礎,對linux一點都不了解的情況下就去閱讀linux核心源代碼,無異于以卵擊石,最後隻能是撞個頭破血流。

 三、對于初學者來講,要量力而行,不要認為驅動層工資高就把它當成方向了,要結合自身特點,嵌入式系統四個層面上那個層面上來講都是有高人存在,當然高人也對應的高工資,我是做硬體層的,以前每月工資中個人所得稅要被扣上近3千大元,當然我一方面充當工程師的角色,一方面充當主管及人物的角色,兩個職位我一個人幹,但上班時間就那些。硬體這方面上可能與我PK的人很少了,才讓我拿到那麼多的工資

四、開發系統選擇。

    很多ARM初學者都希望有一套自己能用的系統,但他們住住會産生一種錯誤認識就是認為處理器版本越高、性能越高越好,就象很多人認為ARM9與ARM7好,我想對于初學者在此方面以此入門還應該理智,開發系統的選擇最終要看自己往嵌入式系統的那個方向上走,是做驅動開發還是應用,還是做嵌入式系統硬體層設計與闆級測試。如果想從作業系統層面或應用層面上走,不管是驅動還是應用,那當然處理器性能越高越好了,但這個東西自學,有十分大的困難,不是幾個月或半年或是一年二年能搞定的事。

   以上是筆者結合自己的嵌入式學習經曆和嵌入式教育訓練經驗總結的一些嵌入式學習方法和步驟,這隻是筆者對嵌入式學習的一些看法,希望對那些有興趣學習嵌入式linux又不知道從哪開始學的同學們有所幫助。當然,每個人,每個同學的基礎,各方面的情況都不一樣,每個人都有自己适合的學習方式,本文章總結的一些學習方法和思路僅供參考,希望大家能找到适合自己的學習嵌入式開發的方式,早日進入嵌入式開發大門。

<script>window._bd_share_config={"common":{"bdSnsKey":{},"bdText":"","bdMini":"2","bdMiniList":false,"bdPic":"","bdStyle":"0","bdSize":"16"},"share":{}};with(document)0[(getElementsByTagName('head')[0]||body).appendChild(createElement('script')).src='http://bdimg.share.baidu.com/static/api/js/share.js?v=89860593.js?cdnversion='+~(-new Date()/36e5)];</script> 閱讀(32) | 評論(0) | 轉發(0) | 0

上一篇:沒有了

下一篇:嵌入式c筆試題(整理)

相關熱門文章

  • 歡迎miss嵌入式在ChinaUnix博...
  • SQLite資料庫
  • 歡迎嵌入式招聘在ChinaUnix博...
  • 歡迎兵哥_嵌入式部落格在ChinaUn...
  • 歡迎樂D嵌入式在ChinaUnix部落格...
  • SHTML是什麼_SSI有什麼用...
  • shell中字元串操作
  • 卡爾曼濾波的原理說明...
  • 關于java中的“錯誤:找不到或...
  • shell中的特殊字元
  • linux dhcp peizhi roc
  • 關于Unix檔案的軟連結
  • 求教這個指令什麼意思,我是新...
  • sed -e "/grep/d" 是什麼意思...
  • 誰能夠幫我解決LINUX 2.6 10...

給主人留下些什麼吧!~~ 評論熱議

繼續閱讀