第一篇:嵌入式linux學習步驟
嵌入式linux學習步驟:
基礎的:《linux C編程一站式學習》 高級的:《linux高級程序設計》,不過先看看《unix環境高級編程》,畢竟是權威 驅動:就是傳說中的LDD,還有《linux設備驅動開發詳解》 內核:《linux內核修煉之道》會比《Linux內核設計與實現》這個通俗一點 網絡:《linux內核網絡內幕》這個得結合網卡驅動看;還有《TCP/IP協議詳解卷1》中的ARP協議,IP路由,ping原理等,最好用wareshark抓包分析一下。搞linux,網絡編程和TCP/IP協議是重點
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調試技術AutoconfAutomakeMakefile代碼優化熟悉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文件系統
第二篇:嵌入式linu學習心得
嵌入式Linux學習心得
1、Linux命令
ls:查看目錄-l以列表方式查看;ls –l 與ll的功能一樣 pwd: 查看當前的目錄
cd:改變當前操作目錄cd /直接跳到根目錄 cd..回到上一級目錄 cat: 打印顯示當前文件的內容信息
mkdir:創建目錄
fdisk: 查看硬盤分區信息,-l以列表方式查看
->代表是鏈接文件,類似window下的快捷方式。
cp: 復制命令,例子cp 文件名 /home/dir/
mv: 移動或改名,如mv sonf.confsonf.txt(改名)移動:mv sonf.conf / rm:刪除命令,如rm –f test.c;如刪除目錄rm –fr d
man:查看某個命令的幫助,man 命令
2、各系統目錄的功能
drw—r—w--:d代表是目錄,drw代表當前用戶的權限,r代表組用戶的權限,w代表其它用戶的權限。x代表有執行權限。
/boot/gruff.conf: 啟動引導程序
/dev:brw—rw--:b代表是塊設備。Linux設備有三種,塊設備(b開頭)、字符設備(c開頭)、網絡設備。had代表第一個硬盤,hdb代表第二個硬盤。Hdb2代表第二塊硬盤的第二個分區。3,67代表主設備為3,從設備為67./etc:存放的是系統的配置文件。Inittab文件存放不同啟動方式下必須啟動的進程。Inittab文件中有6個啟動level,wait中對應著6個level的目錄,respawn代表當一個進程被意外終止了,但會自動啟動的進程,如守護進程。rc.d目錄中存放了一個rc.sysinit文件,里面存放系統初始化配置信息。/etc還有一個vsftpd里面存放tcp、ftp的配置。
/home : 用戶目錄,存放用戶的文件,/lib:存放庫文件,后綴為so的文件代表動態鏈接庫。
/lost+found:系統意外終止,存放一些可以找回的文件。
/mnt:掛載外部設備,如掛載光驅:mount –t /dev/cdrom/mnt/cdrom,如
果在雙系統中,要查看windows中D盤的文件,首先應該將D盤的文件映射過來,mount –t /dev/hda2/mnt/windows/d
/opt:用戶安裝的應用程序
/proc:是系統運行的映射,比較重要。里面的文件數字代表進程號。每個進程號目錄下包含進程的基本信息。還有其他信息,如cpuinfo等,內核支持的文件系統filesystem等。系統支持的中斷interrupts,iomen代表內存分配情況。ioport存放IO端口號。還有分區信息,modole信息,狀態信息,版本信息
對于Linux的設備驅動程序,有兩種加載模式,一種是直接加載進linux內核,一種是以模塊的方式加載到內核。
/sbin: 系統管理的一些工具。如poweroff關機工具。
/usr: 安裝系統時很多文件放在此目錄下面,包含一些更新等,include包含的頭文件,lib 是Linux的庫文件,src包含Linux2.4的內核源碼
/var:存放是臨時變量
3、
第三篇:嵌入式linux學習步驟
嵌入式linux學習步驟
作者:phantom 時間:2009-8-6 文章來源:來自網絡
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 文件系統
第四篇:學習嵌入式ARM+Linux_步驟
學習嵌入式ARM+Linux 步驟
轉載的,寫的非常有指導性,大概步驟就是:
ARM裸機編程—熟悉Linux系統—了解Linux完整運行過程—內核移植—驅動開發—應用程序開發
---------------
由于很多人總問這個問題,所以這里做一個總結文檔供大家參考。這里必須先說明,以下的步驟都是針對Linux系統的,并不面向WinCE。也許你會注意 到,現在做嵌入式的人中,做linux研究的人遠比做WinCE的人多,很多產家提供的資料也是以linux為主。我一直很難理解,其實WinCE的界面 比linux的界面好看多了,使用起來也很方便,更為重要的是,WinCE的開發和Windows下的開發基本一樣,學起來簡單得多,但是學linux或 者使用linux做嵌入式的人就是遠比WinCE多。在和很多工作的人交流時我了解到,他們公司從沒考慮使用WinCE,因為成本高,都是使用linux 進行開發。我讀研究生的的實驗室中也沒有使用WinCE的,大都研究linux,也有少部分項目使用vxwork,但是就沒有聽說過使用WinCE的,原 因就是開源!當然現在WinCE6.0聽說也開源,不過在成本和資源上linux已經有了無人能擋的優勢。與此相對應的是,越來越多的電子廠商已經開始使 用linux開發產品。舉個例子,Google近期開發的智能手機操作系統Android其實就是使用linux-2.6.23內核進行改進得到的。
第一,學習基本的裸機編程。
對于學硬件的人而言,必須先對硬件的基本使用方法有感性的認識,更必須深刻認識該硬件的控制方式,如果一開始就學linux系統、學移植那么只會馬上就陷 入一個很深的漩渦。我在剛剛開始學ARM的時候是選擇ARM7(主意是當時ARM9還很貴),學ARM7的時候還是保持著學51單片機的思維,使用ADS 去編程,第一個實驗就是控制led。學過一段時間ARM的人都會笑這樣很笨,實際上也不是,我倒是覺得有這個過程會好很多,因為無論做多復雜的系統最終都 會落實到這些最底層的硬件控制,因此對這些硬件的控制有了感性的認識就好很多了
學習裸機的編程的同時要好好理解這個硬件的構架、控制原理,這些我稱他為理解硬件。所謂的理解硬件就是說,理解這個硬件是怎么組織這么多資源的,這些資源 又是怎么由cpu、由編程進行控制的。比如說,s3c2410中有AD轉換器,有GPIO(通用IO口),還有nandflash控制器,這些東西都有一 些寄存器來控制,這些寄存器都有一個地址,那么這些地址是什么意思?又怎么通過寄存器來控制這些外圍設備的運轉?還有,norflash內部的每一個單元 在這個芯片的內存中都有一個相應的地址單元,那么這些地址與剛剛說的寄存器地址又有什么關系?他們是一樣的嗎?而與norflash相對應的 nandflash內部的儲存單元并不是線性排放的,那么s3c2410怎么將nandflash的地址映射在內存空間上進行使用?或者簡單地說應該怎么 用nandflash?再有,使用ADS進對ARM9行編程時都需要使用到一個初始化的匯編文件,這個文件究竟有什么用?他里面的代碼是什么意思?不要這 個可以嗎?
諸如此類都是對硬件的理解,理解了這些東西就對硬件有很深的理解了,這對以后更深一步的學習將有很大的幫助,如果跳過這一步,我相信越往后學越會覺得迷茫,越覺得這寫東西深不可測。因為,你的根基沒打好。
不過先聲明一下,本人并沒有使用ADS對ARM9進行編程,我是學完ARM7后直接就使用ARM9學linux系統的,因此涉及使用ADS對ARM9進行編程的問題我很難回答^_^,自己去研究研究吧。
對于這部分不久將提供一份教程,這個教程中的例程并不是我為我們所代理的板子寫的,是我在我們學院實驗室拿的,英培特為他們自己的實驗箱寫的,不過很有借鑒意義,可以作為
一份有價值的參考。
第二,使用linux系統進行一些基本的實驗。
在買一套板子的時候一般會提供一些linux的試驗例程,好好做一段時間這個吧,這個過程也是很有意義的,也是為進一步的學習積累感性認識,你能想象一個 從沒有使用過linux系統的人能學好linux的編程嗎?好好按照手冊上的例程做一做里面的實驗,雖然有點娃娃學走路,有點弱智,但是我想很多高手都會 經歷這個過程。
在這方面我們深藍科技目前沒有計劃提供相應的例程,主要是開發板的提供商會提供很豐富的例程,我們不做重復工作,只提供他們沒有的、最有價值的東西給大家。
第三,研究完整的linux系統的的運行過程。
所謂完整的linux系統包括哪些部分呢?
三部分:bootloader、linux kernel(linux內核)、rootfile(根文件系統)。
那么這3部分是怎么相互協作來構成這個系統的呢?各自有什么用呢?三者有什么聯系?怎么聯系?系統的執行流程又是怎么樣的呢?搞清楚這個問題你對整個系統 的運行就很清楚了,對于下一步制作這個linux系統就打下了另一個重要的根基。介紹這方面的資料網上可以挖掘到幾噸,自己好好研究吧。
第四,開始做系統移植。
上面說到完整的linux有3部分,而且你也知道了他們之間的關系和作用,那么現在你要做的便是自己動手學會制作這些東西。
當然我不可能叫你編寫這些代碼,這不實現。事實上這個3者都能在網下載到相應的源代碼,但是這個源代碼不可能下載編譯后就能在你的系統上運行,需要很多的 修改,直到他能運行在你的板子上,這個修改的過程就叫移植。在進行移植的過程中你要學的東西很多,要懂的相關知識也很多,等你完成了這個過程你會發現你已 經算是一個初出茅廬的高手了。在這個過程中如果你很有研究精神的話你必然會想到看源代碼。很多書介紹你怎么閱讀linux源代碼,我不提倡無目的地去看linux源代碼,用許三多的話 說,這沒有意義。等你在做移植的時候你覺得你必須去看源代碼時再去找基本好書看看,這里我推薦一本好書倪繼利的《linux內核的分析與編程》,這是一本 針對linux-2.6.11內核的書,說得很深,建議先提高自己的C語言編程水平再去看。
至于每個部分的移植網上也可以找到好多噸的資料,自己研究研究吧,不過要提醒的是,很多介紹自己經驗的東西都或多或少有所保留,你按照他說的去做總有一些 問題,但是他不會告訴你怎么解決,這時就要靠自己,如果自己都靠不住就找我一起研究研究吧,我也不能保證能解決你的問題,因為我未必遇到過你的問題,不過 我相信能給你一點建議,也許有助你解決問題。
這一步的最終目的是,從源代碼的官方主頁上(都是外國的,悲哀)下載標準的源代碼包,然后進行修改,最終運行在板子上。
盜用阿基米德的一句話:“給我一根網線,我能將linux搞定”。
第五,研究linux驅動程序的編寫。
移植系統并不是最終的目的,最終的目的是開發產品,做項目,這些都要進行驅動程序的開發。
Linux的驅動程序可以說是五花八門,linux2.4和linux2.6的編寫有相當大的區別,就是同為linux2.6但是不同版本間的驅動程序也 有區別,因此編寫linux的驅動程序變都不是那么容
易的事情,對于最新版本的驅動程序的編寫甚至還沒有足夠的參考資料。那么我的建議就是使用、移植一個 不算很新的版本內核,這樣到時學驅動的編程就有足夠的資料了。這部分的推薦書籍可以參考另一篇文章《推薦幾本學習嵌入式linux的書籍》。
第六,研究應用程序的編寫。
做作品做項目除了編寫驅動程序,最后還要編寫應用程序?,F在的趨勢是圖形應用程序的開發,而圖形應用程序中用得最多的還是qt/e函數庫。我一直就使用這 個函數庫來開發自己的應用程序,不過我希望你能使用國產的MiniGUI函數庫。盜用周杰倫的廣告詞就是“支持國產,支持MiniGUI”。MiniGUI的編程比較相似Windows下的VC編程,比較容易上手,效果應該說是相當不錯的,我曾使用過來開發ARM7的程序。不過MiniGUI 最大的不好就是沒有像qtopia這樣的圖形操作平臺,這大大限制了他的推廣,我曾經幻想過與北京飛漫公司(就是MiniGUI的版權擁有者)合作使用 MiniGUI函數庫開發像qtopia這樣的圖形操作平臺,不過由于水平有限這只能是幻想了,呵呵。
完成這一步你基本就學完了嵌入式linux的全部內容了。
還有一個小小的經驗想和大家分享。我在學習嵌入式linux的過程中很少問人,客觀原因是身邊的老師、同學師兄都沒有這方面的高手,主觀原因是我不喜歡問 人,喜歡自己研究解決問題。這樣做有個好處,就是可以提高自己解決問題的能力,因為做這些東西總有很多問題你難以理解,別人也沒有這方面的經驗,也不是所 有問題都有人給你答案,這時必須要自己解決問題,這樣,個人的解決問題能力就顯得非常關鍵了。因此我的建議就是一般的問題到網上搜索一下,確實找不到答案 了就問問高手,還是不行了就自己去研究,不要一味去等別人幫你解決問題。
記住,問題是學習的最好機會。
第五篇:嵌入式學習的正確步驟,嵌入式 嵌入式學習路線
www.tmdps.cn 達內教育—中國IT培訓領導品牌
嵌入式學習的正確步驟,嵌入式 嵌入式學習路線
嵌入式門檻雖然較高,但也跟其他事物一樣,并不是牢不可破。只要我們用心去對待,冬雪終將化去,春風定會吹來。
具體步驟如下:
1、《C語言》第二版 譚浩強;《C程序設計語言》第二版 徐寶文譯 機械工業出版社
你能區分開指針數組和數組指針嗎?你知道函數指針嗎?
你能區分開定義一個變量時系統給它分配的空間與用malloc()函數給一個變量分配的空間有什么不一樣嗎?
2、《數據結構》C語言版 黃國愉、葉乃青編 清華大學出版社
你能合上書本,用C語言實現書中的單鏈表、雙鏈表數據結構嗎?
3、《實用C++程序設計》第二板 中國電力出版社 Steve_Oualline著
此階段主要是學習其面向對象的編程思想,加深對C語言和數據結構的理解。
4、學習單片機,最好能找個前輩帶一帶。
你能用51單片機做出一樣實際的東西嗎?即使它再簡單!
要注意加深對中斷的理解。
5、學習ARM單片機。
(1)、細讀《ARM微控制器基礎與實戰》周立工編寫(注:即使你不用書中的開發板)
(2)、細讀相關芯片的原版英文文檔。如:arm920TE.pdf S3C2410_1.2.pdf
6、學習uCOS!操作系統。
(1)、細讀《嵌入式實時操作系統uC/OS-!》第二版 召貝貝譯
你能把uCOS!移植到自己的平臺上嗎?
(2)、能編寫在uCOS!操作系統環境下運行的針對具體硬件的驅動程序
www.tmdps.cn 達內教育—中國IT培訓領導品牌
7、熟悉Linux環境,學習Linux環境編程,學習交叉編程
(1)、細讀《linux命令大全.pdf》
(2)、細讀《GNU Make 使用手冊(中譯版).pdf》
(3)、學習創建交叉編程環境.8、學習Linux操作系統。
(1)、《UNIX環境高級編程》
(2)、可以到一些好的網站下載一些比較好的書籍
(3)、細讀《linux內核完全注釋》
(4)、細讀《understanding the linux kernel 2》
(5)、利用源代碼閱讀利器工具“Source Insight”進行真正的linux內核原碼刨析
(6)、最后進行內核移植,并能編寫在linux操作系統環境下運行的針對具體硬件的驅動程序
9、學習Linux設備驅動編寫。可參考《Linux設備驅動程序》
10、復習C++,學習用QT進行圖形界面編程
(1)、細讀《QT編程寶典》
(2)、學會通過查看QT電子文檔進行QT GUI實地編程
(3)、學習交叉編程.(其實就是把命令qmake變為tmake)
11、當然,你也可學習一下PCB的制作和設計一個自己的CPU(即軟殼)
在嵌入式軟件方面最重要的課程包括:
(1)嵌入式微處理器結構與應用:
這是一門嵌入式硬件基礎課程,我們說過,嵌入式是軟硬件結合的技術,搞嵌入式軟件的人應對ARM處理器工作原理和接口技術有充分了解,包括ARM的匯編指令系統。若不了解處理器原理,怎么能控制硬件工作,怎么能寫出節省內存又運行高速的最優代碼(嵌入式軟件設計特別講究時空效率),怎么能寫出驅動程序(驅動程序都是與硬件打交道的)?很多公司招聘嵌入式軟件人員時都要求熟悉 www.tmdps.cn 達內教育—中國IT培訓領導品牌
ARM處理器,將來若同學到公司中從事嵌入式軟件開發,公司都會給你一本該設備的硬件規格說明書(xxx Specification),你必須能看懂其中的內存分布和端口使用等最基本的說明(就像x86匯編一樣),否則怎么設計軟件。有些同學覺得嵌入式處理 器課程較枯燥,這主要是硬件課程都較抽象的原因。還有同學對ARM匯編不感興趣,以為嵌入式開發用C語言就足夠了。其實不應僅是將匯編語言當成一個程序設計語言,學匯編主要是為了掌握處理器工作原理的。一個不熟悉匯編語言的人,怎么能在該處理器寫出最優的C語言代碼。在嵌入式開發的一些關鍵部分,有時還必須寫匯編,如Bootloader等(可能還包括BSP)。特別是在對速度有極高要求的場合(如DSP處理器的高速圖像采集和圖像解壓縮),目前還會用到匯編寫程序的,盡管用到的機會相對C要小得多。當你在一個嵌入式公司工作時,在查看描述原理的手冊時,可能很多都是用匯編描述的,這是因為很多硬件設計人員只會寫或者喜歡用匯編描述,此時你就必須看懂匯編程序,否則軟硬件人員可能就無法交流。很多嵌入式職位招聘時都要求熟悉匯編。
[小知識] 目前嵌入式處理器常見的有ARM、PowerPC、MIPS、Motorola 68K、ColdFire(冷火)等,但ARM占據了絕對主流(有資料說手機中幾乎90%都是ARM處理器)。ARM是一個只賣知識產權的公司,目前獲得購買了ARM CPU核授權許可的大公司很多,包括Intel、Samsung、Amstel、Motorola、Philip等,他們都在ARM CPU核的基礎上進行了一些外圍擴展,形成自己的處理器(如Samsung S3C2410,Motorola i.MXL9328等處理器都是采用ARM 9內核,指令一級是相同的)。而眾多中小公司又購買了這些處理器,設計了各種各樣的開發板,如華恒等國內很多著名嵌入式公司都生產基于SamsungS3C2410的開發板,供最終用戶使用或供教學實驗。在ARM這個食物鏈上,ARM公司是大魚,Intel、Samsung等公司是小魚,而華恒等則是蝦米,最終用戶(我們這些要采購嵌入式開發板的)則是喂蝦米的。Intel早期生產的是低端ARM(Strong ARM,相當于ARM 7),現在轉向主要生產高端ARM(即Intel Xscale處理器,屬于ARMv5家族,主要用在高端PDA上,如HP和DELL生產的PDA都采用Intel Xscale,價格較高)。目前應用最多的是ARM 7和ARM 9兩類處理器。ARM 7較便宜,可跑uclinux(是一個不支持高級內存管理功能的嵌入式Linux系統統)、Vxworks、uc/os II等實時操作系統,但因處理器不帶內存管理單元MMU(無內存分頁和地址映射機制,所以不能使用虛擬內存),所以不能跑Windows CE,另外通用Linux中的某些內存管理功能也不能用在ARM 7上。ARM 9大都是一個帶MMU功能的高端處理器,可跑WinCE或通用Linux的大多數功能。ARM7和ARM9的區別是在與體系結構上,前者是馮?諾伊曼結 構,后者是哈佛結構——指令和數據總線是分開的。以上是我的一點了解,可能有不對的地方。我們學院有十幾套ARM 7開發系統(采用Samsung S3C44b0x開發板,主要用于嵌入式處理器結構、實時操作系統等課程實驗用),ARM 9的系統好象也已經到了(采用的芯片我不知道也沒去問),還有以前的十幾套MPC860開發板(聽說價格都很貴,很容易損壞),同學應愛護使用和珍惜這樣 的實驗機會。
(2)嵌入式操作系統類課程
www.tmdps.cn 達內教育—中國IT培訓領導品牌
除了WinCE的實時性稍差外,大多數嵌入式操作系統的實時性都很強,所以也可稱為實時操作系統Real Time Operating System.從事嵌入式的人至少須掌握一個嵌入式操作系統,這在嵌入式的所有技術中是最為關鍵的了。目前最重要的RTOS主要包括:
第一類、傳統的經典RTOS:最主要的便是Vxworks操作系統,以及其Tornado開發平臺。Vxworks因出現稍早,實時性很強(據說可在1ms內響應外部事件請求),并且內核可極微(據說最小可8K),可靠性較高等,所以在北美,Vxworks占據了嵌入式系統的多半 疆山。特別是在通信設備等實時性要求較高的系統中,幾乎非Vxworks莫屬。Vxworks的很多概念和技術都和Linux很類似,主要是C語言開發。像Bell-alcatel、Lucent、華為等通信企業在開發產品時,Vxworks用得很多。但Vxworks因價格很高,所以一些小公司或小產品中往往用不 起。目前很多公司都在往嵌入式Linux轉(聽說華為目前正在這樣轉)。但無論如何,Vxworks在一段長時間內仍是不可動搖的。與Vxworks類似 的稍有名的實時操作系統還有pSOS、QNX、Nucleus等RTOS。
第二類、嵌入式Linux操作系統:Linux的前途除作為服務器操作系統外,最成功的便是在嵌入式領域的應用,原因當然是免費、開源、支持軟件多、呼擁者眾,這樣嵌入式產品成本會低。Linux本身不是一個為嵌入式設計的操作系統,不是微內核的,并且實時性不強。
目前應用在嵌入式領域的Linux系統主要有兩種:
一種是專為嵌入式設計的已被裁減過的Linux系統,最常用的是uClinux(不帶MMU功能),目前占較大應用份額,可在ARM7上跑;另一種是跑在 ARM 9上的,一般是將Linux2.4.18內核移植在其上,可使用更多的Linux功能(當然uClinux更可跑在ARM 9上)。很多人預測,嵌入式Linux預計將占嵌入式操作系統的50%以上份額,非常重要。缺點是熟悉Linux的人太少,開發難度稍大。另外,目前我們 能發現很多教材和很多大學都以ucOS/II為教學用實時操作系統,這主要是由于ucOS/II較簡單,且開源,非常適合入門者學習實時操作系統原理,但 由于ucOS/II功能有限,實用用得較少。況且熟悉了Linux開發,不僅在嵌入式領域有用,對開發Linux應用軟件,對加深操作系統的認識也有幫 助,可謂一舉多得。據我所知,目前Intel、Philip都在大搞ARM+LINUX的嵌入式開發,Fujitum則是在自己的處理器上大搞Linux 開發。目前在嵌入式Linux領域,以下幾個方面的人特別難找,一是能將Linux移植到某個新型號的開發版上;二是能寫Linux驅動程序的人;三是熟悉Linux內核裁減和優化的人。不過LINUX有一個硬傷,就是沒有WINDOWS那樣的友好方便美觀的交互界面,不然微軟帝國早就守不住了。
第三類、Windows CE嵌入式操作系統:Microsoft也看準了嵌入式的巨大市場,MS永遠是最厲害的,WinCE出來只有幾年時間,但目前已占據了很大市場份額,特別是在PDA、手機、顯示儀表等界面要求較高或者要求快速開發的場合,WinCE目前已很流行(據說有一家賣工控機的公司板子賣得太好,以至來不及為客戶裁減WinCE)。WinCE目前主要為4.2版(.NET),開發平臺主要為WinCE www.tmdps.cn 達內教育—中國IT培訓領導品牌
Platform Builder,有時也用EVC環境開發一些較上層的應用,由于WinCE開發都是大家熟悉的VC++環境,所以我院學過Windows程序設計課程的同 學都不會有多大難度,這也是WinCE容易被人們接受的原因,開發環境方便快速,微軟的強大技術支持,WinCE開發難度遠低于嵌入式Linux。對于急于完成,不想拿嵌入式Linux冒險的開發場合,WinCE是最合適了(找嵌入式Linux的人可沒那么好找的),畢竟公司不能像學生學習那樣試試看,保證開發成功更重要。根據不同的側重點,WinCE還有兩個特殊版本,一個是MS PocketPC操作系統專用于PDA上(掌上電腦),另一個是MS SmartPhone操作系統用于智能手機上(帶PDA功能的手機),兩者也都屬于WinCE平臺。在PDA和手機市場上,除WinCE外,著名的PDA 嵌入式操作系統還有Palm OS(因出現很早,很有名)、Symbian等,但在WinCE的強勁沖擊下,Palm和Symbian來日還能有多長?同學學過VC++后再學 WinCE,非常方便自然,通過學習WinCE同樣也可了解嵌入式軟件的一般開發過程,對Linux有懼怕心理的同學也很合適。很顯然,嵌入式Linux 永遠不可能替代WinCE,而且將來誰占份額大還很難講,畢竟很多人更愿意接受MS的平臺,就像各國政府都在大力推LINUX已好長時間,但你能看到幾個 在PC機上真正使用LINUX的用戶?據我觀察,目前在嵌入式平臺上,LINUX是叫得最響,但還是WinCE實際用得更多.嵌入式LINUX可能更多地是一些有長遠產品計劃的公司,為降低成本而進行長遠考慮.WinCE和多媒體(如MPEG技術)是微軟亞洲工程院目前做得較多的項目領域之 一,現在社會很需要精通WinCE的人。現在有WINCE的智能手機,金山詞霸、WORD、EXCEL、REGEDIT等居然都有 smartphone版的,PC上的MP3、DOC等居然在download時都可被自動轉換成smartphone格式,很爽的。完全可用 Windows CE自己開發一些需要的程序download到自己的手機上?,F在市面銷售PDA智能手機火爆,MS總是財源滾滾。
總結關于嵌入式操作系統類課程,若你覺得自己功底較深且能鉆研下去,則可去學嵌入式Linux;若你覺得自己VC++功底較好且想短平快地學嵌入式開發,自學WINCE是非常好的選擇。
(3)嵌入式開發的相關領域
搞嵌入式若能熟悉嵌入式應用的一些主要領域,這樣的人更受企業歡迎。主要的相關領域包括:
A、數字圖像壓縮技術:這是嵌入式最重要最熱門的應用領域之一,主要是應掌握MPEG編解碼算法和技術,如DVD、MP3、PDA、高精電視、機頂盒等都涉及MPEG高速解碼問題。
B、通信協議及編程技術:這包括傳統的TCP/IP協議和熱門的無線通信協議。首先,大多數嵌入式設備都要連入局域網或Internet,所以首先應掌握 TCP/IP協議及其編程,這是需首要掌握的基本技術;其次,無線通信是目前的大趨勢,所以掌握無線通信協議及編程也是是很重要的。無線通信協議包括無線 局域網通信協議802.11系列,Bluetooth,以及移動通信(如GPRS、GSM、CDMA等)。
www.tmdps.cn 達內教育—中國IT培訓領導品牌
C、網絡與信息安全技術:如加密技術,數字證書CA,以及各種網絡安全設備,包括硬件防火墻,入侵檢測IDS,還有防毒墻,IPS等,中國在這方面還是沒有自己優勢的,我們陳院長好象正在往這方面發展.D、DSP技術:DSP是Digital Signal Process數字信號處理的意思,DSP處理器通過硬件實現數字信號處理算法,如高速數據采集、壓縮、解壓縮、通信等。數字信號處理是電子、通信等硬件 專業的課程,對于搞軟件的人若能了解一下最好。目前DSP人才較缺。如果有信號與系統、數字信號處理等課程基礎,對于學習MPEG編解碼原理會有很大幫助。
(4)嵌入式開發的相關硬件基礎
對于軟件工程專業的學生,從事嵌入式軟件開發,像數字電路、計算機組成原理、嵌入式微處理器結構等硬件課程是較重要的。另外,匯編語言、C/C++ 數據結構算法、特別是操作系統等軟件基礎課也是十分重要的。我們的主要目地是能看懂硬件工作原理,但重點應是在嵌入式軟件,特別操作系統級軟件,那將是我們的優勢。我們的研究生里有些是學電子、通信類專業過來的,有較好的模擬電路和單片機基礎,學嵌入式非常合適。嵌入式本身就是從單片機發展過來的,只是單片機不帶OS,而現在很多嵌入式應用越來越復雜,以至不得不引入嵌入式操作系統。另外,為追求更高速的信號處理速度,現在在一些速度要求較高場合,有不少公司是將一些DSP算法,如MPEG壓縮解壓縮算法等用硬件來實現,這就涉及到HDL數字電路設計技術及其 FPGA/IP核實現技術,這方面的人目前市場上也很缺。