




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