




版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、豬哥的嵌入式linux公房菜豬哥的嵌入式linux公房菜, 是中文領(lǐng)域第一篇針對(duì)嵌入式linux入門(mén)方面的技術(shù)資料。該文檔從技術(shù)層面,學(xué)習(xí)方法,學(xué)習(xí)策略等角度,從一個(gè)初學(xué)者的需求出發(fā),闡述了基本的概念群,提供了學(xué)習(xí)規(guī)劃方面的指導(dǎo),網(wǎng)絡(luò)資源,環(huán)境配置的方法,shell基礎(chǔ),及l(fā)inux系統(tǒng)相關(guān)知識(shí)學(xué)習(xí)規(guī)劃及指引1、嵌入式linux入門(mén)學(xué)習(xí)規(guī)劃ARM+LINUX路線,主攻嵌入式Linux操作系統(tǒng)及其上應(yīng)用軟件開(kāi)發(fā)目標(biāo): (1) 掌握主流嵌入式微處理器的結(jié)構(gòu)與原理(初步定為arm9) (2) 必須掌握一個(gè)嵌入式操作系統(tǒng) (初步定為uclinux或li
2、nux,版本待定) (3) 必須熟悉嵌入式軟件開(kāi)發(fā)流程并至少做一個(gè)嵌入式軟件項(xiàng)目。 從事嵌入式軟件開(kāi)發(fā)的好處是: (1)目前國(guó)內(nèi)外這方面的人都很稀缺。這一領(lǐng)域入門(mén)門(mén)檻較高,所以非專(zhuān)業(yè)IT人員很難切入這一領(lǐng)域;另一方面,是因?yàn)檫@一領(lǐng)域較新,目前發(fā)展太快,大多數(shù)人無(wú)條件接觸。 (2)與企業(yè)計(jì)算等應(yīng)用軟件不同,嵌入式領(lǐng)域人才的工作強(qiáng)度通常低一些(但收入不低)。 (3)哪天若想創(chuàng)業(yè),搞自已的產(chǎn)品,嵌入式不像應(yīng)用軟件那樣容易被盜版。硬件設(shè)計(jì)一般都是請(qǐng)其它公司給訂做(這叫“貼牌”:OEM),都是通用的硬件,我們只管設(shè)計(jì)軟件就變成自己的產(chǎn)品了。
3、160;(4)興趣所在,這是最主要的。 從事嵌入式軟件開(kāi)發(fā)的缺點(diǎn)是: (1)入門(mén)起點(diǎn)較高,所用到的技術(shù)往往都有一定難度,若軟硬件基礎(chǔ)不好,特別是操作系統(tǒng)級(jí)軟件功底不深,則可能不適于此行。 (2)這方面的企業(yè)數(shù)量要遠(yuǎn)少于企業(yè)計(jì)算類(lèi)企業(yè)。 (3)有少數(shù)公司經(jīng)常要碩士以上的人搞嵌入式,主要是基于嵌入式的難度。但大多數(shù)公司也并無(wú)此要求,只要有經(jīng)驗(yàn)即可。 (4)平臺(tái)依托強(qiáng),換平臺(tái)比較辛苦。 興趣的由來(lái): 1、成功觀念不同,不虛度此生,就是我的成功。 2、喜歡思考,挑戰(zhàn)邏輯思維。 3、喜歡C C是一種能發(fā)揮
4、思維極限的語(yǔ)言。關(guān)于C的精神的一些方面可以被概述成短句如下: 相信程序員。 不要阻止程序員做那些需要去做的。 保持語(yǔ)言短小精干。 一種方法做一個(gè)操作。 使得它運(yùn)行的夠快,盡管它并不能保證將是可移植的。 4、喜歡底層開(kāi)發(fā),討厭vb類(lèi)開(kāi)發(fā)工具(并不是說(shuō)vb不好)。 5、發(fā)展前景好,適合創(chuàng)業(yè),不想自己要死了的時(shí)候還是一個(gè)工程師。 方法步驟: 1、基礎(chǔ)知識(shí): 目的:能看懂硬件工作原理,但重點(diǎn)在嵌入式軟件,特別是操作系統(tǒng)級(jí)軟件,那將是我的優(yōu)勢(shì)。 科目:數(shù)字電路、計(jì)算機(jī)組成原理、嵌入式微處理器結(jié)構(gòu)
5、。 匯編語(yǔ)言、C/C+、編譯原理、離散數(shù)學(xué)。 數(shù)據(jù)結(jié)構(gòu)和算法、操作系統(tǒng)、軟件工程、網(wǎng)絡(luò)、數(shù)據(jù)庫(kù)。 方法:雖科目眾多,但都是較簡(jiǎn)單的基礎(chǔ),且大部分已掌握。不一定全學(xué),可根據(jù)需要選修。 主攻書(shū)籍:the c+ programming language(一直沒(méi)時(shí)間讀)、數(shù)據(jù)結(jié)構(gòu)-C2。 2、學(xué)習(xí)linux: 目的:深入掌握l(shuí)inux系統(tǒng)。 方法:使用linuxlinxu系統(tǒng)編程開(kāi)發(fā)驅(qū)動(dòng)開(kāi)發(fā)和分析linux內(nèi)核。先看深,那主講原理??磶妆楹?,看情景分析,對(duì)照深看,兩本交叉,深是綱,情是目。剖析則是0.1
6、1版,適合學(xué)習(xí)。最后深入代碼。 主攻書(shū)籍:linux內(nèi)核完全剖析、unix環(huán)境高級(jí)編程、深入理解linux內(nèi)核、情景分析和源代。 3、學(xué)習(xí)嵌入式linux: 目的:掌握嵌入式處理器其及系統(tǒng)。 方法:(1)嵌入式微處理器結(jié)構(gòu)與應(yīng)用:直接arm原理及匯編即可,不要重復(fù)x86。 (2)嵌入式操作系統(tǒng)類(lèi):ucOS/II簡(jiǎn)單,開(kāi)源,可供入門(mén)。而后深入研究uClinux。 (3)必須有塊開(kāi)發(fā)板(arm9以上),有條件可參加培訓(xùn)(進(jìn)步快,能認(rèn)識(shí)些朋友)。 主攻書(shū)籍:毛德操的嵌入式系統(tǒng)及其他arm9手冊(cè)與arm匯編指令等。 4、深
7、入學(xué)習(xí): A、數(shù)字圖像壓縮技術(shù):主要是應(yīng)掌握MPEG、mp3等編解碼算法和技術(shù)。 B、通信協(xié)議及編程技術(shù):TCP/IP協(xié)議、802.11,Bluetooth,GPRS、GSM、CDMA等。 C、網(wǎng)絡(luò)與信息安全技術(shù):如加密技術(shù),數(shù)字證書(shū)CA等。 D、DSP技術(shù):Digital Signal Process,DSP處理器通過(guò)硬件實(shí)現(xiàn)數(shù)字信號(hào)處理算法。 說(shuō)明:太多細(xì)節(jié)未說(shuō)明,可根據(jù)實(shí)際情況調(diào)整。重點(diǎn)在于1、3,不必完全按照順序作。對(duì)于學(xué)習(xí)c+,理由是c+不只是一種語(yǔ)言,一種工具,她還是一 種藝術(shù),一種文化,一種哲學(xué)理念、但不是拿
8、來(lái)炫耀得東西。對(duì)于linux內(nèi)核,學(xué)習(xí)編程,讀一些優(yōu)秀代碼也是有必要的。 注意:要學(xué)會(huì)舉一反多,有強(qiáng)大的基礎(chǔ),很多東西簡(jiǎn)單看看就能會(huì)。想成為合格的程序員,前提是必須熟練至少一種編程語(yǔ)言,并具有良好的邏輯思維。一定要理論結(jié)合實(shí)踐。 不要一味鉆研技術(shù),雖然擠出時(shí)間是很難做到的,但還是要留點(diǎn)余地去完善其他的愛(ài)好,比如宇宙,素描、機(jī)械、管理,心理學(xué)、游戲、科幻電影。還有一些不愿意做但必須要做的! 技術(shù)是通過(guò)編程編程在編程編出來(lái)的。永遠(yuǎn)不要夢(mèng)想一步登天,不要做浮躁的人,不要覺(jué)得路途漫上。而是要編程編程在編程,完了在編程,在編程!等機(jī)會(huì)來(lái)了在創(chuàng)業(yè)(不要相信有奇跡發(fā)生,盲目創(chuàng)業(yè)
9、很難成功,即便成功了發(fā)展空間也不一定很大)。 嵌入式書(shū)籍推薦 Linux基礎(chǔ) 1、Linux與Unix Shell 編程指南 C語(yǔ)言基礎(chǔ) 1、C Primer Plus,5th Edition【美】Stephen Prata著 2、The C Programming Language, 2nd Edition【美】Brian W. Kernighan David M. Rith
10、ie(K & R)著 3、Advanced Programming in the UNIX Environment,2nd Edition(APUE) 4、嵌入式Linux應(yīng)用程序開(kāi)發(fā)詳解 Linux內(nèi)核 1、深入理解Linux內(nèi)核(第三版) 2、Linux內(nèi)核源代碼情景分析毛德操 胡希明著 研發(fā)方向 1、UNIX Network Programming(UNP) 2、TCP/IP詳解 3
11、、Linux內(nèi)核編程 4、Linux設(shè)備驅(qū)動(dòng)開(kāi)發(fā)(LDD) 5、Linux高級(jí)程序設(shè)計(jì) 楊宗德著硬件基礎(chǔ) 1、ARM體系結(jié)構(gòu)與編程杜春雷著 2、S3C2410 Datasheet 英語(yǔ)基礎(chǔ) 1、計(jì)算機(jī)與通信專(zhuān)業(yè)英語(yǔ) 系統(tǒng)教程 1、嵌入式系統(tǒng)體系結(jié)構(gòu)、編程與設(shè)計(jì) 2、嵌入式系統(tǒng)采用公開(kāi)源代碼和StrongARM/Xscale處理器毛德操 胡希明著 3、Building Embedded Linux Systems4、嵌入式ARM系統(tǒng)原理與
12、實(shí)例開(kāi)發(fā) 楊宗德著理論基礎(chǔ) 1、算法導(dǎo)論 2、數(shù)據(jù)結(jié)構(gòu)(C語(yǔ)言版) 3、計(jì)算機(jī)組織與體系結(jié)構(gòu)?性能分析 4、深入理解計(jì)算機(jī)系統(tǒng)【美】Randal E. Bryant David O''Hallaron著 5、操作系統(tǒng):精髓與設(shè)計(jì)原理 6、編譯原理 7、數(shù)據(jù)通信與計(jì)算機(jī)網(wǎng)絡(luò) 8、數(shù)據(jù)壓縮原理與應(yīng)用 C語(yǔ)言書(shū)籍推薦 1. The C programming language 程序設(shè)計(jì)語(yǔ)
13、言 2. Pointers on C 和指針 3. C traps and pitfalls 陷阱與缺陷 4. Expert C Lanuage 專(zhuān)家編程 5. Writing Clean Code -Microsoft Techiniques for Developing Bug-free C Programs 編程
14、精粹-Microsoft 編寫(xiě)優(yōu)質(zhì)無(wú)錯(cuò)程序秘訣 6. Programming Embedded Systems in C and C+ 嵌入式系統(tǒng)編程 7.C語(yǔ)言嵌入式系統(tǒng)編程修煉 8.高質(zhì)量C+/C編程指南林銳 盡可能多的編碼,要學(xué)好C,不能只注重C本身。算法,架構(gòu)方式等都很重要。嵌入式linux入門(mén)學(xué)習(xí)內(nèi)容指南1、Linux 基礎(chǔ)安裝Linux操作系統(tǒng) Linux文件系統(tǒng) Linux常用命令 Linux啟動(dòng)過(guò)程詳解 熟悉Linux服務(wù)能夠獨(dú)立安裝Linux操作系
15、統(tǒng) 能夠熟練使用Linux系統(tǒng)的基本命令 認(rèn)識(shí)Linux系統(tǒng)的常用服務(wù)安裝Linux操作系統(tǒng) Linux基本命令實(shí)踐 設(shè)置Linux環(huán)境變量 定制Linux的服務(wù) Shell 編程基礎(chǔ)使用vi編輯文件 使用Emacs編輯文件 使用其他編輯器2、Shell 編程基礎(chǔ)Shell簡(jiǎn)介 認(rèn)識(shí)后臺(tái)程序Bash編程熟悉Linux系統(tǒng)下的編輯環(huán)境 熟悉Linux下的各種Shell 熟練進(jìn)行shell編程熟悉vi基本操作 熟悉Emacs的基本操作 比較不同shell的區(qū)別 編寫(xiě)一個(gè)測(cè)試服務(wù)器是否連通的shell腳本程序 編寫(xiě)一個(gè)查看進(jìn)程是否存在的shell腳本程序 編寫(xiě)一個(gè)帶有循環(huán)語(yǔ)句的shell腳本程序3、
16、Linux 下的 C 編程基礎(chǔ)linux C語(yǔ)言環(huán)境概述 Gcc使用方法 Gdb調(diào)試技術(shù) Autoconf Automake Makefile 代碼優(yōu)化 熟悉Linux系統(tǒng)下的開(kāi)發(fā)環(huán)境 熟悉Gcc編譯器 熟悉Makefile規(guī)則編寫(xiě)Hello,World程序 使用 make命令編譯程序 編寫(xiě)帶有一個(gè)循環(huán)的程序 調(diào)試一個(gè)有問(wèn)題的程序4、嵌入式系統(tǒng)開(kāi)發(fā)基礎(chǔ)嵌入式系統(tǒng)概述 交叉編譯 配置TFTP服務(wù) 配置NFS服務(wù) 下載Bootloader和內(nèi)核 嵌入式Linux應(yīng)用軟件開(kāi)發(fā)流程熟悉嵌入式系統(tǒng)概念以及開(kāi)發(fā)流程 建立嵌入式系統(tǒng)開(kāi)發(fā)環(huán)境制作cross_gcc工具鏈 編譯并下載U-boot 編譯并下載Li
17、nux內(nèi)核 編譯并下載Linux應(yīng)用程序4、嵌入式系統(tǒng)移植Linux內(nèi)核代碼 平臺(tái)相關(guān)代碼分析 ARM平臺(tái)介紹 平臺(tái)移植的關(guān)鍵技術(shù) 移植Linux內(nèi)核到 ARM平臺(tái) 了解移植的概念 能夠移植Linux內(nèi)核移植Linux2.6內(nèi)核到 ARM9開(kāi)發(fā)板5、嵌入式 Linux 下串口通信串行I/O的基本概念 嵌入式Linux應(yīng)用軟件開(kāi)發(fā)流程 Linux系統(tǒng)的文件和設(shè)備 與文件相關(guān)的系統(tǒng)調(diào)用 配置超級(jí)終端和MiniCOM 能夠熟悉進(jìn)行串口通信 熟悉文件I/O 編寫(xiě)串口通信程序 編寫(xiě)多串口通信程序6、嵌入式系統(tǒng)中多進(jìn)程程序設(shè)計(jì)Linux系統(tǒng)進(jìn)程概述 嵌入式系統(tǒng)的進(jìn)程特點(diǎn) 進(jìn)程操作 守護(hù)進(jìn)程 相關(guān)的系統(tǒng)調(diào)用
18、了解Linux系統(tǒng)中進(jìn)程的概念 能夠編寫(xiě)多進(jìn)程程序編寫(xiě)多進(jìn)程程序 編寫(xiě)一個(gè)守護(hù)進(jìn)程程序 sleep系統(tǒng)調(diào)用任務(wù)管理、同步與通信 Linux任務(wù)概述任務(wù)調(diào)度 管道 信號(hào) 共享內(nèi)存 任務(wù)管理 API 了解Linux系統(tǒng)任務(wù)管理機(jī)制 熟悉進(jìn)程間通信的幾種方式 熟悉嵌入式Linux中的任務(wù)間同步與通信編寫(xiě)一個(gè)簡(jiǎn)單的管道程序?qū)崿F(xiàn)文件傳輸 編寫(xiě)一個(gè)使用共享內(nèi)存的程序7、嵌入式系統(tǒng)中多線程程序設(shè)計(jì)線程的基礎(chǔ)知識(shí) 多線程編程方法 線程應(yīng)用中的同步問(wèn)題了解線程的概念 能夠編寫(xiě)簡(jiǎn)單的多線程程序編寫(xiě)一個(gè)多線程程序8、嵌入式 Linux 網(wǎng)絡(luò)編程網(wǎng)絡(luò)基礎(chǔ)知識(shí) 嵌入式Linux中TCP/IP網(wǎng)絡(luò)結(jié)構(gòu) socket 編程
19、 常用 API函數(shù) 分析Ping命令的實(shí)現(xiàn) 基本UDP套接口編程 許可證管理 PPP協(xié)議 GPRS 了解嵌入式Linux網(wǎng)絡(luò)體系結(jié)構(gòu) 能夠進(jìn)行嵌入式Linux環(huán)境下的socket 編程 熟悉UDP協(xié)議、PPP協(xié)議 熟悉GPRS 使用socket 編寫(xiě)代理服務(wù)器 使用socket 編寫(xiě)路由器 編寫(xiě)許可證服務(wù)器 指出TCP和UDP的優(yōu)缺點(diǎn) 編寫(xiě)一個(gè)web服務(wù)器 編寫(xiě)一個(gè)運(yùn)行在 ARM平臺(tái)的網(wǎng)絡(luò)播放器9、GUI 程序開(kāi)發(fā)GUI基礎(chǔ) 嵌入式系統(tǒng)GUI類(lèi)型 編譯QT 進(jìn)行QT開(kāi)發(fā)熟悉嵌入式系統(tǒng)常用的GUI 能夠進(jìn)行QT編程使用QT編寫(xiě)“Hello,World”程序 調(diào)試一個(gè)加入信號(hào)/槽的實(shí)例 通過(guò)重載Q
20、Widget 類(lèi)方法處理事件10、Linux 字符設(shè)備驅(qū)動(dòng)程序設(shè)備驅(qū)動(dòng)程序基礎(chǔ)知識(shí) Linux系統(tǒng)的模塊 字符設(shè)備驅(qū)動(dòng)分析 fs_operation結(jié)構(gòu) 加載驅(qū)動(dòng)程序了解設(shè)備驅(qū)動(dòng)程序的概念 了解Linux字符設(shè)備驅(qū)動(dòng)程序結(jié)構(gòu) 能夠編寫(xiě)字符設(shè)備驅(qū)動(dòng)程序編寫(xiě)Skull驅(qū)動(dòng) 編寫(xiě)鍵盤(pán)驅(qū)動(dòng) 編寫(xiě)I/O驅(qū)動(dòng) 分析一個(gè)看門(mén)狗驅(qū)動(dòng)程序 對(duì)比Linux2.6內(nèi)核與2.4內(nèi)核中字符設(shè)備驅(qū)動(dòng)的不同Linux 塊設(shè)備驅(qū)動(dòng)程序塊設(shè)備驅(qū)動(dòng)程序工作原理 典型的塊設(shè)備驅(qū)動(dòng)程序分析 塊設(shè)備的讀寫(xiě)請(qǐng)求隊(duì)列了解Linux塊設(shè)備驅(qū)動(dòng)程序結(jié)構(gòu) 能夠編寫(xiě)簡(jiǎn)單的塊設(shè)備驅(qū)動(dòng)程序比較字符設(shè)備與塊設(shè)備的異同 編寫(xiě)MMC卡驅(qū)動(dòng)程序 分析一個(gè)文件
21、系統(tǒng) 對(duì)比Linux2.6內(nèi)核與2.4內(nèi)核中塊設(shè)備驅(qū)動(dòng)的不同11、文件系統(tǒng)虛擬文件系統(tǒng) 文件系統(tǒng)的建立 ramfs內(nèi)存文件系統(tǒng) proc文件系統(tǒng) devfs 文件系統(tǒng) MTD技術(shù)簡(jiǎn)介 MTD塊設(shè)備初始化 MTD塊設(shè)備的讀寫(xiě)操作了解Linux系統(tǒng)的文件系統(tǒng) 了解嵌入式Linux的文件系統(tǒng) 了解MTD技術(shù) 能夠編寫(xiě)簡(jiǎn)單的文件系統(tǒng)為 ARM9開(kāi)發(fā)板添加 MTD支持 移植JFFS2文件系統(tǒng) 通過(guò)proc文件系統(tǒng)修改操作系統(tǒng)參數(shù) 分析romfs 文件系統(tǒng)源代碼 創(chuàng)建一個(gè)cramfs 文件系統(tǒng)嵌入式系統(tǒng)知識(shí)體系、學(xué)習(xí)誤區(qū)及建議1 嵌入式系統(tǒng)的知識(shí)體系嵌入式系統(tǒng)的應(yīng)用范圍可以粗略分為兩大類(lèi):電子系統(tǒng)的智能化
22、(工業(yè) 控制、現(xiàn)代農(nóng)業(yè)、家用電器、汽車(chē)電子、測(cè)控系統(tǒng)、數(shù)據(jù)采集等),計(jì)算機(jī)應(yīng)用的延伸(MP3、手機(jī)、通信、網(wǎng)絡(luò)、計(jì)算機(jī)外圍設(shè)備等)。從這些應(yīng)用可以看出, 要完成一個(gè)以MCU為核心的嵌入式系統(tǒng)應(yīng)用產(chǎn)品設(shè)計(jì),需要硬件、軟件及行業(yè)領(lǐng)域相關(guān)知識(shí)。硬件主要有MCU的硬件最小系統(tǒng)、輸入輸出外圍電路、人機(jī)接口 設(shè)計(jì)。軟件設(shè)計(jì)有固化軟件的設(shè)計(jì),也可能含PC機(jī)軟件的設(shè)計(jì)。行業(yè)知識(shí)需要通過(guò)協(xié)作、交流與總結(jié)獲得。概括地說(shuō),學(xué)習(xí)以MCU為核心的嵌入式系統(tǒng),需要以下軟硬件基礎(chǔ)知識(shí)與實(shí)踐訓(xùn)練:硬件最小系統(tǒng)(電源、晶振、復(fù)位、寫(xiě)入調(diào)試接口);通用IO(開(kāi)關(guān)量輸入輸出,涉及各種二值量檢測(cè)與控制);模數(shù)轉(zhuǎn)換(各種傳感器信號(hào)的采
23、集與處理,如紅外、溫度、光敏、超聲波、方向等);數(shù)模轉(zhuǎn)換(對(duì)模擬量設(shè)備利用數(shù)字進(jìn)行控制);通信(串行通信接口SCI、串行外設(shè)接口SPI、集成電路互聯(lián)總線I2C、CAN、USB、嵌入式以太網(wǎng)、ZigBee技術(shù)等);顯示(LED、LCD等);控制(控制各種設(shè)備,包括PWM等控制技術(shù));數(shù)據(jù)處理(圖形、圖像、語(yǔ)音、視頻等的處理或識(shí)別);各種具體應(yīng)用。萬(wàn)變不離其宗,任何應(yīng)用都可以歸入這幾類(lèi)。而應(yīng)用中的硬件設(shè)計(jì)、軟件設(shè)計(jì)、測(cè)試等都必須遵循嵌入式軟件工程的方法、原理與基本原則。所以,嵌入式軟件工程也是嵌入式系統(tǒng)知識(shí)體系的有機(jī)組成部分,只不過(guò)它融于具體項(xiàng)目的開(kāi)發(fā)過(guò)程之中。 以上實(shí)踐訓(xùn)練涉及硬件基礎(chǔ)、軟件基礎(chǔ)
24、及相關(guān)領(lǐng)域知識(shí)。計(jì)算機(jī)語(yǔ)言、操作系統(tǒng)、開(kāi)發(fā)環(huán)境等均是達(dá)到這些目的的工具。有些初學(xué)者,容易把工具的使用與所要達(dá) 到的真正目的相混淆。例如,有的學(xué)習(xí)者學(xué)了很長(zhǎng)時(shí)間的嵌入式操作系統(tǒng)移植,而不進(jìn)行實(shí)際嵌入式系統(tǒng)產(chǎn)品的開(kāi)發(fā),到最后也做不好一個(gè)嵌入式系統(tǒng)小產(chǎn)品,偏離 了學(xué)習(xí)目標(biāo),甚至放棄嵌入式系統(tǒng)領(lǐng)域。這就是進(jìn)入了嵌入式系統(tǒng)學(xué)習(xí)誤區(qū),下面對(duì)此作一些分析。2 嵌入式系統(tǒng)的學(xué)習(xí)誤區(qū) 關(guān)于嵌入式系統(tǒng)的學(xué)習(xí)方法,因?qū)W習(xí)經(jīng)歷、學(xué)習(xí)環(huán)境、學(xué)習(xí)目的、已有的知識(shí)基礎(chǔ)等不同,可能在學(xué)習(xí)順序、內(nèi)容選擇、實(shí)踐方式等方面有所不同。但是,應(yīng)該明 確哪些是必備的基礎(chǔ)知識(shí),哪些應(yīng)該先學(xué),哪些應(yīng)該后學(xué);哪些必須通過(guò)實(shí)踐才能獲得;哪些是與
25、具體芯片無(wú)關(guān)的通用知識(shí),哪些是與具體芯片或開(kāi)發(fā)環(huán)境相關(guān)的知 識(shí)。由于微處理器與微控制器種類(lèi)繁多,也可能由于不同公司、機(jī)構(gòu)出于自身的利益,給出一些誤導(dǎo)性宣傳,特別是我國(guó)嵌入式微控制器制造技 術(shù)落后,使得人們對(duì)微控制器的發(fā)展,在認(rèn)識(shí)與理解上存在差異,導(dǎo)致一些初學(xué)者進(jìn)入嵌入式系統(tǒng)的學(xué)習(xí)誤區(qū),浪費(fèi)了寶貴的學(xué)習(xí)時(shí)間。下面分析可能存在的幾個(gè)誤 區(qū)。21 操作系統(tǒng)的困惑如果說(shuō),學(xué)習(xí)嵌入式系統(tǒng)不是為了開(kāi)發(fā)其應(yīng)用產(chǎn)品,那 就沒(méi)有具體目標(biāo),諸如學(xué)習(xí)方法這樣的問(wèn)題也就不必談了。實(shí)際上,這正是許多人想學(xué),又不知從何開(kāi)始學(xué)習(xí)的關(guān)鍵問(wèn)題所在,不知道自己學(xué)習(xí)的具體目標(biāo)。于是, 看了一些培訓(xùn)廣告,看了書(shū)店中種類(lèi)繁多的嵌入式系
26、統(tǒng)書(shū)籍,或上網(wǎng)以“嵌入式系統(tǒng)”為關(guān)鍵詞進(jìn)行查詢(xún),就參加培訓(xùn)或看書(shū),開(kāi)始“學(xué)習(xí)起來(lái)”。對(duì)于有計(jì)算機(jī)閱 歷的人,往往選擇一個(gè)嵌入式操作系統(tǒng)就開(kāi)始學(xué)習(xí)了。這有點(diǎn)像“瞎子摸大象”,只了解其一個(gè)側(cè)面。這樣如何能對(duì)嵌入式產(chǎn)品的開(kāi)發(fā)過(guò)程有全面了解呢?針對(duì)許多 初學(xué)者選擇“XXX嵌入式操作系統(tǒng)+XXX處理器”的嵌入式系統(tǒng)入門(mén)學(xué)習(xí)模式,筆者認(rèn)為是不合適的。筆者的建議是:首先把嵌入式系統(tǒng)軟件與硬件基礎(chǔ)打好 了,再根據(jù)實(shí)際需要,選擇一種實(shí)時(shí)操作系統(tǒng)(RTOS)進(jìn)行學(xué)習(xí)實(shí)踐。要記?。篟TOS是開(kāi)發(fā)某些類(lèi)嵌入式產(chǎn)品的輔助工具,是手段,不是目的;許多類(lèi)嵌入 式產(chǎn)品,并不需要RTOS。所以,一開(kāi)始就學(xué)習(xí)RTOS,并不符合“
27、由淺入深、循序漸進(jìn)”的學(xué)習(xí)規(guī)律。RTOS本身由于種類(lèi)繁多,實(shí)際 使用何種RTOS,一般需要由工作單位確定?;A(chǔ)階段主要學(xué)習(xí)RTOS的基本原理與RTOS上的軟件開(kāi)發(fā)方法,而不是學(xué)習(xí)如何設(shè)計(jì)RTOS。以開(kāi)發(fā)實(shí)際嵌 入式產(chǎn)品為目標(biāo)的學(xué)習(xí)者,不要把過(guò)多的精力花在設(shè)計(jì)或移植RTOS上面。正如很多人使用Windows操作系統(tǒng),而設(shè)計(jì) Windows操作系統(tǒng)的只有Microsoft。許多人“研究”Linux,但不使用它,浪費(fèi)了時(shí)間。人的精力是有限的,學(xué)習(xí)必須有所選擇。22 硬件與軟件的困惑 以MCU為核心的嵌入式技術(shù)的知識(shí)體系必須通過(guò)具體的MCU來(lái)體現(xiàn)、實(shí)踐。但是,選擇任何型號(hào)的MCU,其芯片相關(guān)的知識(shí)只占
28、知識(shí)體系的20左 右,80左右是通用的軟件硬件及相關(guān)知識(shí)。80的通用知識(shí),必須通過(guò)具體實(shí)踐才能獲得,所以學(xué)習(xí)嵌入式技術(shù)一般要選擇一個(gè)系列的MCU。 系統(tǒng)含有硬件與軟件兩大部分,它們之間的關(guān)系如何?有些學(xué)者,僅從電子的角度認(rèn)識(shí)嵌入式系統(tǒng)。認(rèn)為“嵌入式系統(tǒng)=MCU硬件系統(tǒng)+小程序”。這些學(xué)者大 多具有良好的電子技術(shù)基礎(chǔ)知識(shí)。實(shí)際情況是,早期MCU內(nèi)部RAM小,程序存儲(chǔ)器外接,需要外擴(kuò)各種IO,沒(méi)有像USB、嵌入式以太網(wǎng)等這樣較復(fù)雜的接 口。因此,程序占總設(shè)計(jì)量比例小于50,使人們認(rèn)為嵌入式系統(tǒng)(單片機(jī))是“電子系統(tǒng)”,以硬件為主,程序?yàn)檩o。但是,隨著MCU制造技術(shù)的發(fā)展,不 僅MCU內(nèi)部RAM越來(lái)
29、越大,F(xiàn)lash進(jìn)入MCU內(nèi)部改變了傳統(tǒng)的嵌入式系統(tǒng)開(kāi)發(fā)與調(diào)試方式,固件程序可以更方便地調(diào)試與在線升級(jí),許多情況下與開(kāi)發(fā) PC機(jī)程序的方便程度相差無(wú)幾,只不過(guò)開(kāi)發(fā)環(huán)境與運(yùn)行環(huán)境不是同一載體而已。這使得嵌入式系統(tǒng)的軟件硬件設(shè)計(jì)方法發(fā)生了根本變化。 有些學(xué)者,僅從軟件開(kāi)發(fā)角度認(rèn)識(shí)嵌入式系統(tǒng),甚至僅從嵌入式操作系統(tǒng)認(rèn)識(shí)嵌入式系統(tǒng)。這些學(xué)者大多具有良好的計(jì)算機(jī)軟件開(kāi)發(fā)基礎(chǔ)知識(shí),認(rèn)為硬件是生產(chǎn)廠 商的事。他們沒(méi)有認(rèn)識(shí)到,嵌入式系統(tǒng)產(chǎn)品的軟件與硬件均是需要開(kāi)發(fā)者設(shè)計(jì)的。筆者常常接到一些關(guān)于嵌入式產(chǎn)品穩(wěn)定性的咨詢(xún),發(fā)現(xiàn)大多數(shù)是由于軟件開(kāi)發(fā)者對(duì) 底層硬件的基本原理不理解。特別是有些功能軟件開(kāi)發(fā)者,過(guò)分依賴(lài)于底
30、層硬件的驅(qū)動(dòng)軟件,自己對(duì)底層驅(qū)動(dòng)原理知之甚少。實(shí)際上,一些功能軟件開(kāi)發(fā)者,名義上 在做嵌入式軟件,其實(shí)僅僅是使用嵌入式編輯、編譯環(huán)境而已,本質(zhì)與開(kāi)發(fā)通用PC機(jī)軟件沒(méi)有兩樣。而底層硬件驅(qū)動(dòng)軟件的開(kāi)發(fā),若不全面考慮高層功能軟件對(duì)底 層硬件的可能調(diào)用,也會(huì)使封裝或參數(shù)設(shè)計(jì)得不合理或不完備,導(dǎo)致高層功能軟件調(diào)用困難??梢钥闯觯舭亚度胧较到y(tǒng)的開(kāi)發(fā)孤立地分為硬件設(shè)計(jì)、底層硬件驅(qū)動(dòng) 軟件設(shè)計(jì)、高層功能軟件設(shè)計(jì),那么一旦出現(xiàn)問(wèn)題,就可能難以定位。實(shí)際上,嵌入式系統(tǒng)設(shè)計(jì)是一個(gè)軟件、硬件協(xié)同設(shè)計(jì)工程,不能像通用計(jì)算機(jī)那樣,軟件、硬 件完全分開(kāi)來(lái)看,而要在一個(gè)大的框架內(nèi)協(xié)調(diào)工作。 學(xué)習(xí)嵌入式系統(tǒng)是以軟件
31、為主還是以硬件為主,或者如何選擇切入點(diǎn),如何在軟件與 硬件之間取得平衡?對(duì)于這個(gè)困惑的建議是:要想成為一名真正的嵌入式系統(tǒng)設(shè)計(jì)師,在初學(xué)階段,必須打好嵌入式系統(tǒng)的硬件與軟件基礎(chǔ)。以下是從事嵌入式系統(tǒng) 設(shè)計(jì)二十多年的美國(guó)學(xué)者JohnCatsoulis在Designing Embedded Hardware一書(shū)中關(guān)于這個(gè)問(wèn)題的總結(jié):嵌入式系統(tǒng) 與硬件緊密相關(guān),是軟件與硬件的綜合體,沒(méi)有對(duì)硬件的理解就不可能寫(xiě)好嵌入式軟件;同樣,沒(méi)有對(duì)軟件的理解也不可能設(shè)計(jì)好嵌入式硬件。 23 片面認(rèn)識(shí)嵌入式系統(tǒng) 嵌入式系統(tǒng)產(chǎn)品種類(lèi)繁多,應(yīng)用領(lǐng)域各異。在第1部分中,
32、把嵌入式系統(tǒng)的應(yīng)用范圍粗略分為電子系統(tǒng)的智能化與計(jì)算機(jī)應(yīng)用的延伸兩大類(lèi)。從初學(xué)者角度,可能 存在分別從這兩個(gè)角度片面認(rèn)識(shí)嵌入式系統(tǒng)的問(wèn)題。因此,一些從電子系統(tǒng)智能化角度認(rèn)識(shí)嵌入式系統(tǒng)的學(xué)習(xí)者,可能會(huì)忽視編程結(jié)構(gòu)、編程規(guī)范、軟件工程的要 求、操作系統(tǒng)等知識(shí)的積累。另一些從計(jì)算機(jī)應(yīng)用的延伸角度認(rèn)識(shí)嵌入式系統(tǒng)的學(xué)習(xí)者,可能會(huì)把通用計(jì)算機(jī)學(xué)習(xí)過(guò)程中的概念與方法生搬硬套到嵌入式系統(tǒng)的實(shí)踐 中,忽視嵌入式系統(tǒng)與通用計(jì)算機(jī)的差異。 實(shí)際上,在嵌入式系統(tǒng)學(xué)習(xí)與實(shí)踐的初始階段,應(yīng)該充分了解嵌入式系統(tǒng)的特點(diǎn),根據(jù)自身的 已有知識(shí)結(jié)構(gòu),制定適合自身情況的學(xué)習(xí)計(jì)劃。目標(biāo)應(yīng)該是打好嵌入式系統(tǒng)的硬件與軟件基礎(chǔ),
33、通過(guò)實(shí)踐,為成為良好的嵌入式系統(tǒng)設(shè)計(jì)師建立起基本知識(shí)結(jié)構(gòu)。學(xué) 習(xí)過(guò)程中,具體應(yīng)用系統(tǒng)可為實(shí)踐載體,但不能拘泥于具體系統(tǒng),應(yīng)該有一定的抽象與歸納。例如,初學(xué)者開(kāi)發(fā)實(shí)際控制系統(tǒng)時(shí)沒(méi)有使用實(shí)時(shí)操作系統(tǒng),但不要認(rèn)為 實(shí)時(shí)操作系統(tǒng)不需要學(xué)習(xí)。又例如,初學(xué)者可以一個(gè)帶有實(shí)時(shí)操作系統(tǒng)的樣例為藍(lán)本進(jìn)行學(xué)習(xí),但不要認(rèn)為任何嵌入式系統(tǒng)都需要實(shí)時(shí)操作系統(tǒng),甚至為一個(gè)十分簡(jiǎn) 明的實(shí)際系統(tǒng)加上不必要的實(shí)時(shí)操作系統(tǒng)。因此,片面認(rèn)識(shí)嵌入式系統(tǒng),可能導(dǎo)致學(xué)習(xí)困惑。應(yīng)該根據(jù)實(shí)際項(xiàng)目需要,鍛煉自己分析實(shí)際問(wèn)題、解決問(wèn)題的能力。這 是一個(gè)長(zhǎng)期的學(xué)習(xí)與實(shí)踐過(guò)程,不能期望通過(guò)短期培訓(xùn)完成整體知識(shí)體系的建立,應(yīng)該重視自身實(shí)踐,全面地理解
34、嵌入式系統(tǒng)的知識(shí)體系。 24 入門(mén)芯片選擇的困惑 嵌入式系統(tǒng)的大部分初學(xué)者需要選擇一個(gè)微控制器(MCU)進(jìn)行入門(mén)級(jí)學(xué)習(xí),面對(duì)眾多廠家生產(chǎn)的微控制器系列,往往不知如何是好。 首先是關(guān)于位數(shù)問(wèn)題,目前主要有8位、16位和32位MCU。不同位數(shù)的MCU各有應(yīng)用領(lǐng)域,這一點(diǎn)與通用微機(jī)有很大不同。例如做一個(gè)遙控器,不需要使 用 32位MCU,否則MCU芯片價(jià)格就已經(jīng)超過(guò)遙控器價(jià)格需求。對(duì)于首次接觸嵌入式系統(tǒng)的學(xué)習(xí)者,可以根據(jù)自己的知識(shí)基礎(chǔ)選擇入門(mén)芯片的位數(shù)。建議大多 數(shù)初學(xué)者選擇8位MCU作為快速入門(mén)芯片,了解一些匯編與底層硬件知識(shí),之后再選16位或3
35、2位芯片進(jìn)行學(xué)習(xí)實(shí)踐。 關(guān)于芯片選擇 的另一個(gè)誤區(qū)是認(rèn)為有“主流芯片”存在,嵌入式系統(tǒng)也可以形成芯片壟斷。這完全是一種誤解,是套用通用計(jì)算機(jī)系統(tǒng)的思維模式,而忽視了嵌入式系統(tǒng)應(yīng)用的多 樣性。關(guān)于學(xué)習(xí)芯片選擇還有一個(gè)誤區(qū),即誤認(rèn)為選擇工作頻率高的芯片進(jìn)行入門(mén)學(xué)習(xí),更先進(jìn)。實(shí)際上,工作頻率高可能給初學(xué)者帶來(lái)不少困難。 實(shí)際嵌入式系統(tǒng)設(shè)計(jì)不是追求芯片位數(shù)、工作頻率、操作系統(tǒng)等因素,而是追求穩(wěn)定可靠、維護(hù)、升級(jí)、功耗、價(jià)格等指標(biāo)。初學(xué)者選擇入門(mén)芯片,是通過(guò)某 一: MCU作為藍(lán)本,獲得嵌入式系統(tǒng)知識(shí)體系的通用基礎(chǔ)。其基本原則是:入門(mén)時(shí)間較短、硬件成本較低,知
36、識(shí)要素較多,學(xué)習(xí)難度較低。 3 基礎(chǔ)階段的學(xué)習(xí)建議 基于以上討論,下面對(duì)廣大渴望學(xué)習(xí)嵌入式系統(tǒng)的學(xué)子提出幾點(diǎn)基礎(chǔ)階段的學(xué)習(xí)建議: 嵌入式系統(tǒng)軟件硬件密切相關(guān),一定要打好軟硬件基礎(chǔ)。其實(shí),只要找到正確的方法,加上努力,任何理工科學(xué)生,甚至非理工科學(xué)生,都能學(xué)好嵌入式系統(tǒng)。 選擇一個(gè)芯片及硬件評(píng)估板(入門(mén)芯片最好簡(jiǎn)單一點(diǎn),例如8位MCU)、選擇一本好書(shū)(最好有規(guī)范的例子)、找一位好老師(最好是有經(jīng)驗(yàn)且熱心的)。硬 件評(píng)估板的價(jià)格一定要在1000元以下,不要太貴,最好能有自己動(dòng)手的空間。不花一分硬件錢(qián)想要學(xué)好嵌入式系統(tǒng)不實(shí)際,因?yàn)檫@是實(shí)踐性很強(qiáng)的
37、學(xué)科。好書(shū), 可以讓人少走彎路,不被誤導(dǎo)。好老師也可以是做過(guò)一些實(shí)際項(xiàng)目的學(xué)長(zhǎng)(一定要找做過(guò)幾個(gè)成功項(xiàng)目的學(xué)長(zhǎng)或老師做指導(dǎo),否則經(jīng)驗(yàn)不足也可能誤導(dǎo)),有教師指 導(dǎo),學(xué)習(xí)進(jìn)程會(huì)加快(人工智能學(xué)科里有個(gè)術(shù)語(yǔ)叫無(wú)教師指導(dǎo)學(xué)習(xí)模式與有教師指導(dǎo)學(xué)習(xí)模式,無(wú)教師指導(dǎo)學(xué)習(xí)模式比有教師指導(dǎo)學(xué)習(xí)模式復(fù)雜許多。 許多人怕硬件,其實(shí)嵌入式系統(tǒng)硬件比電子線路好學(xué)多了。只要深入理解:MCU的硬件最小系統(tǒng),對(duì)IO口、串行通信、鍵盤(pán)、LED、LCD、 SPI、 I2C、PWM、AD(包括一些傳感器)、DA等逐個(gè)實(shí)驗(yàn)理解,逐步實(shí)踐,再通過(guò)動(dòng)手做一個(gè)實(shí)際的小系統(tǒng),底層硬件基礎(chǔ)就有了。各個(gè)硬件模 塊驅(qū)動(dòng)程序
38、的編寫(xiě)是嵌入式系統(tǒng)的必備基礎(chǔ)。學(xué)習(xí)嵌入式系統(tǒng)的初期,這個(gè)過(guò)程是必須的。 至于嵌入式實(shí)時(shí)操作系統(tǒng)RTOS,一定不 要一開(kāi)始就學(xué),這樣會(huì)走很多彎路,也會(huì)使你對(duì)嵌入式系統(tǒng)感到畏懼。等你軟件硬件基礎(chǔ)打好了,再學(xué)習(xí)就感到容易理解。實(shí)際上,許多嵌入式應(yīng)用并不需要操作系 統(tǒng)。也可以根據(jù)實(shí)際項(xiàng)目需要,再學(xué)習(xí)特定的RTOS。不要被一些嵌入式實(shí)時(shí)操作系統(tǒng)培訓(xùn)班的宣傳所誤導(dǎo),而忽視實(shí)際嵌入式系統(tǒng)軟硬件基礎(chǔ)知識(shí)的學(xué)習(xí)。 要避免片面地單純從“電子”或“計(jì)算機(jī)軟件”角度認(rèn)識(shí)嵌入式系統(tǒng)。前面說(shuō)過(guò),嵌入式系統(tǒng)是軟件與硬件的綜合體。因此,要逐步從MCU的最小系統(tǒng)開(kāi)始, 一點(diǎn)一點(diǎn)理解硬件原理及底層硬件驅(qū)動(dòng)
39、編程方法。要通過(guò)規(guī)范的例子,理解軟件工程封裝、可復(fù)用等思想。通過(guò)規(guī)范編程,積累底層構(gòu)件(component), 也就是一個(gè)一個(gè)模塊;但是要封裝得比較好,可復(fù)用。 注重實(shí)驗(yàn)與實(shí)踐。這里說(shuō)的實(shí)驗(yàn)主要指通過(guò)重復(fù)來(lái)驗(yàn)證他人的工作,目的是學(xué)習(xí)基礎(chǔ)知識(shí),這個(gè)過(guò)程一定要經(jīng)歷。實(shí)踐是自己設(shè)計(jì),有具體的“產(chǎn)品”目標(biāo)。如果花500元左右,自己做一個(gè)具有一定功能的小產(chǎn)品,且能穩(wěn)定運(yùn)行1年以上,就可以說(shuō)接近入門(mén)了。 關(guān)于入門(mén)芯片的選擇。不要選太復(fù)雜的微控制器作為入門(mén)芯片,不能超越學(xué)習(xí)過(guò)程。不要一下子學(xué)習(xí)幾種芯片??梢酝ㄟ^(guò)一個(gè)芯片入門(mén),并具有一個(gè)實(shí)踐經(jīng)驗(yàn) 后,根據(jù)實(shí)際需要選擇芯片開(kāi)發(fā)實(shí)際產(chǎn)品。注
40、意,不要把微處理器(MPU與微控制器(MCU)概念相混淆,微處理器只是微控制器的內(nèi)核。 關(guān)于嵌入式操作系統(tǒng)的選擇??梢缘鹊骄哂幸欢▽?shí)踐基礎(chǔ)后,選擇一個(gè)簡(jiǎn)單、容易理解原理的嵌入式操作系統(tǒng)進(jìn)行學(xué)習(xí)。不要一開(kāi)始就學(xué)習(xí)幾種操作系統(tǒng),理解了基本原理,實(shí)踐中確有實(shí)際需要再學(xué)習(xí)也不遲。人總是要不斷學(xué)習(xí)的。 關(guān)于匯編語(yǔ)言與C語(yǔ)言的取舍。隨著:MCU對(duì)C編譯的優(yōu)化支持,對(duì)于匯編語(yǔ)言可以只了解幾個(gè)必要的語(yǔ)句,而直接使用C語(yǔ)言編程。但必須通過(guò)第一個(gè)程序 理解芯片初始化過(guò)程、中斷機(jī)制、程序存儲(chǔ)情況等,區(qū)別于PC機(jī)程序的內(nèi)容。另外,為了測(cè)試的需要,最好掌握一門(mén)PC機(jī)編程語(yǔ)言。 要明確
41、自己的學(xué)習(xí)目的,并注意學(xué)習(xí)方法。要明確學(xué)習(xí)目的是打基礎(chǔ),還是為了適應(yīng)工作需要而進(jìn)行的短訓(xùn)。學(xué)習(xí)方法方面,要根據(jù)學(xué)習(xí)目的選擇合適的學(xué)習(xí)途 徑,注意理論學(xué)習(xí)與實(shí)踐、通用知識(shí)與芯片相關(guān)知識(shí)、硬件知識(shí)與軟件知識(shí)的平衡,要在理解軟件工程基本原理基礎(chǔ)上理解硬件構(gòu)件與軟件構(gòu)件等基本概念。 以上建議,僅供初學(xué)者參考。當(dāng)然,以上只是基礎(chǔ)階段的學(xué)習(xí)建議。要成為良好的嵌入式系統(tǒng)設(shè)計(jì)師,還需要在實(shí)際項(xiàng)目中鍛煉,并不斷學(xué)習(xí)與積累經(jīng)驗(yàn)。嵌入式Linux學(xué)前指導(dǎo)(初學(xué)者必讀)目前,Linux作為嵌入式系統(tǒng)的主力軍,廣泛應(yīng)用于消費(fèi)類(lèi)電子、工業(yè)控 制、軍工電子、電信/網(wǎng)絡(luò)/通訊、航空航天、汽車(chē)電子、醫(yī)療設(shè)備、儀器儀表
42、等相關(guān)行業(yè)。隨著嵌入式行業(yè)的迅猛發(fā)展,嵌入式Linux憑借其系統(tǒng)發(fā)展的成熟 度、市場(chǎng)應(yīng)用的高份額也受到更多工程師朋友的青睞,越來(lái)越多的企業(yè)和研發(fā)機(jī)構(gòu)都轉(zhuǎn)向嵌入式Linux的開(kāi)發(fā)和研究,這使得嵌入式Linux在新興的嵌入式 操作系統(tǒng)領(lǐng)域內(nèi)也獲得了飛速發(fā)展和廣泛應(yīng)用。而對(duì)于那些希望盡快進(jìn)入嵌入式行業(yè)從事產(chǎn)品研發(fā)的朋友們,選擇嵌入式Linux方向作為切入點(diǎn)無(wú)疑是最好的途 徑之一。近期,有許多面臨畢業(yè)、找工作的大學(xué)生來(lái)網(wǎng)站咨詢(xún)了解 有關(guān)嵌入式Linux方向的學(xué)習(xí)安排。在與他們交流溝通的過(guò)程中,被問(wèn)到最多的幾個(gè)問(wèn)題就是“如何做好嵌入式Linux學(xué)習(xí)前的準(zhǔn)備?”,“學(xué)習(xí)嵌入式 Linux需要補(bǔ)習(xí)哪些基礎(chǔ)課
43、程?”,“嵌入式Linux開(kāi)發(fā)跟普通軟件開(kāi)發(fā)在學(xué)習(xí)方法上有什么不同?”,“項(xiàng)目實(shí)戰(zhàn)環(huán)節(jié)多嗎?”,“有專(zhuān)業(yè)人員帶領(lǐng) 嗎?”,相信這些也是很多準(zhǔn)備入行的初學(xué)者都會(huì)關(guān)心的問(wèn)題,為了幫助大家做好嵌入式Linux的學(xué)前準(zhǔn)備,我們對(duì)這些常見(jiàn)的問(wèn)題逐一進(jìn)行解答,提供給大家 參考,希望能夠有所幫助。1、如何做好嵌入式Linux學(xué)習(xí)前的準(zhǔn)備?要成為一名合格的嵌入式Linux工程師,就需要系統(tǒng)的學(xué)習(xí)軟、硬件相關(guān)領(lǐng) 域內(nèi)的知識(shí),需要在最開(kāi)始就掌握開(kāi)發(fā)的規(guī)范和原則,養(yǎng)成良好的工作習(xí)慣。為了確保學(xué)習(xí)的效果,這就要求準(zhǔn) 備參加嵌入式Linux就業(yè)課程學(xué)習(xí)的同學(xué)要調(diào)整好自己的時(shí)間,務(wù)必要確保在4個(gè)多月的學(xué)習(xí)時(shí)間內(nèi)能夠高度集
44、中精力。在整個(gè)集中學(xué)習(xí)過(guò)程中,既要保證課上認(rèn)真聽(tīng)講、實(shí)戰(zhàn)演練的時(shí)間,也要保證課下繼續(xù)實(shí)戰(zhàn)演練、查閱資料的時(shí)間。只有經(jīng)過(guò)這種高強(qiáng)度的、實(shí)戰(zhàn)為主的訓(xùn)練,才能夠在比較短的時(shí)間內(nèi)掌握規(guī)范的嵌入式開(kāi)發(fā)工作流程,讓自己符合嵌入式企業(yè)對(duì)應(yīng)崗位的需求。除了在學(xué)習(xí)時(shí)間上要做好充分的準(zhǔn)備之外,在學(xué)習(xí)的心態(tài)和方法的調(diào)整上也要做 好準(zhǔn)備。許多朋友只了解嵌入式Linux方向美好的發(fā)展前景,只關(guān)注高收入、就業(yè)機(jī)會(huì)多等熱點(diǎn),卻忽略了學(xué)習(xí)過(guò)程本身。為了能夠讓集中培訓(xùn)的效果發(fā)揮到最 佳,建議大家在學(xué)習(xí)開(kāi)始前更多地去了解嵌入式產(chǎn)品研發(fā)的特點(diǎn)、所需要掌握的技術(shù)規(guī)范和工作要點(diǎn),關(guān)注需具備基礎(chǔ)的補(bǔ)充和學(xué)習(xí),從而為后續(xù)的強(qiáng)化學(xué)習(xí)過(guò)程做
45、好心態(tài)上的準(zhǔn)備,畢竟態(tài)度往往決定了最后做事的結(jié)果。2、學(xué)習(xí)嵌入式Linux需要補(bǔ)習(xí)哪些基礎(chǔ)課程?嵌入式Linux工程師的學(xué)習(xí)需要具備一定的C語(yǔ)言基礎(chǔ),因此面對(duì)許多朋友 只是在大一或者大二學(xué)習(xí)過(guò)C(還不一定認(rèn)真學(xué)了,呵呵?。?,之后基本就不再用過(guò)的情況,建議大家學(xué)習(xí)之前先復(fù)習(xí)一下C語(yǔ)言基礎(chǔ)這塊。要提醒大 家的是,復(fù)習(xí)時(shí)不能只關(guān)注基本語(yǔ)法,對(duì)于常用的數(shù)據(jù)存儲(chǔ)及處理方式,例如:數(shù)組、結(jié)構(gòu)體等也要關(guān)注,有條件的話一定在機(jī)器上親自敲敲代碼、分析理解一下具 體案例代碼編寫(xiě)的思路,讓自己慢慢進(jìn)入一名嵌入式開(kāi)發(fā)人員的狀態(tài)。此外,在時(shí)間允許的情況下,建議大家看一下有關(guān)計(jì)算機(jī)操作系統(tǒng)工作原理以及 計(jì)算機(jī)組成原理等方
46、面的專(zhuān)業(yè)書(shū)籍。對(duì)于進(jìn)程、線程、任務(wù)調(diào)度、總線、I/O等基本概念及工作原理有一個(gè)初步的了解和掌握,這部分知識(shí)的準(zhǔn)備對(duì)于后續(xù)更好地 學(xué)習(xí)嵌入式Linux系統(tǒng)開(kāi)發(fā)將會(huì)起到很好的幫助作用。3、嵌入式Linux開(kāi)發(fā)跟普通軟件開(kāi)發(fā)在學(xué)習(xí)方法上有什么不同?要成為一名成功的嵌入式軟件開(kāi)發(fā)人員,程序的設(shè)計(jì)能力是首要技能,這一點(diǎn)與 普通的軟件開(kāi)發(fā)人員的要求是一樣的。但是作為“軟硬兼施”的嵌入式開(kāi)發(fā),則要求大家不僅要了解較底層軟件的工作過(guò)程和工作原理(例如操作系統(tǒng)級(jí)、驅(qū)動(dòng)程序 級(jí)軟件),在軟件開(kāi)發(fā)的專(zhuān)業(yè)水平上也需要充分考慮軟件設(shè)計(jì)的時(shí)間和空間效率,這樣才能設(shè)計(jì)出高性能嵌入式程序。因此面對(duì)相對(duì)復(fù)雜的嵌入式系統(tǒng)的研發(fā)過(guò)
47、程,在學(xué)習(xí)的過(guò)程中需要更多關(guān)注完整的知識(shí)體系結(jié)構(gòu)的建立。特別是對(duì)于原理性知識(shí)的掌握程度則相對(duì)普通的軟件開(kāi)發(fā)人員提出了更高的要求。因此在學(xué)習(xí)的過(guò)程中,“要知其然,更要知其所以然”。記住貫穿始終的是:要知道為什么學(xué)?要知道學(xué)的是什么?要知道怎么學(xué)?要知道學(xué)了如何用?最后還要知道用的時(shí)候出了問(wèn)題該如何解決?相信以這些問(wèn)題為線索的學(xué)習(xí)過(guò)程一定可以幫助大家快速成為一名優(yōu)秀的嵌入式開(kāi)發(fā)工程師。嵌入式系統(tǒng)Linux內(nèi)核開(kāi)發(fā)學(xué)習(xí)指導(dǎo)框圖嵌入式設(shè)計(jì)應(yīng)具備的基本技能1、Linux 基礎(chǔ)安裝Linux操作系統(tǒng) Linux文件系統(tǒng) Linux常用命令 Linux啟動(dòng)過(guò)程詳解
48、160;熟悉Linux服務(wù)能夠獨(dú)立安裝Linux操作系統(tǒng) 能夠熟練使用Linux系統(tǒng)的基本命令 認(rèn)識(shí)Linux系統(tǒng)的常用服務(wù)安裝Linux操作系統(tǒng)Linux基本命令實(shí)踐 設(shè)置Linux環(huán)境變量 定制Linux的服務(wù) Shell 編程基礎(chǔ)使用vi編輯文件 使用Emacs編輯文件 使用其他編輯器2、Shell 編程基礎(chǔ)Shell簡(jiǎn)介 認(rèn)識(shí)后臺(tái)程序Bash編程熟悉Linux系統(tǒng)下的編輯環(huán)境 熟悉Linux下的各種Shell 熟練進(jìn)行shell編程熟悉vi基本操作 熟悉Em
49、acs的基本操作 比較不同shell的區(qū)別 編寫(xiě)一個(gè)測(cè)試服務(wù)器是否連通的shell腳本程序 編寫(xiě)一個(gè)查看進(jìn)程是否存在的shell腳本程序 編寫(xiě)一個(gè)帶有循環(huán)語(yǔ)句的shell腳本程序3、Linux 下的 C 編程基礎(chǔ)linux C語(yǔ)言環(huán)境概述 Gcc使用方法 Gdb調(diào)試技術(shù) Autoconf Automake Makefile 代碼優(yōu)化 熟悉Linux系統(tǒng)下的開(kāi)發(fā)環(huán)境 熟悉Gcc編譯器 熟悉Makefile規(guī)則編寫(xiě)Hello,World程序 使用
50、160;make命令編譯程序 編寫(xiě)帶有一個(gè)循環(huán)的程序 調(diào)試一個(gè)有問(wèn)題的程序4、嵌入式系統(tǒng)開(kāi)發(fā)基礎(chǔ)嵌入式系統(tǒng)概述 交叉編譯 配置TFTP服務(wù) 配置NFS服務(wù) 下載Bootloader和內(nèi)核 嵌入式Linux應(yīng)用軟件開(kāi)發(fā)流程熟悉嵌入式系統(tǒng)概念以及開(kāi)發(fā)流程 建立嵌入式系統(tǒng)開(kāi)發(fā)環(huán)境制作cross_gcc工具鏈 編譯并下載U-boot 編譯并下載Linux內(nèi)核 編譯并下載Linux應(yīng)用程序4、嵌入式系統(tǒng)移植Linux內(nèi)核代碼 平臺(tái)相關(guān)代碼分析 ARM平臺(tái)介紹 平臺(tái)移
51、植的關(guān)鍵技術(shù) 移植Linux內(nèi)核到 ARM平臺(tái) 了解移植的概念 能夠移植Linux內(nèi)核移植Linux2.6內(nèi)核到 ARM9開(kāi)發(fā)板5、嵌入式 Linux 下串口通信串行I/O的基本概念 嵌入式Linux應(yīng)用軟件開(kāi)發(fā)流程 Linux系統(tǒng)的文件和設(shè)備 與文件相關(guān)的系統(tǒng)調(diào)用 配置超級(jí)終端和MiniCOM 能夠熟悉進(jìn)行串口通信 熟悉文件I/O 編寫(xiě)串口通信程序 編寫(xiě)多串口通信程序6、嵌入式系統(tǒng)中多進(jìn)程程序設(shè)計(jì)Linux系統(tǒng)進(jìn)程概述 嵌入式系統(tǒng)的進(jìn)
52、程特點(diǎn) 進(jìn)程操作 守護(hù)進(jìn)程 相關(guān)的系統(tǒng)調(diào)用了解Linux系統(tǒng)中進(jìn)程的概念 能夠編寫(xiě)多進(jìn)程程序編寫(xiě)多進(jìn)程程序 編寫(xiě)一個(gè)守護(hù)進(jìn)程程序 sleep系統(tǒng)調(diào)用任務(wù)管理、同步與通信Linux任務(wù)概述任務(wù)調(diào)度 管道 信號(hào) 共享內(nèi)存 任務(wù)管理 API 了解Linux系統(tǒng)任務(wù)管理機(jī)制 熟悉進(jìn)程間通信的幾種方式 熟悉嵌入式Linux中的任務(wù)間同步與通信編寫(xiě)一個(gè)簡(jiǎn)單的管道程序?qū)崿F(xiàn)文件傳輸 編寫(xiě)一個(gè)使用共享內(nèi)存的程序7、嵌入式系統(tǒng)中多線程程序設(shè)計(jì)線程的基礎(chǔ)知識(shí)
53、;多線程編程方法 線程應(yīng)用中的同步問(wèn)題了解線程的概念 能夠編寫(xiě)簡(jiǎn)單的多線程程序編寫(xiě)一個(gè)多線程程序8、嵌入式 Linux 網(wǎng)絡(luò)編程網(wǎng)絡(luò)基礎(chǔ)知識(shí) 嵌入式Linux中TCP/IP網(wǎng)絡(luò)結(jié)構(gòu) socket 編程 常用 API函數(shù) 分析Ping命令的實(shí)現(xiàn) 基本UDP套接口編程 許可證管理 PPP協(xié)議 GPRS 了解嵌入式Linux網(wǎng)絡(luò)體系結(jié)構(gòu) 能夠進(jìn)行嵌入式Linux環(huán)境下的socket 編程 熟悉UDP協(xié)議、PPP協(xié)議
54、0;熟悉GPRS 使用socket 編寫(xiě)代理服務(wù)器 使用socket 編寫(xiě)路由器 編寫(xiě)許可證服務(wù)器 指出TCP和UDP的優(yōu)缺點(diǎn) 編寫(xiě)一個(gè)web服務(wù)器 編寫(xiě)一個(gè)運(yùn)行在 ARM平臺(tái)的網(wǎng)絡(luò)播放器9、GUI 程序開(kāi)發(fā)GUI基礎(chǔ) 嵌入式系統(tǒng)GUI類(lèi)型 編譯QT 進(jìn)行QT開(kāi)發(fā)熟悉嵌入式系統(tǒng)常用的GUI 能夠進(jìn)行QT編程使用QT編寫(xiě)“Hello,World”程序 調(diào)試一個(gè)加入信號(hào)/槽的實(shí)例 通過(guò)重載QWidget 類(lèi)方法處理事件10、Lin
55、ux 字符設(shè)備驅(qū)動(dòng)程序設(shè)備驅(qū)動(dòng)程序基礎(chǔ)知識(shí) Linux系統(tǒng)的模塊 字符設(shè)備驅(qū)動(dòng)分析 fs_operation結(jié)構(gòu) 加載驅(qū)動(dòng)程序了解設(shè)備驅(qū)動(dòng)程序的概念 了解Linux字符設(shè)備驅(qū)動(dòng)程序結(jié)構(gòu) 能夠編寫(xiě)字符設(shè)備驅(qū)動(dòng)程序編寫(xiě)Skull驅(qū)動(dòng) 編寫(xiě)鍵盤(pán)驅(qū)動(dòng)編寫(xiě)I/O驅(qū)動(dòng) 分析一個(gè)看門(mén)狗驅(qū)動(dòng)程序 對(duì)比Linux2.6內(nèi)核與2.4內(nèi)核中字符設(shè)備驅(qū)動(dòng)的不同Linux 塊設(shè)備驅(qū)動(dòng)程序塊設(shè)備驅(qū)動(dòng)程序工作原理 典型的塊設(shè)備驅(qū)動(dòng)程序分析 塊設(shè)備的讀寫(xiě)請(qǐng)求隊(duì)列了解Linux塊設(shè)備驅(qū)動(dòng)程序結(jié)構(gòu)
56、160;能夠編寫(xiě)簡(jiǎn)單的塊設(shè)備驅(qū)動(dòng)程序比較字符設(shè)備與塊設(shè)備的異同 編寫(xiě)MMC卡驅(qū)動(dòng)程序 分析一個(gè)文件系統(tǒng) 對(duì)比Linux2.6內(nèi)核與2.4內(nèi)核中塊設(shè)備驅(qū)動(dòng)的不同11、文件系統(tǒng)虛擬文件系統(tǒng) 文件系統(tǒng)的建立 ramfs內(nèi)存文件系統(tǒng) proc文件系統(tǒng) devfs 文件系統(tǒng) MTD技術(shù)簡(jiǎn)介 MTD塊設(shè)備初始化 MTD塊設(shè)備的讀寫(xiě)操作了解Linux系統(tǒng)的文件系統(tǒng) 了解嵌入式Linux的文件系統(tǒng) 了解MTD技術(shù) 能夠編寫(xiě)簡(jiǎn)單的文件系統(tǒng)為 ARM9開(kāi)發(fā)板添加
57、160;MTD支持 移植JFFS2文件系統(tǒng) 通過(guò)proc文件系統(tǒng)修改操作系統(tǒng)參數(shù) 分析romfs 文件系統(tǒng)源代碼 創(chuàng)建一個(gè)cramfs 文件系統(tǒng) 簡(jiǎn)單地總結(jié)一下硬件開(kāi)發(fā)的基本過(guò)程: 1、明確硬件總體需求情況,如CPU處理能力、存儲(chǔ)容量及速度、I/O端口的分配、接口要求、電平要求、特殊電路要求等等。 2、根據(jù)需求分析制定硬件總體方案,尋求關(guān)鍵器件及相關(guān)技術(shù)資料、技術(shù)途徑和技術(shù)支持,充分考慮技術(shù)可行性、可靠性和成本控制,并對(duì)開(kāi)發(fā)調(diào)試工具提出明確要求。關(guān)鍵器件
58、可試著去索取樣品。 3、總體方案確定后,做硬件和軟件的詳細(xì)設(shè)計(jì),包括繪制硬件原理圖、軟件功能框圖、PCB設(shè)計(jì)、同時(shí)完成開(kāi)發(fā)元器件清單。 4、做好PCB板后,對(duì)原理設(shè)計(jì)中的各個(gè)功能單元進(jìn)行焊接調(diào)試,必要時(shí)修改原理圖并作記錄。 5、軟硬件系統(tǒng)聯(lián)調(diào)。一般情況下,經(jīng)過(guò)調(diào)試后原理及PCB設(shè)計(jì)上有所調(diào)整,需要二次投板。 6、可靠性測(cè)試、穩(wěn)定性測(cè)試,通過(guò)驗(yàn)收,項(xiàng)目完成! 硬件工程師應(yīng)具備的基本技能:
59、;(1)由需求分析至總體方案、詳細(xì)設(shè)計(jì)的規(guī)劃創(chuàng)造能力; (2)熟練運(yùn)用設(shè)計(jì)工具,設(shè)計(jì)原理圖、PCB板的能力; (3)熟練運(yùn)用單片機(jī)、DSP、PLD、FPGA等進(jìn)行軟硬件開(kāi)發(fā)調(diào)試的能力; (4)熟練運(yùn)用仿真工具、示波器、信號(hào)發(fā)生器、邏輯分析儀等調(diào)測(cè)硬件的能力; (5)掌握常用的標(biāo)準(zhǔn)電路的設(shè)計(jì)能力,如復(fù)位電路、常用濾波器電路、功放電路、高速信號(hào)傳輸線的匹配電路等; (6)
60、故障定位、解決問(wèn)題的能力; (7)設(shè)計(jì)文檔的組織編寫(xiě)技能。 嵌入式書(shū)籍推薦 Linux基礎(chǔ) 1、Linux與Unix Shell 編程指南 C語(yǔ)言基礎(chǔ) 1、C Primer Plus,5th Edition【美】Stephen Prata著 2、The C Programming Language, 2nd Edition【美】Bri
61、an W. Kernighan David M. Rithie(K & R)著 3、Advanced Programming in the UNIX Environment,2nd Edition(APUE) 4、嵌入式Linux應(yīng)用程序開(kāi)發(fā)詳解 Linux內(nèi)核 1、深入理解Linux內(nèi)核(第三版) 2、Linux內(nèi)核源代碼情景分析毛德操 胡希明著 研發(fā)方向 1、UNIX
62、0;Network Programming(UNP) 2、TCP/IP詳解 3、Linux內(nèi)核編程 4、Linux設(shè)備驅(qū)動(dòng)開(kāi)發(fā)(LDD) 5、Linux高級(jí)程序設(shè)計(jì) 楊宗德著硬件基礎(chǔ) 1、ARM體系結(jié)構(gòu)與編程杜春雷著 2、S3C2410 Datasheet 英語(yǔ)基礎(chǔ) 1、計(jì)算機(jī)與通信專(zhuān)業(yè)英語(yǔ) 系統(tǒng)教程 1、嵌入式系統(tǒng)體系結(jié)構(gòu)、編程與設(shè)計(jì) 2、嵌入式系統(tǒng)采用公開(kāi)源代碼和StrongARM/Xscale處理器毛德操 胡希明著 3、Build
63、ing Embedded Linux Systems4、嵌入式ARM系統(tǒng)原理與實(shí)例開(kāi)發(fā) 楊宗德著理論基礎(chǔ) 1、算法導(dǎo)論 2、數(shù)據(jù)結(jié)構(gòu)(C語(yǔ)言版) 3、計(jì)算機(jī)組織與體系結(jié)構(gòu)?性能分析 4、深入理解計(jì)算機(jī)系統(tǒng)【美】Randal E. Bryant David O''Hallaron著 5、操作系統(tǒng):精髓與設(shè)計(jì)原理 6、編譯原理 7、數(shù)據(jù)通信與計(jì)算機(jī)網(wǎng)絡(luò) 8、數(shù)據(jù)壓縮原理與應(yīng)用 C語(yǔ)言書(shū)籍推薦 1. The C programming language 程序設(shè)計(jì)語(yǔ)言 2. Pointers on C 和指針 3. C traps
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024年旬陽(yáng)縣數(shù)學(xué)三上期末檢測(cè)試題含解析
- 七年級(jí) 生物學(xué)緒論1課件
- 理論結(jié)合實(shí)踐的衛(wèi)生資格考試試題及答案
- 明晰2025年大學(xué)語(yǔ)文考試知識(shí)框架試題及答案
- 自考行政管理對(duì)策研究試題及答案
- 助力行政法學(xué)考試試題與答案
- 2025年執(zhí)業(yè)藥師復(fù)習(xí)計(jì)劃試題及答案
- 綜合解析經(jīng)濟(jì)法概論試題及答案
- 行政法學(xué)現(xiàn)場(chǎng)案例試題及答案
- 行政管理專(zhuān)科語(yǔ)文考核試題及答案
- 大學(xué)軍事理論課教程第四章現(xiàn)代戰(zhàn)爭(zhēng)第二節(jié) 新軍事革命
- 專(zhuān)題四“挺膺擔(dān)當(dāng)”主題團(tuán)課
- 醫(yī)院體檢電子表格
- 國(guó)家義務(wù)教育質(zhì)量監(jiān)測(cè)初中美術(shù)試題
- 農(nóng)村現(xiàn)代農(nóng)業(yè)示范基地建設(shè)項(xiàng)目風(fēng)險(xiǎn)評(píng)估報(bào)告
- 呵護(hù)心理健康 安心快樂(lè)成長(zhǎng) 課件(共18張PPT) 小學(xué)生主題班會(huì)
- 原發(fā)性肝癌英文版培訓(xùn)課件
- 執(zhí)業(yè)醫(yī)師血尿相關(guān)考核試題
- 學(xué)生自行離校的協(xié)議書(shū)
- 大概念教學(xué):素養(yǎng)導(dǎo)向的單元整體設(shè)計(jì)
- 工余安健環(huán)培訓(xùn)
評(píng)論
0/150
提交評(píng)論