有些技術確實可以在兩、三個月內學通,嵌入式開發經驗總結 讀大學時學過計算機組成原理、操作系統、計算機網絡等等課程,但是大學生都知道,上完那些課只是懂一點皮毛而已,打打醬油就過去了。特別是對于軟件工程師,一定要多實踐、多思考才行。理論知識顯得并沒有搞硬件或者偏硬件開發的那么重要,因為軟件的重點在于邏輯和算法。 個人認為,在中、高級階段,偏硬莫非就是一種知識活兒,而偏軟莫非就是一種體力活兒……只有到達專家階段才能夠有所突破。對比一下培訓機構的軟件開發和硬件開發的培訓費用就知道了,一般的軟件培訓(Java/C++/PHP/C#),收費大概是一個月3000,強調是“一個月”,一般的培訓都是2~6個月,所以總費用少則幾千,多則上萬。而嵌入式的培訓費則是按天計算,1天大概500,強調是“1天”,一般的培訓是一周,也有培訓半年的,但是費用也相當高!由此可見,嵌入式的課程含金量很高。軟件開發,特別是網站開發,比嵌入式辛苦多了。 如果硬件和軟件兩者皆不了解,那么推薦你選擇偏硬件的方向,實惠很多。綜合其他前輩的經驗,嵌入式開發是個不錯的工作,應該比公務員都還好,但要學好大學里面的課程,比如數字邏輯、電路分析、微機原理、單片機等等,理論很重要。理論面前,男女平等。 靜下心來看書、做項目,你會發現有些東西確實可以在短短兩、三個月內學通,即使說你今年做LinuxC/C++開發,明年做JavaEE、Android開發,后年去做硬件開發、驅動開發,那都是沒問題的。問題是,你喜歡做什么?你想要達到哪種境界? 嵌入式開發知識總結 一、基礎知識 目前流行的嵌入式操作系統有:linux、uC/OS、WindowsCE、VxWorks、PalmOS和QNX。其中VxWorks實時性很強,最穩定、可靠,但價格昂貴,而其他的都有各自的優點。 ARM公司(原名Advanced RISC Machine),主要是研發ARM系列微處理器(出售IP,即知識產權),目前全世界有幾十家著名的半導體公司都使用ARM公司的授權,包括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語言就可以了。驅動開發的最大喜悅就是把物理設備給驅動起來的,并盡量使驅動不出問題,物理設備能夠正常運行。 想學習的你和我聯系預約就可以免費聽課了。 以下課程可免費試聽C語言、電子、PCB、STM32、Linux、FPGA、JAVA、安卓等。 宋工企鵝號:3524-6590-88 Tel/WX:173--1795--1908 ![]() |