有些技術(shù)確實(shí)可以在兩、三個(gè)月內(nèi)學(xué)通,嵌入式開(kāi)發(fā)經(jīng)驗(yàn)總結(jié) 讀大學(xué)時(shí)學(xué)過(guò)計(jì)算機(jī)組成原理、操作系統(tǒng)、計(jì)算機(jī)網(wǎng)絡(luò)等等課程,但是大學(xué)生都知道,上完那些課只是懂一點(diǎn)皮毛而已,打打醬油就過(guò)去了。特別是對(duì)于軟件工程師,一定要多實(shí)踐、多思考才行。理論知識(shí)顯得并沒(méi)有搞硬件或者偏硬件開(kāi)發(fā)的那么重要,因?yàn)檐浖闹攸c(diǎn)在于邏輯和算法。 個(gè)人認(rèn)為,在中、高級(jí)階段,偏硬莫非就是一種知識(shí)活兒,而偏軟莫非就是一種體力活兒……只有到達(dá)專家階段才能夠有所突破。對(duì)比一下培訓(xùn)機(jī)構(gòu)的軟件開(kāi)發(fā)和硬件開(kāi)發(fā)的培訓(xùn)費(fèi)用就知道了,一般的軟件培訓(xùn)(Java/C++/PHP/C#),收費(fèi)大概是一個(gè)月3000,強(qiáng)調(diào)是“一個(gè)月”,一般的培訓(xùn)都是2~6個(gè)月,所以總費(fèi)用少則幾千,多則上萬(wàn)。而嵌入式的培訓(xùn)費(fèi)則是按天計(jì)算,1天大概500,強(qiáng)調(diào)是“1天”,一般的培訓(xùn)是一周,也有培訓(xùn)半年的,但是費(fèi)用也相當(dāng)高!由此可見(jiàn),嵌入式的課程含金量很高。軟件開(kāi)發(fā),特別是網(wǎng)站開(kāi)發(fā),比嵌入式辛苦多了。 如果硬件和軟件兩者皆不了解,那么推薦你選擇偏硬件的方向,實(shí)惠很多。綜合其他前輩的經(jīng)驗(yàn),嵌入式開(kāi)發(fā)是個(gè)不錯(cuò)的工作,應(yīng)該比公務(wù)員都還好,但要學(xué)好大學(xué)里面的課程,比如數(shù)字邏輯、電路分析、微機(jī)原理、單片機(jī)等等,理論很重要。理論面前,男女平等。 靜下心來(lái)看書(shū)、做項(xiàng)目,你會(huì)發(fā)現(xiàn)有些東西確實(shí)可以在短短兩、三個(gè)月內(nèi)學(xué)通,即使說(shuō)你今年做LinuxC/C++開(kāi)發(fā),明年做JavaEE、Android開(kāi)發(fā),后年去做硬件開(kāi)發(fā)、驅(qū)動(dòng)開(kāi)發(fā),那都是沒(méi)問(wèn)題的。問(wèn)題是,你喜歡做什么?你想要達(dá)到哪種境界? 嵌入式開(kāi)發(fā)知識(shí)總結(jié) 一、基礎(chǔ)知識(shí) 目前流行的嵌入式操作系統(tǒng)有:linux、uC/OS、WindowsCE、VxWorks、PalmOS和QNX。其中VxWorks實(shí)時(shí)性很強(qiáng),最穩(wěn)定、可靠,但價(jià)格昂貴,而其他的都有各自的優(yōu)點(diǎn)。 ARM公司(原名Advanced RISC Machine),主要是研發(fā)ARM系列微處理器(出售IP,即知識(shí)產(chǎn)權(quán)),目前全世界有幾十家著名的半導(dǎo)體公司都使用ARM公司的授權(quán),包括IBM、Intel、SONY、LG等。ARM微處理器已成為RISC標(biāo)準(zhǔn)。目前基于ARM核的處理器有以下幾種: ARM7/9 Thumb家族 ARM9/10E家族 ARM 11家族 ARM Cortex家族 SecurCore家族 OptimoDE Data Engine家族 MPCore Multiprocessors家族 Intel公司的StrongARM(相當(dāng)于ARM8)和Xscale。 ARM7處理器采用了ARMV4T(馮諾依曼)體系結(jié)構(gòu)。目前主流的ARM7內(nèi)核是ARM7TDMI(最常用)、ARM7TDMI-S、ARM720T和ARM7EJ-S。T代表支持Thumb指令集,D代表支持片上調(diào)試,M代表內(nèi)嵌硬件乘法器,I代表支持片上斷點(diǎn)和調(diào)試點(diǎn)。 ARM9處理器采用改進(jìn)型哈佛體系結(jié)構(gòu)。采用五級(jí)流水處理及分離的Cache結(jié)構(gòu)。常見(jiàn)的系列有:ARM920T、ARM922T和ARM940T。 Xscale是基于ARMv5TE體系結(jié)構(gòu),是一款性能全、性價(jià)比高、功耗低的處理器。支持16位的Thumb指令和DSP指令集。 Cortex,按傳統(tǒng)的命名方法,Cortex可以看做ARM12。ARM公司推出了Cortex-A/R/M三個(gè)系列。 還有ARM9E、ARM11、MPCore、StrongARM等,略。 比較經(jīng)典的是基于三星ARM9的S3C2440的開(kāi)發(fā)板,這個(gè)系列的資料很多。還有基于三星ARM11的S3C6410開(kāi)發(fā)板,可以跑android。 ARM體系結(jié)構(gòu)的變種 Thumb指令集(T變種)是將ARM指令集重新編碼形成的一個(gè)子集。常見(jiàn)的ARMv5T使用v2版的Thumb指令集。 此外,還有長(zhǎng)乘法指令(M變種),增強(qiáng)型DSP指令(E變種),Java加速器Jazelle(J變種)和ARM媒體功能擴(kuò)展(SIMD變種)。 二、開(kāi)發(fā)流程 不管系統(tǒng)多么復(fù)雜,一般都是以最小系統(tǒng)為基礎(chǔ),通過(guò)加入所需的功能模塊構(gòu)成的。最小系統(tǒng)大概包括電源電路、時(shí)鐘電路、復(fù)位電路、外擴(kuò)的存儲(chǔ)系統(tǒng)和調(diào)試接口。 1、硬件設(shè)計(jì) 首先要進(jìn)行實(shí)驗(yàn)板硬件資源規(guī)劃,例如在最小系統(tǒng)的基礎(chǔ)上擴(kuò)充I2C存儲(chǔ)器、串行接口、網(wǎng)絡(luò)接口、USB接口、觸摸屏接口,以及按鍵、蜂鳴器等。 然后設(shè)計(jì)硬件電路,包括電源電路、復(fù)位電路、時(shí)鐘微處理器電路、外部存儲(chǔ)器電路電路、網(wǎng)絡(luò)接口電路等等,這一部分貌似比較有難度。許多公司也都是出售組裝好的開(kāi)發(fā)板。 PCB的設(shè)計(jì),要考慮到抗高頻干擾、信號(hào)完整性、差分布線等。焊接好元件之后還要調(diào)試電路。 2、軟件的移植與開(kāi)發(fā) 軟件系統(tǒng)的移植主要包括Bootloader的移植、Linux操作系統(tǒng)的移植(包括內(nèi)核和文件系統(tǒng)的移植)以及針對(duì)實(shí)驗(yàn)板的驅(qū)動(dòng)程序的編寫(xiě)等。 1)準(zhǔn)備交叉編譯工具 2)引導(dǎo)加載程序的移植(例如vivi、U-Boot) 3)內(nèi)核的移植 4)根文件系統(tǒng)的移植 5)驅(qū)動(dòng)程序的編寫(xiě) 6)其他,例如JTAG測(cè)試。 三、移植Linux內(nèi)核 基本步驟為: 1)獲取某一版本的Linux內(nèi)核源碼,根據(jù)具體目標(biāo)平臺(tái)對(duì)內(nèi)核源碼進(jìn)行必要的改寫(xiě),主要是修改體系結(jié)構(gòu)相關(guān)的部分。 PS:顯然,對(duì)內(nèi)核源碼的修改很有難度,它既要求開(kāi)發(fā)者對(duì)Linux內(nèi)核結(jié)構(gòu)非常熟悉,對(duì)目標(biāo)平臺(tái)的硬件結(jié)構(gòu)也非常熟悉,而且要有良好的匯編基礎(chǔ)。這一部分的工作一般都是目標(biāo)平臺(tái)提供商完成的,而且主要的東西是ARM公司的工程師來(lái)完成,由他們提供相關(guān)版本的Linux內(nèi)核的補(bǔ)丁,然后把補(bǔ)丁打到我們所用的Linux內(nèi)核上,經(jīng)過(guò)必要的配置和交叉編譯就行了。所以說(shuō),內(nèi)核的定制和改寫(xiě)難度很大,一般的軟件工程師和硬件工程師都很難勝任。 2)打補(bǔ)丁,然后配置內(nèi)核,調(diào)出內(nèi)核配置界面,選上某些選項(xiàng)或者去掉某些選項(xiàng),配置選項(xiàng)非常多,而且某些選項(xiàng)之間有關(guān)聯(lián),所以說(shuō)這一步比較有難度。下面列出一些配置項(xiàng),每個(gè)配置項(xiàng)都可以選擇Y(將該功能編譯進(jìn)內(nèi)核)、N、M(編譯成可以在需要時(shí)動(dòng)態(tài)加載的模塊)。 Code maturity level options(代碼成熟度選項(xiàng)) General setup(通用設(shè)置) Networkong deveices(包括很多子選項(xiàng)dummy net driver support,PLIP support,SCSI device support等) 3)編譯內(nèi)核,用幾個(gè)命令就可以編譯內(nèi)核了。#make clean,#make dep,#make zImage。 4)移植根文件系統(tǒng),內(nèi)核編譯完之后,可以運(yùn)行各種命令并支持各種功能的中央處理器,但是如果缺少了內(nèi)存、硬盤(pán)等設(shè)備也不能正常運(yùn)行。根文件系統(tǒng)中存放了Linux系統(tǒng)所需要得各種程序文件,沒(méi)有這些文件內(nèi)核無(wú)法正常工作。同樣,要移植根文件系統(tǒng)需要清楚Linux的運(yùn)行機(jī)制,比較麻煩。所以一般都使用Busybox這個(gè)工具。安裝配置Busybox,向Busybox添加命令,構(gòu)造根文件系統(tǒng),制作根文件系統(tǒng)映像文件(形如initrd.gz)。 5)使用U-Boot制作、下載內(nèi)核。U-Boot支持uImage格式的內(nèi)核文件。啟動(dòng)內(nèi)核,然后使用U-Boot加載根文件系統(tǒng)映像。 四、開(kāi)發(fā)環(huán)境的建立 一般宿主機(jī)推薦用Red Hat9.0,需要宿主機(jī)在硬件上有標(biāo)準(zhǔn)串口、并口、網(wǎng)口;軟件上具有目標(biāo)板的Linux內(nèi)核、ramdisk文件系統(tǒng)映像以及Bootloader。軟件的更新通常使用串口或網(wǎng)口,最初的Bootloader燒寫(xiě)是通過(guò)JTAG進(jìn)行的。 首先要在宿主機(jī)上建立交叉編譯調(diào)試的開(kāi)發(fā)環(huán)境,許多開(kāi)發(fā)板配有光盤(pán)能實(shí)現(xiàn)自動(dòng)安裝。用minicom作為被開(kāi)發(fā)目標(biāo)板的終端,開(kāi)發(fā)前要正確的配置minicom。然后配置TFTP(簡(jiǎn)單文件傳輸協(xié)議),用于在目標(biāo)板和宿主機(jī)之間傳輸文件。配置NFS,以便終端機(jī)能共享宿主機(jī)的文件。 實(shí)驗(yàn)1 編譯Bootloader 很簡(jiǎn)單。一種常見(jiàn)的Bootloader是PPCBoot,另一種是vivi。 實(shí)驗(yàn)2 編譯Linux內(nèi)核 用幾個(gè)命令就可以編譯內(nèi)核文件,編譯后就要配置,配置稍微繁瑣一點(diǎn)。但是每個(gè)選項(xiàng)在網(wǎng)上都可以找到相應(yīng)的配置方法。 實(shí)驗(yàn)3 制作文件系統(tǒng)及程序的燒寫(xiě) 實(shí)驗(yàn)4 燒寫(xiě)各部分到目標(biāo)板 實(shí)驗(yàn)5 交叉編譯并運(yùn)行簡(jiǎn)單程序 打開(kāi)minicom開(kāi)啟實(shí)驗(yàn)板電源,掛載實(shí)驗(yàn)板。編譯C語(yǔ)言的命令形如: /opt/host/armv4l/bin/armv4l-unknown-linux-gcc -o HelloWorld HelloWorld.c 實(shí)驗(yàn)6 簡(jiǎn)單驅(qū)動(dòng)程序的編寫(xiě) 編寫(xiě)一個(gè)簡(jiǎn)單字符設(shè)備的驅(qū)動(dòng)程序。該程序非常簡(jiǎn)單,但是涉及到很多系統(tǒng)硬件的知識(shí)。if,for,switch,static,define這些關(guān)鍵字用得很多,也涉及到結(jié)構(gòu)體,涉及到直接對(duì)地址的操作、位運(yùn)算。涉及到物理設(shè)備,中斷等一些知識(shí)。 其實(shí),顯而易見(jiàn),驅(qū)動(dòng)開(kāi)發(fā)更靠近硬件一些,程序方面主要是熟練c語(yǔ)言就可以了。驅(qū)動(dòng)開(kāi)發(fā)的最大喜悅就是把物理設(shè)備給驅(qū)動(dòng)起來(lái)的,并盡量使驅(qū)動(dòng)不出問(wèn)題,物理設(shè)備能夠正常運(yùn)行。 想學(xué)習(xí)的你和我聯(lián)系預(yù)約就可以免費(fèi)聽(tīng)課了。 以下課程可免費(fèi)試聽(tīng)C語(yǔ)言、電子、PCB、STM32、Linux、FPGA、JAVA、安卓等。 宋工企鵝號(hào):3524-6590-88 Tel/WX:173--1795--1908 ![]() |