嵌入式開發總結

讀大學時學過計算機組成原理、操作系統、計算機網絡等等課程,但是大學生都知道,上完那些課只是懂一點皮毛而已,打打醬油就過去了。特別是對於軟件工程師,一定要多實踐、多思考才行。理論知識顯得並沒有搞硬件或者偏硬件開發的那麼重要,因爲軟件的重點在於邏輯和算法。

    我認爲,在中、高級階段,偏硬莫非就是一種知識活兒,而偏軟莫非就是一種體力活兒……只有到達專家階段才能夠有所突破。對比一下培訓機構的軟件開發和硬件開發的培訓費用就知道了,一般的軟件培訓(JAVA/C++/PHP/C#),收費大概是一個月3000,強調是“一個月”,一般的培訓都是2~6個月,所以總費用少則幾千,多則上萬。而嵌入式的培訓費則是按天計算,1天大概500,強調是“1天”,一般的培訓是一週,也有培訓半年的,但是費用也相當高!由此可見,嵌入式的課程含金量很高。軟件開發,特別是網站開發,比嵌入式辛苦多了。

    如果你兩者皆不瞭解,那麼我推薦你選擇偏硬件的方向,實惠很多。綜合其他前輩的經驗,嵌入式開發是個不錯的工作,應該比公務員都還好,而且比較適合女生,因爲涉及很多知識,女生在這方面比較在行,但要學好大學裏面的課程,比如數字邏輯、電路分析、微機原理、單片機等等,理論很重要。理論面前,男女平等。

    而軟件工程師就業也很容易,這些天很火爆的消息就是“CSDN等網站被黑”,接踵而至的就是“傳智播客創始人、中關村黑馬程序員總負責人張孝祥老師急病突發意外逝世,終年38歲”,張孝祥何許人也?你可能不知道,但是對我來說卻是如雷貫耳。就我知道的情況,目前黑馬程序員訓練營3個多月培訓出來的學生,平均薪資大概8000,這裏面有高中生,有大學生,也有研究生,但多數是大專或大學本科學生,具體薪酬在4500~15000之間,而且千真萬確,我沒有一點吹噓。類似的培訓機構還很多,尚觀、達內、軟通、安博、國信藍點…………這個省略號還很長。軟件開發的培訓週期都在1~4個月之間,就業薪資至少都承諾3000以上,一般都在4000左右。

    他們就業很容易,我理解。但是他們起薪就六、七千的,我就有些不淡定了。校園招聘,自己這麼多個Offer,普遍開價都在3000~4500,上5K的公司就很少了,華爲和騰訊校園招聘時開的工資都是6000。同學的5K就已經讓很多人羨慕……但是要淡定,一定要淡定,不要把工資看得那麼重要。據我所知,傳智播客的老師月薪2.5W以上,國信藍點的老師也有1.2W,是否說明工資越多人就越幸福健康?作爲傳智播客的老闆,張孝祥有錢吧,但是他卻非常樸素、非常忙,曾經還跑去發傳單……志向不同,追求不同。

    境界。我靜下心來看書、做項目,我發現有些東西確實可以在短短兩、三個月內學通,即使說今年做Linux C/C++開發,明年做JavaEE、Android開發,後年去做硬件開發、驅動開發,那都是沒問題的。問題是,你喜歡做什麼?你想要達到哪種境界?

 

嵌入式開發知識總結

一、基礎知識

 

目前流行的嵌入式操作系統有:Linux、uC/OS、WindowsCE、VxWorks、PalmOS和QNX。其中VxWorks實時性很強,最穩定、可靠,但價格昂貴,而其他的都有各自的優點。

 

ARM公司(原名Advanced RISC Machine),主要是研發ARM系列微處理器(出售IP,即知識產權),目前全世界有幾十家著名的半導體公司都使用ARM公司的授權,包括Motorola、IBM、Intel、SONY、LG等。ARM微處理器已成爲RISC標準。目前基於ARM核的處理器有以下幾種:

ARM7/9 Thumb家族

ARM9/10E家族

ARM 11家族

ARM Cortex家族

SecurCore家族

OptimoDE Data Engine家族

MPCore Multiprocessors家族

Intel公司的StrongARM(相當於ARM8)和Xscale。

 

ARM7處理器採用了ARMV4T(馮諾依曼)體系結構。目前主流的ARM7內核是ARM7TDMI(最常用)、ARM7TDMI-S、ARM720T和ARM7EJ-S。T代表支持Thumb指令集,D代表支持片上調試,M代表內嵌硬件乘法器,I代表支持片上斷點和調試點。

 

ARM9處理器採用改進型哈佛體系結構。採用五級流水處理及分離的Cache結構。常見的系列有:ARM920T、ARM922T和ARM940T。

 

Xscale是基於ARMv5TE體系結構,是一款性能全、性價比高、功耗低的處理器。支持16位的Thumb指令和DSP指令集。

 

Cortex,按傳統的命名方法,Cortex可以看做ARM12。ARM公司推出了Cortex-A/R/M三個系列。

 

還有ARM9E、ARM11、MPCore、StrongARM等,略。

 

目前比較經典的是基於三星ARM9的S3C2440的開發板,這個系列的資料很多。最流行的是基於三星ARM11的S3C6410開發板,可以跑Android,尚觀嵌入式學院都是用的這種板子。

 

ARM體系結構的變種

Thumb指令集(T變種)是將ARM指令集重新編碼形成的一個子集。常見的ARMv5T使用v2版的Thumb指令集。

此外,還有長乘法指令(M變種),增強型DSP指令(E變種),Java加速器Jazelle(J變種)和ARM媒體功能擴展(SIMD變種)。

 

 

二、開發流程

    不管系統多麼複雜,一般都是以最小系統爲基礎,通過加入所需的功能模塊構成的。最小系統大概包括電源電路、時鐘電路、復位電路、外擴的存儲系統和調試接口。

 

1、硬件設計

    首先要進行實驗板硬件資源規劃,例如在最小系統的基礎上擴充I2C存儲器、串行接口、網絡接口、USB接口、觸摸屏接口,以及按鍵、蜂鳴器等。

    然後設計硬件電路,包括電源電路、復位電路、時鐘微處理器電路、外部存儲器電路電路、網絡接口電路等等,這一部分貌似比較有難度。許多公司也都是出售組裝好的開發板。

    PCB的設計,要考慮到抗高頻干擾、信號完整性、差分佈線等。焊接好元件之後還要調試電路。

 

2、軟件的移植與開發

    軟件系統的移植主要包括Bootloader的移植、Linux操作系統的移植(包括內核和文件系統的移植)以及針對實驗板的驅動程序的編寫等。

1)準備交叉編譯工具

2)引導加載程序的移植(例如vivi、U-Boot)

3)內核的移植

4)根文件系統的移植

5)驅動程序的編寫

6)其他,例如JTAG測試。

 

三、移植Linux內核

基本步驟爲:

 

1)獲取某一版本的Linux內核源碼,根據具體目標平臺對內核源碼進行必要的改寫,主要是修改體系結構相關的部分。

 

PS:顯然,對內核源碼的修改很有難度,它既要求開發者對Linux內核結構非常熟悉,對目標平臺的硬件結構也非常熟悉,而且要有良好的彙編基礎。這一部分的工作一般都是目標平臺提供商完成的,而且主要的東西是ARM公司的工程師來完成,由他們提供相關版本的Linux內核的補丁,然後把補丁打到我們所用的Linux內核上,經過必要的配置和交叉編譯就行了。所以說,內核的定製和改寫難度很大,一般的軟件工程師和硬件工程師都很難勝任。

 

2)打補丁,然後配置內核,調出內核配置界面,選上某些選項或者去掉某些選項,配置選項非常多,而且某些選項之間有關聯,所以說這一步比較有難度。下面列出一些配置項,每個配置項都可以選擇Y(將該功能編譯進內核)、N、M(編譯成可以在需要時動態加載的模塊)。

Code maturity level options(代碼成熟度選項)

General setup(通用設置)

Networkong deveices(包括很多子選項dummy net driver support,PLIP support,SCSI device support等)

 

3)編譯內核,用幾個命令就可以編譯內核了。#make clean,#make dep,#make zImage。

 

4)移植根文件系統,內核編譯完之後,可以運行各種命令並支持各種功能的中央處理器,但是如果缺少了內存、硬盤等設備也不能正常運行。根文件系統中存放了Linux系統所需要得各種程序文件,沒有這些文件內核無法正常工作。同樣,要移植根文件系統需要清楚Linux的運行機制,比較麻煩。所以一般都使用Busybox這個工具。安裝配置Busybox,向Busybox添加命令,構造根文件系統,製作根文件系統映像文件(形如initrd.gz)。

 

5)使用U-Boot製作、下載內核。U-Boot支持uImage格式的內核文件。啓動內核,然後使用U-Boot加載根文件系統映像。

 

四、開發環境的建立

    一般宿主機推薦用Red Hat9.0,需要宿主機在硬件上有標準串口、並口、網口;軟件上具有目標板的Linux內核、ramdisk文件系統映像以及Bootloader。軟件的更新通常使用串口或網口,最初的Bootloader燒寫是通過JTAG進行的。

    首先要在宿主機上建立交叉編譯調試的開發環境,許多開發板配有光盤能實現自動安裝。用minicom作爲被開發目標板的終端,開發前要正確的配置minicom。然後配置TFTP(簡單文件傳輸協議),用於在目標板和宿主機之間傳輸文件。配置NFS,以便終端機能共享宿主機的文件。

 

實驗1 編譯Bootloader

    很簡單。一種常見的Bootloader是PPCBoot,另一種是vivi。

 

實驗2 編譯Linux內核

    用幾個命令就可以編譯內核文件,編譯後就要配置,配置稍微繁瑣一點。但是每個選項在網上都可以找到相應的配置方法。

實驗3 製作文件系統及程序的燒寫

實驗4 燒寫各部分到目標板


實驗5 交叉編譯並運行簡單程序

    打開minicom開啓實驗板電源,掛載實驗板。編譯C語言的命令形如:

/opt/host/armv4l/bin/armv4l-unknown-linux-gcc -o HelloWorld HelloWorld.c

 

實驗6 簡單驅動程序的編寫

    編寫一個簡單字符設備的驅動程序。該程序非常簡單,但是涉及到很多系統硬件的知識。if,for,switch,static,define這些關鍵字用得很多,也涉及到結構體,涉及到直接對地址的操作、位運算。涉及到物理設備,中斷等一些知識。

 

其實,顯而易見,驅動開發更靠近硬件一些,程序方面主要是熟練C語言就可以了。驅動開發的最大喜悅就是把物理設備給驅動起來的,並儘量使驅動不出問題,物理設備能夠正常運行。

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