嵌入式系統學習路線

嵌入式系統方向

嵌入式系統無疑是當前最熱門最有發展前途的IT應用領域之一。嵌入式系統用在一些特定專用設備上,通常這些設備的硬件資源(如處理器、存儲器等)非常有限,並且對成本很敏感,有時對實時響應要求很高等。特別是隨着消費家電的智能化,嵌入式更顯重要。像我們平常常見到的手機、PDA、電子字典、可視電話、VCD/DVD/MP3 Player、數字相機(DC)、數字攝像機(DV)、U-Disk、機頂盒(Set Top Box)、高清電視(HDTV)、遊戲機、智能玩具、交換機、路由器、數控設備或儀表、汽車電子、家電控制系統、醫療儀器、航天航空設備..等等都是典型的嵌入式系統。

嵌入式系統是軟硬結合的東西,搞嵌入式開發的人有兩類。

一類是學電子工程、通信工程等偏硬件專業出身的人,他們主要是搞硬件設計,有時要開發一些與硬件關係最密切的最底層軟件,如BootLoader、Board Support Package(像PC的BIOS一樣,往下驅動硬件,往上支持操作系統),最初級的硬件驅動程序等。他們的優勢是對硬件原理非常清楚,不足是他們更擅長定義各種硬件接口,但對複雜軟件系統往往力不從心(例如嵌入式操作系統原理和複雜應用軟件等)。

另一類是學軟件、計算機專業出身的人,主要從事嵌入式操作系統和應用軟件的開發。如果我們學軟件的人對硬件原理和接口有較好的掌握,我們完全也可寫BSP和硬件驅動程序。嵌入式硬件設計完後,各種功能就全靠軟件來實現了,嵌入式設備的增值很大程度上取決於嵌入式軟件,這佔了嵌入式系統的最主要工作(目前有很多公司將硬件設計包給了專門的硬件公司,稍複雜的硬件都交給臺灣或國外公司設計,國內的硬件設計力量很弱,很多嵌入式公司自己只負責開發軟件,因爲公司都知道,嵌入式產品的差異很大程度在軟件上,在軟件方面是最有"花頭"可做的),所以我們搞軟件的人完全不用擔心我們在嵌入式市場上的用武之地,越是智能設備越是複雜系統,軟件越起關鍵作用,而且這是目前的趨勢。

從事嵌入式軟件開發的好處是:

(1) 目前國內外這方面的人都很稀缺。一方面,是因爲這一領域入門門檻較高,不僅要懂較底層軟件(例如操作系統級、驅動程序級軟件),對軟件專業水平要求較高(嵌入式系統對軟件設計的時間和空間效率要求較高),而且必須懂得硬件的工作原理,所以非專業IT人員很難切入這一領域;另一方面,是因爲這一領域較新,目前發展太快,很多軟硬件技術出現時間不長或正在出現(如ARM處理器、嵌入式操作系統、MPEG技術、無線通信協議等),掌握這些新技術的人當然很難找。嵌入式人才稀缺,身價自然就高,越有經驗價格就越高。其實嵌入式人才稀少,根本原因可能是大多數人無條件接觸,這需要相應的嵌入式開發板和軟件,另外需要有經驗的人進行指導開發流程。

(2) 與企業計算等應用軟件不同,嵌入式領域人才的工作強度通常低一些。搞企業應用軟件的IT企業,這個用戶的系統搞完了,又得去搞下一個用戶的,而且每個用戶的需求和完成時間都得按客戶要求改變,往往疲於奔命,重複勞動。相比而言,搞嵌入式系統的公司,都有自己的產品計劃,按自己的節奏行事。所開發的產品通常是通用的,不會因客戶的不同而修改。一個產品型號開發完了,往往有較長一段空閒時間(或只是對軟件進行一些小修補),有時間進行充電和休整。另外,從事嵌入式軟件的每個人工作範圍相對狹窄,所涉及的專業技術範圍就是那些(ARM、RTOS、MPEG、802.11等),時間長了這些東西會越搞越有經驗,賣賣老本,幾句指導也夠讓那些初入道者琢磨半年的。若搞應用軟件,可能下一個客戶要換成一個完全不同的軟件開發平臺,那就苦了。

(3) 哪天若想創業,搞自已的產品,那麼嵌入式是一個不錯的主意,這可不像應用軟件那樣容易被盜版。土木學院有一個叫啓明星的公司開發出一個好象叫“工程e”的掌上PDA(南校區門口有廣告),施工技術人員用該PDA可當場進行土木概預算和其它土木計算,據說銷路特好。我認識的某大學老師,他開發的飯館用的點菜PDA(WinCE平臺,可無線連網和上網),據他說銷路不錯,飯館點點PDA讓客戶點菜,多顯派頭檔次。我記得00級2+2班當年有一組同學在學Windows程序設計課程時用VC++設計了一個功能很強的點菜系統做爲課程項目,當時真想建議他們將這個軟件做成PDA,估計會有些銷路(上海火車站南廣場的Macdonald便使用很漂亮的PDA給用戶點食品,像摸像樣的)。這些PDA的硬件設計一般都是請其它公司給訂做(這叫“貼牌”:OEM),都是通用的硬件,我們只管設計軟件就變成自己的產品了。

從事嵌入式軟件開發的缺點是:

(1) 入門起點較高,所用到的技術往往都有一定難度,若軟硬件基礎不好,特別是操作系統級軟件功底不深,則可能不適於此行。

(2) 這方面的企業數量要遠少於企業計算類企業。特別是從事嵌入式的小企業數量較多(小企業要搞自己的產品創業),知名大公司較少(搞嵌入式的大公司主要有Intel、Motorola、TI、Philip、Samsung、Sony、Futjtum、Bell-Alcatel、意法半導體、Microtek、研華、華爲、中興通信、上廣電等製造類企業)。這些企業的習慣思維方式是到電子、通信等偏硬專業找人。

(3)有少數公司經常要碩士以上的人搞嵌入式,主要是基於嵌入式的難度。但大多數公司也並無此要求,只要有經驗即可。

我院同學若學習嵌入式,顯然應偏重於嵌入式軟件,特別是嵌入式操作系統方面,應是我們的強項。對於搞嵌入式軟件的人,最重要的技術顯然是(實際上很多公司的招聘廣告上就是這樣寫的):
(1) 掌握主流嵌入式微處理器的結構與原理
(2) 必須掌握一個嵌入式操作系統
(3) 必須熟悉嵌入式軟件開發流程並至少做過一個嵌入式軟件項目。

(這條件有點老了,現在要求高多了)

我院在嵌入式軟件方面最重要的課程包括:

(1) 嵌入式微處理器結構與應用:這是一門嵌入式硬件基礎課程,我院用這門課取代了傳統的“微機原理與接口”課程(目前國內已有少部分高校IT專業這樣做了,因爲講x86微機原理與接口很難找到實際用處,只爲教學而已)。我們說過,嵌入式是軟硬件結合的技術,搞嵌入式軟件的人應對ARM處理器工作原理和接口技術有充分了解,包括ARM的彙編指令系統。若不瞭解處理器原理,怎麼能控制硬件工作,怎麼能寫出節省內存又運行高速的最優代碼(嵌入式軟件設計特別講究時空效率),怎麼能寫出驅動程序(驅動程序都是與硬件打交道的)?很多公司招聘嵌入式軟件人員時都要求熟悉ARM處理器,將來若同學到公司中從事嵌入式軟件開發,公司都會給你一本該設備的硬件規格說明書 (xxx Specification),您必須能看懂其中的內存分佈和端口使用等最基本的說明(就像x86彙編一樣),否則怎麼設計軟件。有些同學覺得嵌入式處理器課程較枯燥,這主要是硬件課程都較抽象的原因.還有同學對ARM彙編不感興趣,以爲嵌入式開發用C語言就足夠了。其實不應僅是將彙編語言當成一個程序設計語言,學彙編主要是爲了掌握處理器工作原理的。一個不熟悉彙編語言的人,怎麼能在該處理器寫出最優的C語言代碼。在嵌入式開發的一些關鍵部分,有時還必須寫彙編,如Bootloader等(可能還包括BSP)。特別是在對速度有極高要求的場合(如DSP處理器的高速圖像採集和圖像解壓縮),目前主要還要靠彙編寫程序(我看到過很多公司是這樣做的)。當您在一個嵌入式公司工作時,在查看描述原理的手冊時,可能很多都是用匯編描述的(我就遇到過),這是因爲很多硬件設計人員只會寫或者喜歡用匯編描述,此時您就必須看懂彙編程序,否則軟硬件人員可能就無法交流。
目前嵌入式處理器常見的有ARM、PowerPC、MIPS、Motorola 68K、ColdFire(冷火)等,但ARM佔據了絕對主流(資料說手機中幾乎100%都是ARM處理器)。ARM是一個只賣知識產權的公司,目前獲得購買了ARM CPU核授權許可的大公司很多,包括Intel、Samsung、Amstel、Motorola、Philip等,他們都在ARM CPU核的基礎上進行了一些外圍擴展,形成自己的處理器(如Samsung S3C2410,Motorola i.MXL9328等處理器都是採用ARM 9內核,指令一級是相同的)。而衆多中小公司又購買了這些處理器,設計了各種各樣的開發板,如華恆等國內很多著名嵌入式公司都生產基於Samsung S3C2410的開發板,供最終用戶使用或供教學實驗。在ARM這個食物鏈上,ARM公司是大魚,Intel、Samsung等公司是小魚,而華恆等則是蝦米,最終用戶(想我們要採購嵌入式開發板的實驗室)則是喂蝦米的。Intel早期生產的是低端ARM(Strong ARM,相當於ARM 7),現在轉向主要生產高端ARM(即Intel Xscale處理器,相當於ARM 10,主要用在高端PDA上,如HP和DELL生產的PDA都採用Intel Xscale,價格較高)。目前應用最多的是ARM 7和ARM 9兩類處理器。 ARM 7較便宜,可跑uclinux(是一個不支持高級內存管理功能的嵌入式Linux系統)、Vxworks、uc/os II等實時操作系統,但因處理器不帶內存管理單元MMU(無內存分頁和地址映射機制,所以不能使用虛擬內存),所以不能跑Windows CE,另外通用Linux中的某些內存管理功能也不能用在ARM 7上。ARM 9是一個帶MMU功能的高端處理器,可跑WinCE或通用Linux的大多數功能。以上是我的一點了解,可能有不對的地方。我們學院正在建設的嵌入式實驗室(10月底到貨)包括30套ARM 7系統(擬採用Samsung S3C44b0x開發板,主要用於嵌入式處理器結構、嵌入式linux課程實驗),10套ARM 9系統(擬採用Samsung S3C2410x開發板,主要用於Windows CE課程建設),每套實驗板都配了高速仿真器,價格都很貴(比我們招標的DELL PC還貴),很容易損壞,同學應愛護使用。

(2) 嵌入式操作系統類課程
除了WinCE的實時性稍差外,大多數嵌入式操作系統的實時性都很強,所以也可稱爲實時操作系統Real Time Operating System.從事嵌入式的人至少須掌握一個嵌入式操作系統(當然掌握兩個更好),這在嵌入式的所有技術中是最爲關鍵的了。目前最重要的RTOS主要包括:

第一類、傳統的經典RTOS:最主要的便是Vxworks操作系統,以及其Tornado開發平臺。Vxworks因出現稍早,實時性很強(據說可在1ms內響應外部事件請求),並且內核可極微(據說最小可8K),可靠性較高等,所以在北美,Vxworks佔據了嵌入式系統的多半疆山。特別是在通信設備等實時性要求較高的系統中,幾乎非Vxworks莫屬。Vxworks的很多概念和技術都和Linux很類似,主要是C語言開發。像Bell-alcatel、Lucent、華爲等通信企業在開發產品時,Vxworks用得很多。但Vxworks因價格很高,所以一些小公司或小產品中往往用不起。目前很多公司都在往嵌入式Linux轉(聽說華爲目前正在這樣轉)。但無論如何,Vxworks在一段長時間內仍是不可動搖的。與Vxworks類似的稍有名的實時操作系統還有pSOS、QNX、Nucleus等RTOS。

第二類、嵌入式Linux操作系統:Linux的前途除作爲服務器操作系統外,最成功的便是在嵌入式領域的應用,原因當然是免費、開源、支持軟件多、呼擁者衆,這樣嵌入式產品成本會低。Linux本身不是一個爲嵌入式設計的操作系統,不是微內核的,並且實時性不強。目前應用在嵌入式領域的Linux系統主要有兩類:一類是專爲嵌入式設計的已被裁減過的Linux系統,最常用的是uClinux(不帶MMU功能),目前佔較大應用份額,可在ARM7上跑;另一類是跑在ARM 9上的,一般是將Linux 2.4.18內核移植在其上,可使用更多的Linux功能(當然uClinux更可跑在ARM 9上)。很多人預測,嵌入式Linux預計將佔嵌入式操作系統的50%以上份額,非常重要。缺點是熟悉Linux的人太少,開發難度稍大。另外,目前我們能發現很多教材和很多大學都以ucOS/II爲教學用實時操作系統,這主要是由於ucOS/II較簡單,且開源,非常適合入門者學習實時操作系統原理,但由於ucOS/II功能有限,實用用得較少,所以我院不將其作爲教學重點,要學習就應學直接實用的,比如 uClinux就很實用。況且熟悉了Linux開發,不僅在嵌入式領域有用,對開發Linux應用軟件,對加深操作系統的認識也有幫助,可謂一舉多得。據我所知,目前Intel、Philip都在大搞ARM+LINUX的嵌入式開發,Fujitum則是在自己的處理器上大搞Linux開發。目前在嵌入式Linux領域,以下幾個方面的人特別難找,一是能將Linux移植到某個新型號的開發版上;二是能寫Linux驅動程序的人;三是熟悉Linux內核裁減和優化的人。我院在該嵌入式Linux方面的課程系列是:本科生操作系統必修課,然後是Linux程序設計選修課,最後是嵌入式Linux系統選修課。


第三類、 Windows CE嵌入式操作系統:Microsoft也看準了嵌入式的巨大市場,MS永遠是最厲害的,WinCE出來只有幾年時間,但目前已佔據了很大市場份額,特別是在PDA、手機、顯示儀表等界面要求較高或者要求快速開發的場合,WinCE目前已很流行(據說有一家賣工控機的公司板子賣得太好,以至來不及爲客戶裁減WinCE)。WinCE目前主要爲4.2版(.NET),開發平臺主要爲WinCE Platform Builder,有時也用EVC環境開發一些較上層的應用,由於WinCE開發都是大家熟悉的VC++環境,所以我院學過Windows程序設計課程的同學都不會有多大難度,這也是WinCE容易被人們接受的原因,開發環境方便快速,微軟的強大技術支持,WinCE開發難度遠低於嵌入式Linux。對於急於完成,不想拿嵌入式Linux冒險的開發場合,WinCE是最合適了(找嵌入式Linux的人可沒那麼好找的),畢竟公司不能像學生學習那樣試試看,保證開發成功更重要。根據不同的側重點 ,WinCE還有兩個特殊版本,一個是MS PocketPC操作系統專用於PDA上(掌上電腦),另一個是MS SmartPhone操作系統用於智能手機上(帶PDA功能的手機),兩者也都屬於WinCE平臺。在PDA和手機市場上,除WinCE外,著名的PDA嵌入式操作系統還有Palm OS(因出現很早,很有名)、Symbian等,但在WinCE的強勁衝擊下,Palm和Symbian來日還能有多長?我院可能是全國高校中唯一一家開設專門的"Windows CE嵌入式操作系統"課程的學校,這主要是基於以下原因:我院本身前面便有Windows程序設計課程,同學學過VC++後再學WinCE,非常方便自然,通過學習WinCE同樣也可瞭解嵌入式軟件的一般開發過程,對Linux有懼怕心理的同學也很合適。很顯然,嵌入式Linux永遠不可能替代WinCE,而且將來誰佔份額大還很難講,畢竟很多人更願意接受MS的平臺,就像各國政府都在大力推LINUX已好長時間,但您能看到幾個在PC機上真正使用LINUX的用戶?據我觀察,目前在嵌入式平臺上,LINUX是叫得最響,但還是WinCE實際用得更多.嵌入式LINUX可能更多地是一些有長遠產品計劃的公司,爲降低成本而進行長遠考慮; 二是微軟亞洲研究院對我院WinCE課程的支持計劃,我們也很希望將來我院能有同學通過微軟的面試去實習。WinCE和多媒體(如MPEG技術)是微軟亞洲工程院目前做得較多的項目領域之一,他們很需要精通WinCE的人。

總結關於嵌入式操作系統類課程,若您覺得自己功底較深且能鑽研下去,則可去學嵌入式Linux;若您覺得自己VC++功底較好且想短平快地學嵌入式開發,則我院的WinCE課程是最好的選擇。

(3) 嵌入式開發的其它相關軟件課程

搞嵌入式若能熟悉嵌入式應用的一些主要領域,這樣的人更受企業歡迎。主要的相關領域包括:
A、數字圖像壓縮技術:這是嵌入式最重要最熱門的應用領域之一,主要是應掌握MPEG編解碼算法和技術,如DVD、MP3、PDA、高精電視、機頂盒等都涉及MPEG高速解碼問題。爲此,我院已預訂了一位能開設數字圖像處理課程的博士。
B、通信協議及編程技術:這包括傳統的TCP/IP協議和熱門的無線通信協議。首先,大多數嵌入式設備都要連入局域網或Internet,所以首先應掌握TCP/IP協議及其編程,這是需首要掌握的基本技術;其次,無線通信是目前的大趨勢,所以掌握無線通信協議及編程也是是很重要的。無結通信協議包括無線局域網通信協議802.11系列,Bluetooth,以及移動通信(如GPRS、GSM、CDMA等)。
C、網絡與信息安全技術:如加密技術,數字證書CA等。我院有這方面的選修課。
D、DSP技術:DSP是Digital Signal Process數字信號處理的意思,DSP處理器通過硬件實現數字信號處理算法,如高速數據採集、壓縮、解壓縮、通信等。數字信號處理是電子、通信等硬件專業的課程,對於搞軟件的人若能瞭解一下最好。目前DSP人才較缺。如果有信號與系統、數字信號處理等課程基礎,對於學習MPEG編解碼原理會有很大幫助。

(4)嵌入式開發的相關硬件基礎

對於軟件工程專業的學生,從事嵌入式軟件開發,像數字電路、計算機組成原理、嵌入式微處理器結構等硬件課程是較重要的。另外,彙編語言、C/C++、數據結構和算法、特別是操作系統等軟件基礎課也是十分重要的。我們的主要目地是能看懂硬件工作原理,但重點應是在嵌入式軟件,特別操作系統級軟件,那將是我們的優勢。
我們的研究生裏有些是學電子、通信類專業過來的,有較好的模擬電路和單片機基礎,學嵌入式非常合適。嵌入式本身就是從單片機發展過來的,只是單片機不帶OS,而現在很多嵌入式應用越來越複雜,以至不得不引入嵌入式操作系統。另外,爲追求更高速的信號處理速度,現在在一些速度要求較高的場合,有不少公司是將一些DSP算法,如MPEG壓縮解壓縮算法等用硬件來實現,這就涉及到HDL數字電路設計技術及其FPGA/IP覈實現技術,這方面的人目前市場上也很缺。

(5) 題外話

另外,能寫驅動程序的人目前是非常緊缺的(驅動程序也可歸於嵌入式範疇),包括桌面Windows中的DDK開發環境和WDM驅動程序。公司每時每刻都要推出新產品,每一個新產品出來了,要能被操作系統所使用,是必須寫驅動程序的。寫驅動程序就必須掌握操作系統(如Windows或Linux)的內部工作原理,還涉及到少量硬件知識,難度較大,所以這方面的人很難找。想成爲高手的同學,也可從驅動程序方面獲得突破。我可說一下自己的經歷,三年前我曾短暫地在一家公司寫過WinCE驅動程序(正是因爲知道這方面的人緊缺,所以纔要做這方面的事),儘管那以前從未做過驅動程序,應聘那個職位時正是看準了公司是很難招聘到這方面的人,既然都找不到人,驅動還得有人做,這正是可能有機會切入這一領域的大好機會。面試時大講自己寫過多少萬行彙編程序,對計算機工作原理如何清楚,簡歷中又寫着我曾閱讀完兩本關於Windows Driver Model的兩本英文原版書,寫過幾個小型的驅動程序練習程序(其實根本沒寫過,我們的同學將來千萬不要像我這樣,早練就些過硬功夫,就不至於淪落到我這等地步,就不用像我那樣去“欺騙”公司了,我這是一個典型的反面教材),居然一切都PASS(當然最重要的是筆試和麪試問題還說得過去),這隻能說明這一領域找人的困難程度。公司本就未指望找到搞過驅動的人,找個有相關基礎的人就算不錯了。做了以後,發現也並不是怎樣難的。其實搞驅動程序的工作是很舒服的,搞完一個版本就會空一段時間,只有等公司新的芯片推出或新的OS出現後,才需要再去開發新一版驅動,那時有將近一個月時間空閒着在等WinCE .NET Beta版推出,準備將驅動程序升級到CE .NET上,現在在軟件學院工作整日忙,無限懷念那段悠閒時光。

很巧合,最近本人無意中再次體會到了嵌入式的迷人之處。上週我那用了3年的手機終於不能WORK了。此次更新,除要求有手機常見功能外,最好有MP3功能(現在很多英語聽力都有MP3文件),最好有英漢詞典,最好還能讀WORD文檔。最後選了個滿足以上條件的最便宜的手機DOPOD 515(斬了我2.2K,但想想這也算自己對嵌入式事業的支持,這樣便也想開了),算得上最低檔的智能手機了。回來一查,手機的about顯示,本手機Processor是ARM,其OS是MS Smartphone(即WinCE .NET 4.2),這麼巧合,簡直可做爲學習嵌入式課程的產品案例了(等我們的WinCE課程開得有聲有色後,希望能從微軟研究院搞些Smartphone來開發開發)。有OS的手機果然了得,金山詞霸、WORD、EXCEL、REGEDIT等居然都有smartphone版的,PC上的MP3、DOC等居然在download時都可被自動轉換成smartphone格式,真是爽。完全可用Windows CE自己開發一些需要的程序download到自己的手機上。現在市面銷售PDA智能手機火爆,MS總是財源滾滾。但我已發現國產的ARM+LINUX手機出現在市面上,價格只1.2K。

要麼走ARM+WinCE,要麼走ARM+LINUX,要麼走ARM+VXWORKS。每個搞嵌入式的人都可選一條路,條條大路通羅馬。


http://blog.csdn.net/kevinhg/article/details/6761984


-----------------------------------------------------------------------------------------------------------------------------------------------

另一篇

  1. 嵌入式LININX開發第一學習階段,主要打好基礎,學好C編程,Linux系統編程。


  2. 嵌入式LININX開發第二學習階段,掌握ARM彙編程序設計,驅動程序設計。


  3. 嵌入式LININX開發第三學習階段,掌握C++面向對象程序設計,Qt編程。


  4. ----------------------------------------------------------------------------------------------------------------

  5. 總的原則,不能貪多求快,貴在長期堅持。

     

    好了,話歸正轉。下面給出相關的學習資料。資料出現的順序,也就是我們學習的順序。

     

    1.  C程序設計語言

        C語言作者寫的書,超級精簡。因爲精簡,所以,這本書要很認真的讀。不要求快,要細嚼慢嚥,要多思考,要從頭到尾(包括附錄)的讀。

      

    2.  Unix環境高級編程 第2版

        知名的Unix編程書籍。學完這本書,對一般的Linux應用開發,基本上可以達到得心應手的地步。

     

    3. Unix網絡編程 第3版 第1卷

        知名的Unix編程書籍。學完這本書,對一般的Linux網絡應用開發,基本上可以達到得心應手的地步。

        (說句題外話,如果自我要求不高的話,學完這3本書,出去混口飯喫已經不是大問題了。)

           (另外,如果想深入一點理解網絡,TCP/IP詳解 卷2  是一本非常好的書)

     

    4.  深入理解計算機系統

        注意,到這裏,要進入關鍵的一步了。這本書,共分爲3部分,我們只要看前2部分即可。

        這本書,要相當認真的學習。不僅要看,要思考,還要做完所有的練習題(做題非常重要,一定要堅持先做,再看答案)。

        同時,書中的內容不可能解答你全部的編程疑問。因此,在學習過程中,對自己以前不理解的概念(如C語法的含義,C++多態究竟是如何實現的等問題),要多寫小函數或者小代碼片段,多分析他們對應的彙編代碼(objdump這個最精確;當然,通過使用-S編譯選項也行,它的可讀性要好一點,但是可能會帶有宏指令)。另外,我的經驗是,寫小函數時,參與運算的變量,最好將它定義爲入參(編譯器不敢優化)而不是局部變量或全局變量(容易被編譯器優化,導致未能生成你要想看的機器碼)。

            這本書學完,你將真正成爲C語言(甚至C++)的專家。因爲你將從機器碼的層次,理解C(及C++)的語義究竟是怎麼實現的。你還會理解,從C語言代碼生成可執行程序的整個過程(預處理,編譯,鏈接,靜態庫,動態庫等)。你還將理解進程的概念,包括進程如何運行,進程如何與OS交互(中斷、異常、系統調用)。

     

    5.  Linux內核設計與實現

        到這裏,算是開始踏入Linux內核的大門了。這本書,從比較高的層次介紹Linux內核。是非常好的內核入門書籍。

     

    6.  Linux內核源代碼情景分析

        雖然是老書,但符合國人的思維習慣,因此非常有助於理解Linux內核。

     

    7.  深入理解Linux內核

        新書,老外寫的。當然是超級好書,在下就不多說了。

     

    8. Linux設備驅動程序

        這本書非常注重實用。我們最終的開發,基本上,要麼是開發驅動,要麼是在內核中做些應用(並與用戶態做一定交互)。而這本書恰恰教給我們最老練的開發方法。

     

    9    u-boot學習

          這裏推薦的不是書籍了,而是一篇網絡資料。

           http://www.cnblogs.com/heaad/archive/2010/07/17/1779829.html

            上面這篇文章,是一篇非常不錯的介紹u-boot工作機制的好文。

            另外,學習u-boot,還得捨得花錢。筆者爲此也買了一塊S3C2440 arm9開發板——TQ2440。

            (需要說一下,在下對天發誓,在下絕不是給誰做廣告)

           開發板不用買高檔的,買個基本的arm9的就行了。因爲我們是學習嵌入式系統原理,有個基本的arm9 CPU就足夠了。如果是做產品,當然需要選型。

            有了開發板,就可以修改、編譯、燒寫u-boot、內核、根文件系統了。

            有了開發板,就可以理解從CPU一通電開始,到Linux跑起來,到最後應用跑起來,在這整個過程中,機器裏所發生的一切事情了。

     

    好了,在下能介紹的內容就這麼多了。後面搞什麼,怎麼搞,就看大家自己的啦。

  1. --------------------------------------------------------------------------------------------------------------------
  2. 1.初識ARM
       相信ARM初學者已經通過各方面的信息(尤其是因特網)對ARM或多或少有所瞭解。那麼,看看您是否對以下我們所提出的概念有所瞭解:
     (1)“ARM”到底指的是什麼?(是一家公司?是一款芯片?是一種技術?)
     (2)ARM處理器芯片如何分類?
     (3)目前有哪些芯片廠商生產ARM處理器芯片?
     (4)目前國內應用比較多的ARM處理器芯片有哪些?它們主要應用於哪些領域?
     以上四個問題,用戶可以通過在網上查找資料很快得出答案。我們之所以只提出問題,不給出答案,是希望用戶能夠親自去查閱相關信息和資料,因爲這也是ARM學習的一部分。我們希望用戶能夠與我們給出的學習建議進行一種互動,即我們提出問題,用戶通過查找資料來找出答案,這樣更有助於用戶對知識的理解。
     
    2.一開始就必須掌握ARM體系結構與彙編指令?
    未必!我們身邊的很多ARM初學者,一開始就抱着有關ARM體系結構的書籍開始苦讀,更有甚者,在很多具體內容上鑽牛角尖,把大量時間花在了ARM彙編指令上,幾個月下來,進展不大,雖然也能知道一些ARM的相關概念,但離真正的具體應用相差甚遠,很多初學者會感覺到,學完ARM體系結構後,對ARM的應用還是無從下手,一片茫然,有的甚至就因爲這個原因,被擋在了ARM嵌入式開發領域的大門外,從此放棄了ARM嵌入式開發的學習。
        請不要誤解,並不是主張不看ARM體系結構的相關書籍,關鍵在於怎麼看、看到什麼程度。根據經驗,ARM初學者對於ARM體系結構的相關知識只需做到“瞭解”這一程度就可以了,對於ARM的彙編指令完全可以不用記憶,只要能看懂就可以(目前大部分基於ARM的產品開發都採用C語言,彙編語言的使用機會大大減少,只有在操作系統移植以及某些特殊應用中才會用到部分彙編指令)。隨着初學者對ARM更深入地學習,有關ARM體系結構與彙編指令的知識以後可能會反覆出現,遇到時再有針對性的重點看,相信會取得比較好的效果。
        注意:有關ARM體系結構的文檔請用戶參看配套光盤“用戶使用手冊”文件夾中的“ARM7TDMI_en.pdf”文件,該文檔爲ARM公司的官方技術手冊,雖然是英文版,但我們建議初學者一開始就養成查看英文手冊的習慣,因爲很多翻譯的資料並不能保證完全翻譯正確。
    如果初學者對英文確實感到頭痛,那也可以找幾本ARM體系結構相關書籍來看,北京航空航天大學出版社出版了多本比較不錯的ARM相關書籍,用戶可以參考。
     
    3.選擇ARM的軟件集成開發環境
    目前,流行的ARM軟件集成開發環境有ADS1.2、Keil uV3和IAR等。對於51單片機應用開發工程師來說,Keil開發環境應該應用得比較熟練,若採用Keil uV3進行ARM軟件開發,應該可以快速上手。但是,我們並不推薦ARM初學者選擇Keil uV3進行ARM軟件開發,主要是基於以下2個原因:
    (1)Keil uV3是第三方ARM軟件集成開發環境,目前支持的ARM芯片種類還不多,所帶的編譯器也並不完善;
    (2)由於Keil uV3爲了方便用戶的開發,提供了現成的ARM啓動文件,換句話說,它屏蔽了ARM開發中的一個重要內容——啓動代碼的編寫,而這一點對初學者來說應該是非常重要的內容。
    IAR目前國內應用的人還不多,相關資料也不是很多,所以我們也不推薦初學者使用。
    ADS1.2集成開發環境是ARM公司推出的ARM核微控制器集成開發工具。它支持ARM10之前的所有ARM系列微控制器,支持軟件調試及JTAG硬件仿真調試,支持彙編、C、C++源程序;具有編譯效率高、系統庫功能強等特點;可以在Windows 98、Windows 2000、Windows XP以及RedHat Linux上運行。
    本開發板配套的所有實驗都是採用Wiggler板+H-JTAG調試代理軟件,在ADS1.2集成開發環境下進行編寫及調試的,非常方便。
    基於以上原因,我們推薦ARM初學者使用ADS1.2集成開發環境進行ARM開發。關於ADS1.2集成開發環境的使用,初學者可以參看ADS1.2集成開發環境自帶的用戶手冊。另外,向ARM初學者推薦一本關於ADS1.2集成開發環境使用的好書——ARM開發工具ADS原理與應用 趙星寒 劉濤著 北京航空航天大學出版社 2006年2月第一版。
     
    4.收到開發板後,不要盲目下手做實驗!
    由於對ARM的神祕感以及初學者的好奇心理,很多ARM初學者在收到我們的開發板後,恨不得一口氣就把所有的實驗都做完,這樣的做法我們堅決反對。由於初學者盲目下手做實驗,可能很多實驗都做不出正確的結果,甚至損壞開發板,因此我們建議初學者經過下面的幾步來進行實驗:
    (1)收到開發板後請仔細檢查所有配件是否齊全或損壞,若有問題,請及時聯繫我們;
    (2)請認真閱讀配套光盤中的“ARMSKY-LPC213X_214X教學實驗開發板使用手冊.pdf”文檔,熟悉開發板的硬件資源;
    (3)請認真閱讀配套光盤中的“如何在ARMSKY-LPC213X_214X教學實驗開發板上運行第一個實驗程序.pdf”文檔,以便在開發板上進行第一個實驗。
    經過以上三步,用戶就應該能夠在開發板上做出第一個實驗了。接下來,用戶可以依次將所有配套實驗做一遍,看看都會出現哪些實驗效果。
     
    5.如何做好每一個配套實驗,達到最好的學習效果?
    開發板配套了60多個實驗,幾乎涵蓋了213X/214X系列芯片的所有內部功能器件的使用。初學者如何充分利用這些配套實驗進行學習,對於是否能真正掌握ARM嵌入式開發起着決定性作用。然而,很多初學者對這一點認識不足,很多都是把這些實驗在開發板上做一遍就認爲已經掌握了ARM開發,其實不然,只把這些實驗在開發板上做一遍,頂多算是對實驗結果進行了驗證,根本沒有達到掌握ARM開發的目的。因此,我們建議初學者按下面的步驟進行實驗:
    (1)將配套實驗先在開發板上運行一遍,觀察實驗結果;
    (2)仔細分析實驗代碼,至少需要結合以下兩部分資料:
        A.  ARMSKY-LPC213X_214X教學實驗開發板原理圖.pdf(在配套光盤的“用戶使用手冊”文件夾中);
        B.  LPC213x User Manual.pdf或LPC214x User Manual.pdf(在配套光盤的“用戶使用手冊”文件夾中);
          LPC213X/214X的每個內部功能器件都和一組特定的寄存器相關,要想完成該功能器件所能實現的功能,就必須對這些相關的寄存器進行設置,這些寄存器的詳細說明,用戶可以在LPC213x User Manual.pdf或LPC214x User Manual.pdf中查看。
    (3)自己將實驗代碼重新寫一遍(一個字一個字的敲入計算機,請一定不要複製我們提供的現成代碼),然後在ADS1.2下進行調試;
    (4)看看是否可以用另外的方法實現實驗所要達到的效果,如果可以,可自己編寫代碼進行調試。
    經過以上四步的練習,相信初學者可以很好的掌握LPC213X/214X片內功能器件的使用,對ARM開發流程也有了比較深刻的體會。
     
    6.學ARM必搞嵌入式操作系統?
    很多ARM初學者有一個錯誤的概念——學ARM必搞嵌入式操作系統。認爲在ARM上跑嵌入式操作系統就代表技術先進、產品檔次高的觀點絕對是謬論。持這種觀點的人一定是沒有做過具體的產品開發。一個嵌入式產品是否需要跑嵌入式操作系統,是由很多因素決定的,例如,產品的功能需求、開發成本、開發週期等都是需要綜合考慮的。
    對於ARM初學者來說,前期我們並不建議使用嵌入式操作系統。當用戶把所有配套實驗都熟練掌握後,即對LPC213X/214X的內部功能器件可以做到熟練應用的程度後,可以考慮學習一個具體的嵌入式操作系統。
    目前,流行的嵌入式操作系統非常多,例如,uC/OS-II、WinCe、Linux、VxWorks等。對於初學者,我們慎重地推薦源碼公開的uC/OS-II嵌入式操作系統。uC/OS-II已經有很多產品成功使用的案例且得到了美國航空管理局的認證,北京航空航天大學出版社也出版了配套的專著。國內熟悉這個嵌入式操作系統的開發人員特別多,十分容易通過網站上的討論社區得到幫助,更關鍵的是,初學者可以很容易地通過閱讀源碼達到徹底掌握嵌入式操作系統的目的。在熟練掌握了uC/OS-II後,用戶已經從ARM初學者進入到了ARM應用開發工程師的行列。下一步可根據自己的知識背景、興趣愛好和開發領域,再選擇一個嵌入式操作系統(例如WinCE、Linux或VxWorks等)進行學習,徹底掌握ARM嵌入式系統開發。
     
    7.如何檢驗學習成果
            在經過一段時間的學習後,初學者一定想知道自己達到了一個怎樣的程度,我們給初學者提供一個檢查自己學習效果的方法:可以仿照我們的開發板,自己做一款類似的開發板出來。當然,沒有必要完全按照我們的設計,您可以在自己設計的開發板中加入更多的功能,配套更多的實驗。
     
    8.充分利用網絡資源,不恥下問!
    我們已經進入了信息大爆炸的時代,很多知識都可以通過網絡及時地獲得。在學習的過程中遇到困難時,可以通過網絡獲得幫助,只要我們虛心好學,不恥下問(當然要注意在網絡上尋求別人幫助的方式方法),一定會得到很多好心人的幫助,使自己每天都有所提高。
    9.知識是永遠學不完的——學海無涯、人生苦短
    學習ARM嵌入式開發,尤其對於初學者而言,不應該過早地、過多地將精力用在嵌入式系統移植、Linux內核的研究和學習上,這些誘人的“熱點”很容易使初學者迷失方向,進而忽視對基礎知識的深入學習,到頭來說得頭頭是道,可真的幹起來卻離實際的需求差得太遠。知識是永遠也學不完的——學海無涯、人生苦短!我們學習的目的是爲了滿足應用的需求。只要方法得當,掌握ARM嵌入式開發應用技術其實並不難。
     
    10.知識改變命運——學好ARM就有機會,只要努力終將成功!

  3. http://blog.chinaunix.net/uid-20692368-id-1892972.html

  1. --------------------------------------------------------------------------------------------------------------
  2. 十年研發經驗工程師的嵌入式學習書籍大推薦
  3. 從事嵌入式研發行業十年,認爲學習就是要不斷的吸納知識,在研發過程中,經常會遇到一些問題,這種發現問題並解決問題的過程就是進步。
    爲什麼選擇學習嵌入式?
    嵌入式系統無疑是當前最熱門最有發展前途的IT應用領域之一,同時也是當今IT領域僅存的幾個金領職位之一。當前的中國IT人才面臨嚴重的“後繼乏人”, 而且這種缺口由於培訓缺乏、教育模式等原因造成的,而缺口最大的,就是高級IT人才。如果你從事的IT培訓不專業,面對競爭越來越激烈的職場,基本找不到 工作。據專家預測,嵌入式每年人才缺口在30萬左右。
    嵌入式行業平均薪資分佈

    工欲善其事,必先利其器,除了推薦的書籍外,也推薦一下我用的開發板,我學習用的是飛凌的OK6410,感覺算是入門不錯的板子,剛剛看到他們官方微博貌似A8210ARM92416準備促銷呢,有50元的京東購物卡送,想入手的可以關注下
    ARM+Linux嵌入式底層內核驅動方向學習總體路線圖
     
    附上ARM學習路徑圖,希望對學習者能有所啓發。

    基礎學習Ⅰ---Linux入門
            目前嵌入式主要開發環境有 Linux、Wince等;Linux因其開源、開發操作便利而被廣泛採用。而Linux操作系統也只是一個簡單的操作系統,簡單的使用對於嵌入式開發人 員來說價值並不很高,真正有價值的是掌握Linux的基本服務和Linux的設計理念、思想,這對於嵌入式開發人員的長期發展是很極其重要的。Linux 系統有很多發行版,RedHat、Ubuntu、Fedora等。作爲嵌入式開發人員,我們沒有必要把精力放到使用哪個Linux發行版上,而是儘快把 Linux系統儘快安裝好。如果打算堅持長期學習,那麼建議您把自己的電腦做成雙系統,而不要在虛擬機上安裝。
    Ubuntu系統下載地址:http://www.ubuntu.org.cn/
    A)經典書籍推薦:
     
    B)經典學習視頻推薦:Linux操作系統入門
    基礎學習Ⅱ---C語言
        C語言是嵌入式開發必備的基礎知識。在Linux下從事C語言的開發,你會覺得更爲順暢、更爲自然,因爲C語言是因unix的出現而誕生的,Linux內 核幾乎完全是由C語言編寫完成的。學習C語言,如果不會用指針,那麼就稱不上會C語言。做嵌入式開發指針更顯得尤爲重要,所以做嵌入式開發除了掌握位操 作、限定詞等,對指針的掌握是不可或缺的。而且要掌握多級指針、函數指針等等。涉及到指針,那麼就會講到內存分配。在大學中,學習C語言一般的學習很少講 到內存分配,但是如果期望從事嵌入式開發,那麼就必須懂得C語言是怎麼做內存分配管理的。指針之外,還要學習模塊化編譯處理、指針與數組、gcc、 Makefile、GDB、遞歸、結構體、宏定義使用等。C語言是整棟嵌入式大廈的基礎,所以在學習嵌入式時,必須把C語言重視起來,多敲代碼,多練。一 名優秀的程序員必定是通過“體力勞動”再轉向“腦力勞動的”,這也是爲什麼我們要有“寫不出代碼=0”思想的原因所在。
        如 果說C語言相當於文字,那麼數據結構就相當於在造句、寫文章。代碼質量有一部分取決於對數據結構的掌握程度。在數據結構部分我們要把鏈表、樹、排序作 爲學習重點。而且我們也可以查看一些比較常見的函數(如strcopy、strcat、printf等)在內核中是如何實現的,以及編寫代碼模擬堆棧,這 不僅有利於編寫代碼質量的提高,而且還可以初步瞭解Linux內核精髓,爲今後工作打下堅實的基礎。
            C++、QT在嵌入式開發領域,是用來開發圖形界面的,希望從事上層應用開發及圖形界面,那麼在C++、QT方面需要比較深入的學習。  
    A)經典書籍推薦:   
     
     
    B)經典學習視頻推薦:C語言入門
    C)經典學習案例:
    1、學員成績管理系統2、計算器3、電子詞典4、文件壓縮器
    基礎進階---Linux應用程序設計
         Linux的思想源於Unix。Linux繼承了Unix的優點,但 是沒有用UNIX的代碼,所有程序都是重新編寫的,而且Linux與Unix的源碼級兼容。Linux是類Unix操作系統。Linux 不僅符合 POSIX 標準,而且還包括其它 UNIX 標準的多種特性,例如,UNIX 的 System V 接口文檔(System V Interface Document,SVID)和伯克利軟件發佈(Berkeley Software Distribution,BSD)版本。Linux 採用了折衷的策略,包含了 UNIX 幾個典型特性當中最實用的一些功能:
         Linux 採用了 SVR4 的進程間通信(IPC)機制:共享內存、消息隊列、信號。
         Linux 支持 BSD Socket 網絡編程接口。
         許多 Linux 發行版採用 SysV init 機制,支持運行級別。
    此階段的學習是從事嵌入式上層應用開發以及底層開發人員的必修課程。進程、線程、信號、文件鎖、socket是這部分內容的重點。要把這些內容學的透徹非 要下些苦功夫不可。而且函數是系統提供給我們的,難免要對計算機系統深入理解一番。TCP/IP協議也是要涉及到的。有問題建議用Google搜索及登陸 chinaunix論壇。通過這個階段的學習,我們就可以初步實現一些應用程序的開發了,如做自己的shell命令解析器、簡單的聊天軟件、視頻多播等。

    A)經典書籍推薦:
     
    B)經典學習視頻推薦:Linux環境高級編程
    C)經典學習案例:
    1、串口監聽程序   2、圖片瀏覽器      3、MP3播放器        4、聊天程序         5、 ftp程序
    6、音頻廣播程序   7、ping的實現     8、DDos攻擊程序   9、ARP攻擊程序
    嵌入式入門---ARM體系結構
        從這部分開始,我們將真正進入嵌入式開發學習階段。首先我們要知道採用哪種處理器。目前通用嵌入式處理器有ARM、MIPS、PowerPC、X86等。 從市場產品佔有率上看,ARM處理器遠遠領先於同類其它處理器,並逐步掠奪傳統51單片機和英特爾市場份額。據招聘網站統計,目前用人單位在技術水平上要 求開發人員掌握ARM9及以上平臺的開發技術。ARM公司在發佈ARM11產品後,更改以往的數字標記更新方式,轉爲發佈ARM Cortex。但是Cortex並不是更高端,而是全新系列的處理器,比如Cortex M3,它主要應用於機械加工、工控領域,目的是取代以前的ARM7處理器。
        在開始學習前,建議有一塊自己的開發板,目前ARM9 2440的開發板價格在400-600元之間,ARM11 6410的開發板價格要高一些,最便宜的也要1200元以上。在此,提醒大家儘量不要買mini開發板,雖然mini開發板的價格要便宜些,但是與正常開 發板相比,mini板功能是不完善的。嵌入式彙編有別於X86彙編,所以如果以前沒有接觸過彙編語言,那麼沒有必要先去學X86彙編再學嵌入式彙編,可以 直接學習嵌入式彙編。除了彙編我們還要學習ARM指令集。有了開發板,我們要下載相對應處理器的DataSheet及開發板電路原理圖。ARM體系結構的 學習我們是不能完全照抄別人代碼的,因爲我們自己手中的開發板及處理器與別人是不同的,除非所用的代碼是根據你手中的開發板來編寫的。所以,我們要先去看 書、看視頻資料理解原理及工作方式等,然後根據自己開發板的電路原理圖和DataSheet來編寫代碼,達到理解外圍設備工作原理和操作硬件的目的。
     
    B)經典學習視頻推薦:
    1)  嵌入式掃盲篇——十問嵌入式
    2)ARM體系結構與Bootloader開發
    3)嵌入式ARM Linux開發——ARM彙編
    C)經典學習案例:
    1. ARM模擬器開發       2. Watchdog控制程序        3. RTC時鐘控制程序
    4. Uart控制程序            5. LCD控制程序                    6. 觸摸屏控制程序
    7. DMA控制程序          8. 音頻控制程序                    9. 網卡控制程序
    10. 文件系統製作        11. ARM-Linux移植
    嵌入式提升---Linux內核、驅動
             衆所周知嵌入式開發包含至少兩個級別,一個是嵌入式內核驅動級別,另外一個是嵌入式應用層開發,而薪酬高的、最具價值的無疑是嵌入式內核驅動級別的開發 者。真正的嵌入式高手或者企業中的核心開發人員,一定是嵌入式底層的內核驅動開發工程師,這些工程師成長比較緩慢,造成對內核驅動人才的大量需求,所以這 些人才是真正企業需要的香餑餑。掌握驅動開發會讓自己的核心能力有極大的飛躍,真正實現嵌入式最有價值的就業。
             由於Linux內核更新速度很快,書籍和視頻不可能及時更新,所以我們再看書和視頻後,要自己動手下載內核源碼包,去看內核中的代碼,在這裏可以充分檢驗 C語言、數據結構等基礎知識的掌握程度。而驅動的編寫還是要藉助外設硬件電路原理圖和芯片手冊。內核和驅動的知識是讓我們根據不同的硬件,編寫對應的驅 動、合理剪裁內核、製作文件系統,並移植到硬件開發板上。如果手裏有ARM11 6410及以上的開發板,可以試試在裸板上編寫驅動並移植Android系統到開發板上吧。
     
    B)經典學習案例:
    1. GPIO驅動                2. RTC時鐘驅動   3. WatchDog驅動   4. Udev移植      5. 觸摸屏輸入設備驅動
    6. LCD顯示設備驅動   7. DMA驅動        8. 音頻設備驅動        9. Nand Flash塊設備驅動  10. 網絡設備驅動
    硬件工程師的書籍(等等)
     
     



    ------------------------------------------------------------------------------------------------------------------
  4. 嵌入式開發入門之經典
    開始進入嵌入式世界,真是一頭霧水,不知道如何入手!也不知道該如何學習,學習什麼,最近從網上轉載這篇文章,對我啓發很大,對於初始進入嵌入式的人們很有幫組,好多嵌入式大俠都說這是入門的最好文章.
    1、抓住51開發ARM
      這幾個月來我一直都爬在51的問題,自己都有一點笑自己了,用了4個月的時間,來鞏固51的原理和程序,還好我自己算是走過來了,自己笨,身邊的高才生又看不上51的原理,他們都比較“牛”,說51過時了,你問那個做什麼???我比較鬱悶!過時嗎?我有一點懷疑?
      他們不願意說有他們自己的理由,沒有人強求,靠自己好了。
      我自己個人的觀點:51是一個基礎,而且還很重要,這是再我看了ARM之後感覺到的。它可以加速你的ARM學習速度,真得!不相信你試一試好了。
      凡是要求一個速度、效率,不要做一些無用功,抓緊身邊的每一個一分鐘,人是活的,東西(知識、書)是死得,想要做的事情因此就簡單了。

    2、在網上看到的一篇很不錯的ARM文章,粘貼過來,爲了和像我一樣在很少有人幫助的情況下自學ARM的難兄難弟們

    ? ARM怎麼入門?

    ? 我不是高手,仍然是菜鳥。但是回想起自己當時的迷茫,特意寫了這篇東西,當作給和我一樣的兄弟姐妹的幫助吧。問這個問題的人多半不是已經工作的工程師,而是和我一樣是學生,所以這篇筆記就把看家當成我一樣的菜鳥,高手勿怪。

      首先聲明:本人還沒有找工作,事實上處於研究生剛畢業,還沒開始找工作的空閒時間,44B0只是興趣所在,打發時間。

      所有看法完全是自己的感受,不代表任何他人。錯了的觀點各位幫我糾正。再次補充:很多朋友看了上面的話就問我爲什麼研究生畢業了還不找工作:)說是打 發時間,其實是因爲研究生的時候帶了一個項目,申請提前畢業以後項目還有塊尾巴,答應導師把項目做完再走:)就這麼簡單。男人總點負點責,呵呵

      以下問題常被問到,我就想到哪說到哪吧:

    一、首先說說ARM的發展

    ? 可以用一片大好來形容,翻開各個公司的網站,招聘裏面嵌入式佔據了大半工程師職位。廣義的嵌入式無非幾種:傳統的什麼51、AVR、PIC稱做嵌入式 微控制器;ARM是嵌入式微處理器;DSP;FPGA。客觀的講,工作需求量上DSP的需求比ARM要多,而ARM和FPGA差不多。DSP因爲數字處理 與通信領域的空前發展而火暴,小到MP3 射象頭,大到我們軍品裏的控制器,應用面很廣。

    ? FPGA的兄弟一般做ANSIC(特殊芯片設計,好象是這麼翻譯的)。而ARM單純說來並不比一個單片機強多少,但是它的獨特就在於不斷下降的價格和提升的性能。這完全依靠於ARM公司的戰略,厲害!!很佩服他們的戰略眼光!!

      值得注意的是:在找工作中,企業(著名的,小的不算)對單純的ARM硬件開發工程師並不比單片機重視,很少有大企業的職位裏寫“從事過ARM開發優先”。寫的多的是什麼?“嵌入式LINUX”到這相信大家看出來了吧,需要的是硬件中的軟件。

    二、ARM是硬件還是軟件

      很難說,ARM是硬件,LINUX是軟件。ARM的硬件多半已經模塊化了,像我這樣把板子改成這樣的就算動的多的了,這同樣是ARM公司的戰略,再次佩服。實際中的LINUX的開發工作更多,更耗時。從這方面說ARM應該算是軟件了。

      在找工作中更是這樣,舉個例子,聯想裏和ARM最接近的是“BIOS工程師”是軟件,MOTO裏接近的是嵌入式LINUX工程師是軟件。而其他很多公 司把嵌入式產品開發歸爲硬件。所以,不要討論這個,好好玩轉自己的板子纔是關鍵。實在不爽你就把自己叫“嵌入式開發工程師”。

    三、要不要買開發板&買哪家
       
    ? 我的答案是“在你個人的學習方法”,但是如果看家是需要看這騙筆記的水平,個人推薦還是買現成的。

    1、買

      買板子可以把注意力集中在軟件開發上,軟件開發(尤其是驅動)可以不必擔心自己硬件上的問題,我就是以便調試一邊寫驅動和程序,每次寫驅動前就要先確 認硬件沒問題。另外,買板子更省錢和時間,我自己做的板子,原理圖PCB花了2周以上!製版又15天,回來以後焊接44B0160個腳!那叫一個麻煩~~ 花了多少錢呢?2層板,製版費就300塊!當然我把接口都外引了,還做了個20X18的LCD背板,板子比較大。總體下來 元件+LCD 屏+PCB=11XX塊!
    2、做

      自己做可以更瞭解底層硬件,可以按照自己的要求加東西,比如我就加了GPS模塊、 GPRS模塊 、SD卡模塊,擴了個IIC的35個鍵子的鍵盤、把 LCD接口按照買的LCD改裝了,可以用FPC線直接連接。做的很爽的。玩一把嗎。當然,你可以有策略的做,比如像我一樣,把RAM和ROM,網絡都保持 和某現成的板子一樣,這樣他們的資料你就可以拿過來直接用,給自己留個退路。其他的如SD了 什麼的自己做。都達到了~~就是費錢,費時間。再有就是給做 的朋友幾點建議:儘量拿到現成的板子,儘量多蒐集其他板子的全套資料,一定要拿到一張沒問題的原理圖。網上流傳的原理圖多數是龔俊03年畫的,再這裏對龔 俊表達一下我的敬意!!牛人!但是那個圖有個小BUG,我指的是03版的,後來的沒這問題了。8019那地址線和地址有問題。還有人仿照他的PDF圖畫的 SCH,更是漏洞百出!譴責!順便譴責把龔俊板子偷賣的人。

    3、買哪家

    ? 個人感覺分3類吧:

      1)首先是上海無線龍的,資料非常的全,感覺他是真正想教你怎麼開發ARM,而不是像有的公司自己技術都沒做好就做個板子出來賣錢UCLINUX。價 格也合理,一個ARM開發板也只要幾百塊錢,ARM9最適合做工業控制,ARM普及,銷量都是怎麼來的?都是ARM9來的。但是,這裏如果你看中的是爲工 作做準備,還是選能跑UCLINUX的吧。但是仍然作爲第一個推薦,因爲菜鳥時期,合適的資料太重要了!!在這裏被無線龍的務實精神感動!你看人家那代碼 寫的。

       2)感覺立宇泰的也不錯,硬件沒別的,就是資料比較全的說,不像有些家,原理圖直接拿人家的,還錯的~~

       
    四、要不要有51 AVR等單片機基礎

    ? 有更好,但沒有也無所謂。兩個月以前,我只是看別人做,耳濡目染~~,本科學過單片機,從來沒做過。我們這的技術主幹做AVR和51,我就跟他們調過 C語言程序。你看出來了?我是個不折不扣的菜鳥吧?但是做這個之前我特意找了ZLG的兩本書,看了裏面的例子和原理圖,這很重要。例程裏有彙編有C,都看 懂了就OK,不用自己現寫!

    五、開發都需要學習哪些軟件

    ? 總結起來最主要的有以下幾個吧:

    1、ADS調試用

    ? 確切的說是ADS+AXD。ADS裏包含AXD。原來都用SDT後來ARM公司停止對SDT支持了,改支持ADS了,還是用ADS吧。
    有的人的程序發佈的仍然是SDT版本的,但基本都可以找到相應ADS的,新人在這裏不要發矇。ADS是編譯器,AXD是調試器。便宜成AXF以後再在ARM的RAM裏調試。

    2、PLASHPGM

    ? FLASH燒寫的軟件。AXD在RAM裏調試,掉電就沒有了,方便程序修改。調試好的程序再下到FLASH裏,上電直接運行。
    同類的軟件還有很多,什麼FLUTED了、FLSHP了都是,但FLASHPGM最好,要是有人還問FLASH不支持BIN格式文件的問題就要看我寫的PLASHPGM使用了。

    3、BANYANT調試代理(不知道名對不,起這麼個難記的,我一般都叫它“半羊”因爲知道它那幾天剛吃了烤羊)

    ? 調試代理就是用它幫你使用更簡單的JTAG(便宜啊)來實現原本1K才賣的JTAG仿真器的大部分功能。JTAG調試原理看我另一篇筆記。簡單的就可 以把他理解爲你自己做的JTAG的驅動就行了。調試代理還有很多種,什麼H-JTAG了、ARM7了(不知道具體叫什麼,就記得可執行文件叫 ARM7.EXE)都是,BANYANT比較好。需要注意的是,沒種調試代理安裝方法雖然都簡單 但都不一樣,需要看說明。而且AXD調試之前都要運行。 省錢了,就別怕麻煩了。

    4、ARM-ELF-TOOLS工具鏈

    ? 裏面是UCLINUX開發用的工具比如ARM-ELF-GCC只類的。工具鏈就是把很多工具打包在一起發佈的方便你開發的東西。具體安裝方法看我另一篇筆記。另外如果你開發LINUX就要用ARM-LINUX-TOOLS,不一樣,不通用。

    5、U-BOOT

    ? 大名鼎鼎的BOOTLOADER生成工具,同類的好象還有VIVI(名字很曖昧~~),生成的BOOTLOADER燒到FLASH裏,然後就可以用 BOOTLOADER下載燒寫其他了。有了BOOTLOADER才能下UCLINUX。BOOTLOADER就像電腦上的BIOS。當然UCOS的不用這 個,用什麼我不知道:)最新版本是1.1.4 具體使用方法看我另一篇筆記吧。

    6、UCLINUX包

    ? UCLINUX的源碼包,不用多說了吧?建議大家用現成的先體會一下,然後再自己編譯,裁剪。因爲單獨UCLINUX的編輯技術上比較簡單,但涉及的方面還是比較廣的。

    7、VMWARE

    ? 老牌的虛擬機軟件,在一個機器上虛擬出一個機器裝LINUX(PC上用的),省得你來回開關機了。記得裝VMWARE-TOOLS,安裝方法在我另一篇筆記裏。

    六、有哪些書推薦

    ? 主要推薦ZLG的三本書,有這3本再加網絡就不用別的書了,其中主要推薦前2本,3是介紹體系結構的,也不錯:

    1、ARM嵌入式LINUX系統構建與驅動開發,北航版,驅動寫的很詳細,前期開發介紹也很好
    2、ARM 嵌入式系統實驗教程(二),北航版,有ZLG2200的原理圖,實驗程序和註釋,瞭解人家是怎麼開發的。
    3、ARM嵌入式系統基礎教程,最重要的是體系結構,彙編部分介紹,看看吧,增加理論素質。
    4、44B0數據手冊,寫在這裏是強調它的重要。

    不推薦ZLG早期出的紅色皮的ARM什麼體系結構~只類的,寫的太多,看煩了。其他的書沒了幾本,沒看見好的,大家有看過的推薦吧。

    七、選UCOS?UCLINUX?LINUX?VXWORKS?還是當單片機用

    1、搞開發,工程設計,用UCOS,小巧,多進程,簡單,體現了ARM7的精髓。
    2、LINUX 正根的嵌入式系統,LINUX消費與通信領域用的比較多,但缺點是必須ARM9才能跑,ARM9的板子自己做就不行了,6層板太貴。買開發板1K達底吧。但是還是推薦選ARM9+LINUX
    3、UCLINUX 算投機嵌入式系統:)ARM7上可以跑,由有LINUX近親,學好好可以比較方便的轉向LINUX,像我一樣的窮鬼用吧,呵呵
    4、VXWORKS,學好後可以找到高薪工作,但工作機會本身並不比LINUX好找。
    5、當單片機用,不推薦,雖然我景仰的ZLG一直號召這麼幹。因爲對於學習來說多進程的系統設計纔是ARM7的玩頭,至少你也要整個UCOS啊:)

    ? 有朋友問我先學這個當基礎不行嗎?那當然可以~~但我當時就用了1周搞定,就是我先的ADS在RAM中調試的筆記。後來我清空FLASH用的小段程序 還是當時寫的LED閃爍程序呢。另外1周裏其中還因爲自己過於菜,沒把OM設置好導致晶陣不陣哈哈。這個是必須做的,但一帶而過。目標放的遠一點。

    八、學習要用多長時間

    ? 我從菜鳥到現在兩個多月,中間被打擾數次。仍然搞定了PCB設計與製版,RAM調試,FLASH下載,UBOOT移植和下載UCLINUX(沒剪裁, 用現成的),LCD驅動。再次坦誠的說:我確實比較菜,說這些不是讓大家羨慕,只是告訴你們“你們應該比這個更好”,我相信良好的態度+合適的方法+及時 的總結=成績!

    九、ARM都玩什麼

    就幾點:
    1、硬件設計
    2、系統移植
    3、驅動開發
    4、應用開發

    沒了。其中推薦把注意力放在後兩個上,3有難度,4比較靈活,最重要的是都是找工作的砝碼。

    十、我用的什麼板子

    很多人問我這個問題,我特意寫過一個的。再說一次吧。我是自己做的,RAM、ROM、8019等比較麻煩而當時的自己不理解的都按照龔俊的做的。保持其他不便的情況下做了如下改動。

    1、加了串口通信的GPS模塊、 GPRS模塊,一個UART0,一個UART1,當與要用超級終端時用跳線切換。
    2、SD卡,和7843觸摸屏,同時掛在SPI總線上,因爲SPI只能掛一個設備,同時還做了I/O模擬的準備,把兩個設備又通過跳線掛在4個IO上。
    3、擴了個IIC的35個鍵子的鍵盤,用的ZLG的7290,不佔用CPU,最大支持64個鍵子,只上了35個,其他留接口。
    4、把LCD接口按照買的LCD改裝了,可以用FPC線直接連接。
    這種開發板國內有很多,做的比較規範的是上海無線龍有限公司<script> &lt;!-- document.write('&lt;a target=_blank rel=&quot;nofollow&quot; href=http://www.wxlsoc.com&gt;www.wxlsoc.com&lt;/a&gt;'); //--&gt; </script>www.wxlsoc.com )!

    所以改動雖然多,但真正很移植了,初期調試有關的並沒動,就是爲了現在不那麼菜的時候做準備:)

    十一、開發流程

    這裏是我的開發流程:

    1、設計原理圖(含WIGGLER的JTAG訪真器)
    2、設計PCB(含WIGGLER的JTAG訪真器)
    3、製版
    4、焊接電壓,確定電壓沒問題
    5、焊接44B0+JTAG電路+WIGGLER的JTAG訪真器+周邊電路,用BANYANT+仿真器連接,BANYANT提示錯誤,但可以顯示44B0編號,好象是0X0F0F0F0F只類的,說明44B0沒問題
    6、焊接晶體+RAM+ROM+周邊電路,用BANYANT+仿真器連接,可以顯示正確的44B0了
    7、用BANYANT+仿真器連接,開AXD,在命令行窗口操作RAM,看可不可以修改,可以的話(用內存窗口看RAM地址)RAM就沒問題,可以用這個 命令“setmem 0xc000000,0xffffffff,32”,我的RAM掛在BANK6上 所以地址是0XC000000,你要是改了就也得 改。
    8、用我寫的《自己寫了個C工程模板又寫了個使用說明 》裏的方法調試程序吧,寫個簡單的,我當時寫個LED閃爍的。看好使不。
    9、把程序按照《FLASH燒寫總結 》裏的燒到FLASH裏,測試一下
    10、按照《UBOOT 移植操作》移植UBOOT?
    11、按照《UCLINUX下載簡單說明》下個UCLINUX
    12、看看驅動開發的方法,自己寫個驅動看看
    13、還有很多事東西着你玩 呵呵

    十二、關於JTAG訪真器

    ? JTAG訪真器現在用的多是簡板的,一個244那種,用的沒什麼不好。按照並口定義不同分幾種,建議選WIFFLER定義的,因爲支持的軟件多。這個 網上多的是,不多說了。值得提的是有的JTAG訪真器原理圖上有跳線用來使能復位信號,這個一般不跳上。就是不用復位信號,因爲JTAG協議裏本身也可以 控制44B0復位。當然,板子上的復位信號跳線也不用跳。

    十三、哪個公司的ARM

    這個是問題比較簡單:

    1、ARM9主要就幾個公司,本人覺得上海無線龍(www.wxlsoc.com)的不錯
    2、ARM9,這個玩2480和2430的多吧,現在2430還比較火啊 可以考慮買個了,作爲學習來說反到和不錯,推薦整一個:)其實ARM9用的最多 的領域應該是消費電子,比如手機PDA,而這上面用的多的應該是INTEL的和TI的吧。但是INTEL的TI的入門材料少,價格高,自己看情況定吧

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章