嵌入式Linux學習規劃
來自專欄編程雜記
5 人贊了文章
ARM+LINUX路線,主攻嵌入式Linux操作系統及其上應用軟體開發目標:
- 掌握主流嵌入式微處理器的結構與原理(初步定為arm9)
- 必須掌握一個嵌入式操作系統 (初步定為uclinux或linux,版本待定)
- 必須熟悉嵌入式軟體開發流程並至少做一個嵌入式軟體項目。
從事嵌入式軟體開發的好處是:
- 目前國內外這方面的人都很稀缺。這一領域入門門檻較高,所以非專業IT人員很難切入這一領域;另一方面,是因為這一領域較新,目前發展太快,大多數人無條件接觸。
- 與企業計算等應用軟體不同,嵌入式領域人才的工作強度通常低一些(但收入不低)。
- 哪天若想創業,搞自已的產品,嵌入式不像應用軟體那樣容易被盜版。硬體設計一般都是請其它公司給訂做(這叫「貼牌」:OEM),都是通用的硬體,我們只管設計軟體就變成自己的產品了。
- 興趣所在,這是最主要的。
從事嵌入式軟體開發的缺點是:
- 入門起點較高,所用到的技術往往都有一定難度,若軟硬體基礎不好,特別是操作系統級軟體功底不深,則可能不適於此行。
- 這方面的企業數量要遠少於企業計算類企業。
- 有少數公司經常要碩士以上的人搞嵌入式,主要是基於嵌入式的難度。但大多數公司也並無此要求,只要有經驗即可。
- 平台依託強,換平台比較辛苦。
興趣的由來:
- 成功觀念不同,不虛度此生,就是我的成功。
- 喜歡思考,挑戰邏輯思維。
- 喜歡C
- 喜歡底層開發,討厭vb類開發工具(並不是說vb不好)。
- 發展前景好,適合創業,不想自己要死了的時候還是一個工程師。
方法步驟
1、基礎知識:
- 目的:能看懂硬體工作原理,但重點在嵌入式軟體,特別是操作系統級軟體,那將是我的優勢。
- 科目:
- 數字電路、計算機組成原理、嵌入式微處理器結構。
- 彙編語言、C/C++、編譯原理、離散數學。
- 數據結構和演算法、操作系統、軟體工程、網路、資料庫。
- 方法:雖科目眾多,但都是較簡單的基礎,且大部分已掌握。不一定全學,可根據需要選修。
- 主攻書籍:the c++ programming language(一直沒時間讀)、數據結構-C2。
2、學習linux:
- 目的:深入掌握linux系統。
- 方法:使用linux—〉linxu系統編程開發—〉驅動開發和分析linux內核。先看深,那主講原理。看幾遍後,看情景分析,對照深看,兩本交叉,深是綱,情是目。剖析則是0.11版,適合學習。最後深入代碼。
- 主攻書籍:linux內核完全剖析、unix環境高級編程、深入理解linux內核、情景分析和源代。
3、學習嵌入式linux:
- 目的:掌握嵌入式處理器其及系統。
- 方法:
- 嵌入式微處理器結構與應用:直接arm原理及彙編即可,不要重複x86。
- 嵌入式操作系統類:ucOS/II簡單,開源,可供入門。而後深入研究uClinux。
- 必須有塊開發板(arm9以上),有條件可參加培訓(進步快,能認識些朋友)。
- 主攻書籍:毛德操的《嵌入式系統》及其他arm9手冊與arm彙編指令等。
4、深入學習:
- 數字圖像壓縮技術:主要是應掌握MPEG、mp3等編解碼演算法和技術。
- 通信協議及編程技術:TCP/IP協議、802.11,Bluetooth,GPRS、GSM、CDMA等。
- 網路與信息安全技術:如加密技術,數字證書CA等。
- DSP技術:Digital Signal Process,DSP處理器通過硬體實現數字信號處理演算法。
- 說明:
- 太多細節未說明,可根據實際情況調整。重點在於1、3,不必完全按照順序作。對於學習c++,理由是c++不只是一種語言,一種工具,她還是一 種藝術,一種文化,一種哲學理念、但不是拿來炫耀得東西。對於linux內核,學習編程,讀一些優秀代碼也是有必要的。
- 注意:
- 要學會舉一反多,有強大的基礎,很多東西簡單看看就能會。想成為合格的程序員,前提是必須熟練至少一種編程語言,並具有良好的邏輯思維。一定要理論結合實踐。
- 不要一味鑽研技術,雖然擠出時間是很難做到的,但還是要留點餘地去完善其他的愛好,比如宇宙,素描、機械、管理,心理學、遊戲、科幻電影。還有一些不願意做但必須要做的!
- 技術是通過編程編程在編程編出來的。永遠不要夢想一步登天,不要做浮躁的人,不要覺得路途漫上。而是要編程編程在編程,完了在編程,在編程!等機會來了在創業(不要相信有奇蹟發生,盲目創業很難成功,即便成功了發展空間也不一定很大)。
1、Linux 基礎
安裝Linux操作系統 Linux文件系統 Linux常用命令 Linux啟動過程詳解 熟悉Linux服務能夠獨立安裝Linux操作系統 能夠熟練使用Linux系統的基本命令 認識Linux系統的常用服務安裝Linux操作系統Linux基本命令實踐 設置Linux環境變數 定製Linux的服務 Shell 編程基礎使用vi編輯文件 使用Emacs編輯文件 使用其他編輯器
2、Shell 編程基礎
Shell簡介 認識後台程序Bash編程熟悉Linux系統下的編輯環境 熟悉Linux下的各種Shell 熟練進行shell編程熟悉vi基本操作 熟悉Emacs的基本操作 比較不同shell的區別 編寫一個測試伺服器是否連通的shell腳本程序 編寫一個查看進程是否存在的shell腳本程序 編寫一個帶有循環語句的shell腳本程序
3、Linux 下的 C 編程基礎
linux C語言環境概述 Gcc使用方法 Gdb調試技術 Autoconf Automake Makefile 代碼優化 熟悉Linux系統下的開發環境 熟悉Gcc編譯器 熟悉Makefile規則編寫Hello,World程序 使用 make命令編譯程序 編寫帶有一個循環的程序 調試一個有問題的程序
4、嵌入式系統開發基礎
嵌入式系統概述 交叉編譯 配置TFTP服務 配置NFS服務 下載Bootloader和內核 嵌入式Linux應用軟體開發流程熟悉嵌入式系統概念以及開發流程 建立嵌入式系統開發環境製作cross_gcc工具鏈 編譯並下載U-boot 編譯並下載Linux內核 編譯並下載Linux應用程序
4、嵌入式系統移植
Linux內核代碼 平台相關代碼分析 ARM平台介紹 平台移植的關鍵技術 移植Linux內核到 ARM平台 了解移植的概念 能夠移植Linux內核移植Linux2.6內核到 ARM9開發板
5、嵌入式 Linux 下串口通信
串列I/O的基本概念 嵌入式Linux應用軟體開發流程 Linux系統的文件和設備 與文件相關的系統調用 配置超級終端和MiniCOM 能夠熟悉進行串口通信 熟悉文件I/O 編寫串口通信程序 編寫多串口通信程序
6、嵌入式系統中多進程程序設計
Linux系統進程概述 嵌入式系統的進程特點 進程操作 守護進程 相關的系統調用了解Linux系統中進程的概念 能夠編寫多進程程序編寫多進程程序 編寫一個守護進程程序 sleep系統調用任務管理、同步與通信Linux任務概述任務調度 管道 信號 共享內存 任務管理 API 了解Linux系統任務管理機制 熟悉進程間通信的幾種方式 熟悉嵌入式Linux中的任務間同步與通信編寫一個簡單的管道程序實現文件傳輸 編寫一個使用共享內存的程序
7、嵌入式系統中多線程程序設計
線程的基礎知識 多線程編程方法 線程應用中的同步問題了解線程的概念 能夠編寫簡單的多線程程序編寫一個多線程程序
8、嵌入式 Linux 網路編程
網路基礎知識 嵌入式Linux中TCP/IP網路結構 socket 編程 常用 API函數 分析Ping命令的實現 基本UDP套介面編程 許可證管理 PPP協議 GPRS 了解嵌入式Linux網路體系結構 能夠進行嵌入式Linux環境下的socket 編程 熟悉UDP協議、PPP協議 熟悉GPRS 使用socket 編寫代理伺服器 使用socket 編寫路由器 編寫許可證伺服器 指出TCP和UDP的優缺點 編寫一個web伺服器 編寫一個運行在 ARM平台的網路播放器
9、GUI 程序開發
GUI基礎 嵌入式系統GUI類型 編譯QT 進行QT開發熟悉嵌入式系統常用的GUI 能夠進行QT編程使用QT編寫「Hello,World」程序 調試一個加入信號/槽的實例 通過重載QWidget 類方法處理事件
10、Linux 字元設備驅動程序
設備驅動程序基礎知識 Linux系統的模塊 字元設備驅動分析 fs_operation結構 載入驅動程序了解設備驅動程序的概念 了解Linux字元設備驅動程序結構 能夠編寫字元設備驅動程序編寫Skull驅動 編寫鍵盤驅動編寫I/O驅動 分析一個看門狗驅動程序 對比Linux2.6內核與2.4內核中字元設備驅動的不同Linux 塊設備驅動程序塊設備驅動程序工作原理 典型的塊設備驅動程序分析 塊設備的讀寫請求隊列了解Linux塊設備驅動程序結構 能夠編寫簡單的塊設備驅動程序比較字元設備與塊設備的異同 編寫MMC卡驅動程序 分析一個文件系統 對比Linux2.6內核與2.4內核中塊設備驅動的不同
11、文件系統
虛擬文件系統 文件系統的建立 ramfs內存文件系統 proc文件系統 devfs 文件系統 MTD技術簡介 MTD塊設備初始化 MTD塊設備的讀寫操作了解Linux系統的文件系統 了解嵌入式Linux的文件系統 了解MTD技術 能夠編寫簡單的文件系統為 ARM9開發板添加 MTD支持 移植JFFS2文件系統 通過proc文件系統修改操作系統參數 分析romfs 文件系統源代碼 創建一個cramfs 文件系統
簡單地總結一下硬體開發的基本過程
- 明確硬體總體需求情況,如CPU處理能力、存儲容量及速度、I/O埠的分配、介面要求、電平要求、特殊電路要求等等。
- 根據需求分析制定硬體總體方案,尋求關鍵器件及相關技術資料、技術途徑和技術支持,充分考慮技術可行性、可靠性和成本控制,並對開發調試工具提出明確要求。關鍵器件可試著去索取樣品。
- 總體方案確定後,做硬體和軟體的詳細設計,包括繪製硬體原理圖、軟體功能框圖、PCB設計、同時完成開發元器件清單。
- 做好PCB板後,對原理設計中的各個功能單元進行焊接調試,必要時修改原理圖並作記錄。
- 軟硬體系統聯調。一般情況下,經過調試後原理及PCB設計上有所調整,需要二次投板。
- 可靠性測試、穩定性測試,通過驗收,項目完成!
硬體工程師應具備的基本技能
- 由需求分析至總體方案、詳細設計的規劃創造能力;
- 熟練運用設計工具,設計原理圖、PCB板的能力;
- 熟練運用單片機、DSP、PLD、FPGA等進行軟硬體開發調試的能力;
- 熟練運用模擬工具、示波器、信號發生器、邏輯分析儀等調測硬體的能力;
- 掌握常用的標準電路的設計能力,如複位電路、常用濾波器電路、功放電路、高速信號傳輸線的匹配電路等;
- 故障定位、解決問題的能力;
- 設計文檔的組織編寫技能。
嵌入式書籍推薦
Linux基礎
- 《Linux與Unix Shell 編程指南》
C語言基礎
- 《C Primer Plus,5th Edition》【美】Stephen Prata著
- 《The C Programming Language, 2nd Edition》【美】Brian W. Kernighan David M. Rithie(K & R)著
- 《Advanced Programming in the UNIX Environment,2nd Edition》(APUE)
- 《嵌入式Linux應用程序開發詳解》
Linux內核
- 《深入理解Linux內核》(第三版)
- 《Linux內核源代碼情景分析》毛德操 胡希明著
研發方向
- 《UNIX Network Programming》(UNP)
- 《TCP/IP詳解》
- 《Linux內核編程》
- 《Linux設備驅動開發》(LDD)
- 《Linux高級程序設計》 楊宗德著
硬體基礎
- 《ARM體系結構與編程》杜春雷著
- S3C2440 Datasheet
英語基礎
- 《計算機與通信專業英語》
系統教程
- 《嵌入式系統――體系結構、編程與設計》
- 《嵌入式系統――採用公開源代碼和StrongARM/Xscale處理器》毛德操 胡希明著
- 《Building Embedded Linux Systems》
- 《嵌入式ARM系統原理與實例開發》 楊宗德著
理論基礎
- 《演算法導論》
- 《數據結構(C語言版)》
- 《計算機組織與體系結構?性能分析》
- 《深入理解計算機系統》【美】Randal E. Bryant David OHallaron著
- 《操作系統:精髓與設計原理》
- 《編譯原理》
- 《數據通信與計算機網路》
- 《數據壓縮原理與應用》
C語言書籍推薦
- The C programming language 《C程序設計語言》
- Pointers on C 《C和指針》
- C traps and pitfalls 《C陷阱與缺陷》
- Expert C Lanuage 《專家C編程》
- Writing Clean Code -----Microsoft Techiniques for Developing Bug-free C Programs 《編程精粹--Microsoft 編寫優質無錯C程序秘訣》
- Programming Embedded Systems in C and C++ 《嵌入式系統編程》
- 《C語言嵌入式系統編程修鍊》
- 《高質量C++/C編程指南》林銳
註:儘可能多的編碼,要學好C,不能只注重C本身。演算法,架構方式等都很重要。
本文摘引自互聯網,已找不到原文地址。如果發現,希望提供給我,謝謝。
推薦閱讀:
※嵌入式是什麼
※Helio P60助攻!聯發科第二季度營收有望大幅上漲
※練一練!3道經典嵌入式C 面試題,答案在文末
※嵌入式工程師發展前景
※學習嵌入式Linux之前,這些概念要搞清~ 全網發布
TAG:嵌入式開發 |
