導航:首頁 > 編程系統 > 嵌入式linuxarp

嵌入式linuxarp

發布時間:2024-12-31 15:18:24

❶ 如何在linux下編寫抓包程序

你用SOCK_RAW的模式建立原始套接字然後接收包。
剩下的就全是分析內容的事情了。。。。最多再用一下多線程。

用到linux下socket編程的最基本知識, 以及對網路協議細節的了解弊團橘。 前者隨便找本socket編程的書就很詳細了, 後者你因該懂。

—————租團—
例如, 你需或橡要include以下這些頭:
stdio.h,stdlib.h, unistd.h, sys/socket.h, sys/types.h, netinet/if_ether.h, netinet/in.h,

然後建立socket的時候用
socket(PF_PACKET,SOCK_RAW,htons(ETH_P_IP)),這樣就能用這個socket來監聽乙太網的包。
然後循環調用recvfrom函數來聽這個socket的接受到的數據, 再分析就好了。

如果要嗅探別人機器的包, 就要用ARP欺騙了。。呵呵

❷ 嵌入式需要學習什麼

嵌入式開發學習路線圖-尚觀嵌入式研究室-嵌入式路線圖

-------作者:尚觀嵌入式研究室UEA0908班 范同學
為什麼選擇學習嵌入式?

嵌入式系統無疑是當前最熱門最有發展前途的IT應用領域之一,同時也是當今IT領域僅存的幾個金領職位之一。當前的中國IT人才面臨嚴重的「後繼乏人」,
而且這種缺口由於培訓缺乏、教育模式等原因造成的,而缺口最大的,就是高級IT人才。如果你從事的IT培訓不專業,面對競爭越來越激烈的職場,基本找不到
工作。據專家預測,嵌入式每年人才缺口在30萬左右。

入式職業發展講解視頻

視頻中主要講解什麼樣的人適合從事嵌入式行業、嵌入式行業從業人員需要具備哪些基本素質、嵌入式行業的特點以及嵌入式行業的現狀與發展。

嵌入式研發方向職業生涯講解視頻(1)
嵌入式研發方向職業生涯講解視頻(2)
嵌入式研發方向職業生涯講解視頻(3)

嵌入式研發方向職業生涯講解視頻(4)
嵌入式研發方向職業生涯講解視頻(5)

ARM+Linux嵌入式底層內核驅動方向學習總體路線圖

基礎學習Ⅰ---Linux入門

目前嵌入式主要開發環境有
Linux、Wince等;Linux因其開源、開發操作便利而被廣泛採用。而Linux操作系統也只是一個簡單的操作系統,簡單的使用對於嵌入式開發人
員來說價值並不很高,真正有價值的是掌握Linux的基本服務和Linux的設計理念、思想,這對於嵌入式開發人員的長期發展是很極其重要的。Linux
系統有很多發行版,RedHat、Ubuntu、Fedora等。作為嵌入式開發人員,我們沒有必要把精力放到使用哪個Linux發行版上,而是盡快把
Linux系統盡快安裝好。如果打算堅持長期學習,那麼建議您把自己的電腦做成雙系統,而不要在虛擬機上安

基礎學習Ⅱ---C語言

C語言是嵌入式開發必備的基礎知識。在Linux下從事C語言的開發,你會覺得更為順暢、更為自然,因為C語言是因unix的出現而誕生的,Linux內
核幾乎完全是由C語言編寫完成的。學習C語言,如果不會用指針,那麼就稱不上會C語言。做嵌入式開發指針更顯得尤為重要,所以做嵌入式開發除了掌握位操
作、限定詞等,對指針的掌握是不可或缺的。而且要掌握多級指針、函數指針等等。涉及到指針,那麼就會講到內存分配。在大學中,學習C語言一般的學習很少講
到內存分配,但是如果期望從事嵌入式開發,那麼就必須懂得C語言是怎麼做內存分配管理的。指針之外,還要學習模塊化編譯處理、指針與數組、gcc、
Makefile、GDB、遞歸、結構體、宏定義使用等。C語言是整棟嵌入式大廈的基礎,所以在學習嵌入式時,必須把C語言重視起來,多敲代碼,多練。一
名優秀的程序員必定是通過「體力勞動」再轉向「腦力勞動的」,這也是為什麼我們要有「寫不出代碼=0」思想的原因所在。
如果說C語言相當於文字,那麼數據結構就相當於在造句、寫文章。代碼質量有一部分取決於對數據結構的掌握程度。在數據結構部分我們要把鏈表、樹、排序作
為學習重點。而且我們也可以查看一些比較常見的函數(如str、strcat、printf等)在內核中是如何實現的,以及編寫代碼模擬堆棧,這
不僅有利於編寫代碼質量的提高,而且還可以初步了解Linux內核精髓,為今後工作打下堅實的基礎。

C++、QT在嵌入式開發領域,是用來開發圖形界面的,希望從事上層應用開發及圖形界面,那麼在C++、QT方面需要比較深入的學習。

B)經典學習視頻推薦:

1-1c語言編輯器vi的使用

1-2c語言編譯過程及編譯器gcc

2-1c語言的數據類型

2-2數據快速引用

2-3c語言運算符及表達式

3-1c語言的分支結構

3-2c語言的循環結構

4-1c語言函數的定義及傳

4-2c語言函數調用

5-1-1c語言的一維數組

5-1-2二維數組及多維數組

5-1-3c語言字元數組

5-2-1c語言結構體-Struct

5-2-2C語言聯合體-Union

6-1c語言指針的概念

6-2c語言指針與一維數組

6-3指針與二維數組及字元

6-4指針與結構體、聯合體

6-5c語言指針與函數

6-6c語言指針常量與常量

7c語言存儲空間管理

8-1c語言存儲模型分析

8-2雙向循環鏈表的創建增

8-3雙向循環鏈表的數據管

C)經典學習案例:
1、學員成績管理系統2、計算器3、電子詞典4、文件壓縮器

基礎進階---Linux應用程序設計

Linux的思想源於Unix。Linux繼承了Unix的優點,但是沒有用UNIX的代碼,所有程序都是重新編寫的,而且Linux與Unix的源碼級兼容。Linux是類Unix操作系統。Linux
不僅符合 POSIX 標准,而且還包括其它 UNIX 標準的多種特性,例如,UNIX 的 System V 介面文檔(System V Interface
Document,SVID)和伯克利軟體發布(Berkeley Software Distribution,BSD)版本。Linux 採用了折衷的策略,包含了
UNIX 幾個典型特性當中最實用的一些功能:
Linux 採用了 SVR4 的進程間通信(IPC)機制:共享內存、消息隊列、信號。

Linux 支持 BSD Socket 網路編程介面。
許多 Linux 發行版採用 SysV init
機制,支持運行級別。
此階段的學習是從事嵌入式上層應用開發以及底層開發人員的必修課程。進程、線程、信號、文件鎖、socket是這部分內容的重點。要把這些內容學的透徹非要下些苦功夫不可。而且函數是系統提供給我們的,難免要對計算機系統深入理解一番。TCP/IP協議也是要涉及到的。有問題建議用Google搜索及登陸chinaunix論壇。通過這個階段的學習,我們就可以初步實現一些應用程序的開發了,如做自己的shell命令解析器、簡單的聊天軟體、視頻多播等。

A)經典書籍推薦:

B)經典學習視頻推薦:

Linux網路開發-1、ARP攻擊原理
Linux網路開發-2、ARP攻擊實例分析
Linux網路開發-3、ARP攻擊程序代碼分析和socket構造

C)經典學習案例:
1、串口監聽程序
2、圖片瀏覽器 3、MP3播放器 4、聊天程序 5、 ftp程序
6、音頻廣播程序 7、ping的實現
8、DDos攻擊程序 9、ARP攻擊程序

嵌入式入門---ARM體系結構

從這部分開始,我們將真正進入嵌入式開發學習階段。首先我們要知道採用哪種處理器。目前通用嵌入式處理器有ARM、MIPS、PowerPC、X86等。從市場產品佔有率上看,ARM處理器遠遠領先於同類其它處理器,並逐步掠奪傳統51單片機和英特爾市場份額。據招聘網站統計,目前用人單位在技術水平上要求開發人員掌握ARM9及以上平台的開發技術。ARM公司在發布ARM11產品後,更改以往的數字標記更新方式,轉為發布ARM
Cortex。但是Cortex並不是更高端,而是全新系列的處理器,比如Cortex
M3,它主要應用於機械加工、工控領域,目的是取代以前的ARM7處理器。
在開始學習前,建議有一塊自己的開發板,目前ARM9
2440的開發板價格在400-600元之間,ARM11
6410的開發板價格要高一些,最便宜的也要1200元以上。在此,提醒大家盡量不要買mini開發板,雖然mini開發板的價格要便宜些,但是與正常開發板相比,mini板功能是不完善的。嵌入式匯編有別於X86匯編,所以如果以前沒有接觸過匯編語言,那麼沒有必要先去學X86匯編再學嵌入式匯編,可以直接學習嵌入式匯編。除了匯編我們還要學習ARM指令集。有了開發板,我們要下載相對應處理器的DataSheet及開發板電路原理圖。ARM體系結構的學習我們是不能完全照抄別人代碼的,因為我們自己手中的開發板及處理器與別人是不同的,除非所用的代碼是根據你手中的開發板來編寫的。所以,我們要先去看書、看視頻資料理解原理及工作方式等,然後根據自己開發板的電路原理圖和DataSheet來編寫代碼,達到理解外圍設備工作原理和操作硬體的目的。

B)經典學習視頻推薦:
1)嵌入式掃盲篇

嵌入式漫談1

嵌入式漫談2

嵌入式漫談3

十問嵌入式1-什麼是嵌入式,創業

十問嵌入式2-嵌入式實例iphone

十問嵌入式3-嵌入式前景

十問嵌入式4-嵌入式學習

十問嵌入式5-ARM概述

十問嵌入式6-ARM概述
開發板

十問嵌入式7-ARM與單片機

十問嵌入式8-匯編語言的作用

十問嵌入式9-操作系統的選擇

十問嵌入式10-編程語言選擇

2)嵌入式開發概述

嵌入式開發入門經典教程-1
嵌入式開發入門經典教程-2
嵌入式開發入門經典教程-3

嵌入式開發入門經典教程-4
嵌入式開發入門經典教程-5
嵌入式開發入門經典教程-6

嵌入式開發入門經典教程-7
嵌入式開發入門經典教程-8
嵌入式開發入門經典教程-9

嵌入式開發入門經典教程-10
嵌入式開發入門經典教程-11
嵌入式開發入門經典教程-12

嵌入式開發入門經典教程-13

3)ARM體系結構與Bootloader開發

1、ARM基礎概念介紹與開發板使用教程
2、編譯器高級應用與裸機代碼編寫教程
3、ARM指令與ARM匯編入門

4、ARM匯編高級教程與APCS規范詳解
5、ARM體系結構詳解與異常處理機制
6、ARM中斷機制詳解與Watchdog驅動開發實例

7-1、ARM外部中斷機制詳解與LED驅動開發實例
7-2、ARM嵌入式開發之ARM外部中斷機制詳解與實例
8、AMBA匯流排結構與ARM時鍾配置

9、時序圖詳解與NAND
FLASH驅動開發實例
10-1、內存控器與SDRAM原理詳解(上)
10-2、內存控器與SDRAM原理詳解(下)

11、UART串口詳解與通信開發實例
12、ARM協處理器CP15配置原理
13、從零開始寫Bootloader開發過程詳解

C)經典學習案例:
1. ARM模擬器開發 2. Watchdog控製程序 3.
RTC時鍾控製程序
4. Uart控製程序 5. LCD控製程序 6.
觸摸屏控製程序
7. DMA控製程序 8. 音頻控製程序 9. 網卡控製程序
10.
文件系統製作 11. ARM-Linux移植

嵌入式提升---Linux內核、驅動

眾所周知嵌入式開發包含至少兩個級別,一個是嵌入式內核驅動級別,另外一個是嵌入式應用層開發,而薪酬高的、最具價值的無疑是嵌入式內核驅動級別的開發者。真正的嵌入式高手或者企業中的核心開發人員,一定是嵌入式底層的內核驅動開發工程師,這些工程師成長比較緩慢,造成對內核驅動人才的大量需求,所以這些人才是真正企業需要的香餑餑。掌握驅動開發會讓自己的核心能力有極大的飛躍,真正實現嵌入式最有價值的就業。

由於Linux內核更新速度很快,書籍和視頻不可能及時更新,所以我們再看書和視頻後,要自己動手下載內核源碼包,去看內核中的代碼,在這里可以充分檢驗C語言、數據結構等基礎知識的掌握程度。而驅動的編寫還是要藉助外設硬體電路原理圖和晶元手冊。內核和驅動的知識是讓我們根據不同的硬體,編寫對應的驅動、合理剪裁內核、製作文件系統,並移植到硬體開發板上。如果手裡有ARM11
6410及以上的開發板,可以試試在裸板上編寫驅動並移植Android系統到開發板上吧。

B)經典學習案例:
1. GPIO驅動 2. RTC時鍾驅動 3.
WatchDog驅動 4. Udev移植 5. 觸摸屏輸入設備驅動
6. LCD顯示設備驅動 7. DMA驅動 8.
音頻設備驅動 9. Nand Flash塊設備驅動 10. 網路設備驅動

有不明白的可以到尚觀嵌入式研究室咨詢,或者聽聽免費的網路公開課,希望對你有幫助

❸ 如何學習嵌入式

作者:匿名用戶
鏈接:https://www.hu.com/question/19688487/answer/32217959
來源:知乎
著作權歸作者所有。商業轉載請聯系作者獲得授權,非商業轉載請註明出處。

學習嵌入式系統,首先應該明確什麼是嵌入式系統,否則費力去學,卻不知所學為何物,豈不惘然?嵌入式系統的定義很多,這也是困擾嵌入式系統學習的一個因素。筆者根據自己開發和教學過程中的理解,以及對各種嵌入式系統的應用進行總結,提出了嵌入式系統的簡單定義:嵌入式系統是嵌入式計算機系統的簡稱,這個定義突出嵌入式計算機系統和普通計算機系統的共性。下表列出了嵌入式系統的一些典型的應用:
智能機器人(S D R 4,火星登陸車)
娛樂和消費電子(Gameboy Advance,SonyPSP)
網路通信產品(Smartphone)
軍用設備(軍用PDA )
汽車(車載導航,自動駕駛,娛樂系統)
智能儀器(虛擬儀器)
安全防護(防火,防盜)
環境保護(探空氣球)
銀行和商業消費(ATM)
以火星登陸車為例來分析一下嵌入式系統的定義。火星登陸車雖然聽起來感覺在技術上有些高不可測,但是本質就是嵌入式計算機系統的應用,其核心就是一個計算機系統,而這個計算機系統的組成同傳統的計算機系統在本質上沒有什麼差別。兩者的顯著不同之處就在於,用於火星登陸車的計算機系統被安裝到了火星登陸車上。當然,一個計算機系統能夠被安裝在火星登陸車上,是需要進行很多特殊設計的。但是從本質上講,嵌入式系統的核心概念還在計算機系統。嵌入式系統學習的重點也在計算機系統上。一方面,學習者需要牢固掌握計算機系統本身的概念,更重要的是學習嵌入系統的開發過程同傳統計算機系統開發過程的差別。這里需要指出的是,很多學習者本來就沒有從事過完整計算機系統的開發,高校的教學是以程序設計為中心的,計算機系統的構成,操作系統的原理,編程語言等課程都是為了能夠讓學生更好的使用計算機系統進行程序設計,在現有的計算平台上來設計實現各種應用,學生一般沒有機會學習一個完整的計算機系統是如何構建,並親身參與到構建的每一個過程。而對於嵌入式系統而言,從事平台開發的人就是要親自去開發出一個完整的計算機系統,這個過程包括
1. 需求分析
2 硬體設計
3 驅動程序
4 Bootloader & BSP (板級支持包)
5 操作系統的移植
6 應用程序的開發
7 性能檢查
嵌入式系統教學的目的就是教會學生如何根據需求去建立滿足某種特殊行業需求的嵌入式計算機系統。讓學生學會如何構件硬體平台,進行硬體設計,選擇能夠滿足應用要求的最佳的嵌入式操作系統,並完成Bootloader,BSP和驅動程序的編寫,移植,調試等過程。為了滿足行業需求,最終要在所建立的系統上編寫調試相應的應用程序,並進行性能的測試和檢查。

你是誰,你需要學習哪些東西?
如果你的工作只是需要在PC 機上編寫一個圖片瀏覽程序,那麼你就沒有必要去了解當系統收到一個ARP請求包後應該如何回應。同樣的道理,嵌入式系統的學習也是有很多方面的。就嵌入式系統的設計和實現而言,基本上需要四種不同的工作:系統設計工作,硬體設計工作,驅動程序和操作系統移植工作和應用程序設計開發工作。
1.系統設計工作
在系統的設計階段,系統分析師將根據需求確定系統的硬體的基本構成,根據系統的需求選擇使用那種處理器,使用哪種操作系統,使用那些軟體開發工具。系統分析師往往是較為完整的參與過嵌入式系統設計的全過程,對於系統應用的行業較為了解,對於嵌入式系統本身的開發流程十分清楚的人。
2.硬體設計工作

系統硬體設計人員需要根據系統分析師的設計結果,進行硬體原理圖的設計。通常需要硬體設計人員熟悉嵌入式系統的硬體構成。硬體設計人員需要了解常用的嵌入式系統處理器,存儲器(Flash,SDRAM),乙太網MAC晶元,音頻/視頻編解碼晶元,電源管理晶元,匯流排介面電路 (USB,PCI),液晶顯示模塊,可編程邏輯器件(FPGA/CPLD),無線網路通信模塊(Bluetooth,WLAN,GPRS)等硬體電路構成元素的基本工作原理,連接使用方法,使用注意事項,基本調試方法等內容。在網路上能找到很多公司的評估板的原理圖,對於這些原理圖要仔細研究,摸清處理器同存儲器,網卡,液晶模塊等器件的連接方法和原因。通過對這些電路的研究,能夠較快地了解整個嵌入式系統的構成,這些電路同實際產品中的電路雖有一定差別的,特別是對於手持設備,但這些差別不影響初學者學習嵌入式系統的硬體設計基本構成。
以上這些知識,往往需要較長時間的學習和積累,需要親自參與實踐的機會。對於剛剛接觸嵌入式系統硬體開發的學生來講,一般不可能全部了解這些知識,但也不會是通通一無所知。筆者結合自己開發和教學的經驗認為:首先應該選定一款主流且較為簡單的嵌入式系統處理器,比如基於ARM7TDMI 內核的AT91M40800,S3C44B0 等嵌入式系統處理器,學習32 位RISC處理器的編程模型,指令集。高校教學中,單片計算機課程一般以8051系列單片為核心講解,由於現代32位處理器的結構和開發方式同8位單片機有著較大的差別,學習者還是需要花一點力氣來研究以下32位處理器的。以ARM處理器為例,學習者就需要理解處理器的多種工作模式,備份寄存器,RISC 指令集的特點,MMU 和虛擬地址,中斷處理過程等內容。在學習指令集的過程中,最好能夠每學習幾條指令,就使用這幾條指令在模擬器上實驗以下,觀察處理器執行的結果。這個過程一方面是學習者對於指令本身的學習能夠取得一個比較好的效果,另外也是對開發工具本身的一種學習。接著,就可以開始學習片上資源的使用和配置方法。這時就需要一個方便使用的開發板,學習者能夠通過JTAG模擬器將開發板同調試PC機相連,進行程序的下載,調試。特別是要仔細研究系統的初始化過程和中斷處理的過程。在開發過程中如果遇到問題,應自己分析問題產生的原因,通過分析縮小問題可能產生的范圍,最終找到問題的所在。最重要的就是要保持一種解決問題的信心,面對困難如何處理,往往能夠決定最終系統是否能夠調試成功。然後,學習者可以開始仔細學習處理器同存儲器的連接,存儲空間的配置,各種外擴器件,如網卡,AC97音效卡的工作原理和使用方法。嵌入式系統硬體設計中往往需要使用可編程器件,學習者還需要一定的時間來學習使用常用的可編程器件(CP L D / F P G A),常用的有Xilinx和Altera公司的產品。進行系統硬體原理圖設計,就需要使用原理圖設計的EDA工具,常用的EDA 原理圖設計工具主要包括Cadence公司的Capture,Protel公司的Protel99SE等。接下來就可以參照評估板的電路圖,根據系統的設計要求,開始進行原理圖的繪制了。在原理圖繪制過程中,一定要搞清評估板電路連接的原因,對於一時沒有搞清楚的問題切不可矇混過關。例如,有些處理器的地址線是以位元組位單位的,而另一些處理器的地址線則是以兩個位元組為單位的,當連接16位的存儲器的時候,切不可想當然的把處理器的A 0 直接連接到存儲器的A 0 上面。另外,學生還應具有一定的PCB板圖繪制能力,因為在現階段,很多公司還不能完全把原理圖的設計工作和PCB 的繪制工作分開,往往要求硬體設計人員既能進行原理圖設計又能進行板圖設計。即使是PCB設計和原理圖設計分開的公司,也需要原理圖設計者能為PCB 的設計者對於不同的信號提出布板要求。
3.驅動程序和操作系統移植工作
現代嵌入式系統的開發同傳統8位單片機系統的開發相比,一個顯著的區別就是嵌入式操作系統的廣泛使用。在拿到焊接完畢的電路板,並進行基本的測試後,就要進行驅動程序和操作系統的移植工作了。首先要進行的Bootloader的編寫和移植工作。Bootloader相當於PC系統的BIOS。對於有些嵌入式操作系統,如uc/OSII沒有bootloader同樣可以開發調試。但是對於WindowsCE和嵌入式linux系統而言Bootloader就是必須的了。本文以Windows CE 為例,做一個簡要的說明。
Windows CE 系統的移植工作主要就是BSP(板級支持包)的開發過程。BSP將具體的硬體差異同操作系統的核心隔離開來,主要由Bootloaer ,OAL(OEMAbstraction Layer)和設備驅動程序三部分組成。WindowsCE系統中Bootloader叫做Eboot。Eboot被寫入系統的引導Flash。系統啟動時運行Eboot,完成通過網卡將調試PC 機中WindowsCE 操作系統映像下載到目標系統的SDRAM中並開始執行的功能。對於一個系統移植人員,首先需要閱讀文檔,了解WindowsCE系統Bootloader和BSP的基本概念和開發過程。(呵,還要做這工作啊,我還沒想到(初學^_^))Windows CE的開發系統Platform Builder提供了詳細的文檔和常式,開發人員需要仔細的閱讀文檔和常式。搞清楚各個函數之間的調用關系。在開發過程中的一個重要的步驟就是打通串口,使得目標板能夠通過PC機串口向調試PC 機發送數據。由於ARM系統的模擬器比較昂貴,而且操作系統的調試往往不使用JTAG調試器進行單步調試。所以能從串口觀察程序的執行過程和結果對於調試就顯得十分重要了。串口打通之後一個比較棘手的問題就是網卡晶元的調試。剛剛接觸嵌入式系統開發的人往往沒有直接在寄存器級上使用網卡晶元的經驗,而網卡晶元的說明一般都較為簡短,這就要求開發者學習一些乙太網的基礎知識,對乙太網的MAC 層有一個基本的認識。另外,各種網路調試(抓包)工具的使用也能大大降低系統調試的難度。系統的OAL需要根據具體硬體的不同做出相應的修改,這個部分可參照文檔進行,在調試過程中根據串口的信息分析出錯的地方。要充分發揮跨文件字元串搜索工具的功能,在浩如煙海的源文件中找到出錯的位置。當然,隨著開發者對系統文件目錄結構的熟悉和了解,錯誤定位的速度會不斷加快。WindowsCE 的驅動程序相對而言是比較好寫的。
4.應用程序的開發
嵌入式系統的應用程序開發同在PC 機上開發應用程序的區別不是很大。對於Windows CE系統而言,Microsoft已經提供了較為完善的開發工具。特別是.NET Compact work的使用,使得基於Windows CE.NETCompactwork的應用程序有了跨平台性。開發人員可以使用Windows 的C# 語言直接在PC 上進行http://CE.NET應用程序的開發和模擬調試,也可將目標系統同PC 機相連,進行聯機調試。現在有很多系統支持J2ME(JAVA的嵌入式系統版本) ,這使得JAVA 在嵌入式系統應用開發中佔有較大的優勢。另外,作為專業的嵌入式系統軟體開發人員,還需要充分了解面向對象技術和設計模式等方面的知識,當然作為初學者可以先不深入研究這方面的內容。
常用嵌入式系統處理器和操作系統
處理器
常用嵌入式系統處理器主要包括ARM 處理器,Power PC 處理器,基於MIPS 內核的嵌入式處理器,軟核處理器(如Altera 的Nios和Xilinx的MicroBlaze等)和DSP(數字信號處理器)等。
ARM 處理器的主要特點是具有較高的性能功耗比。ARM處理器被廣泛的應用在手機,PDA等領域,其中較為著名的有Intel 公司生產的基於ARM 內核的XScale系列處理器。由於所有公司生產的基於ARM內核的處理器具有相同的編程模型,在手持和電池供電的系統中,基於ARM的嵌入式系統處理器往往被首先選用。PowerPC(簡稱PPC)處理器具有較強的運算性能和數據吞吐能力,在網路和數據通信領域基於PPC的嵌入式系統處理器有著廣泛的應用。其中Motorola公司生產的MPC860/MPC8260被大量地應用在嵌入式網路產品中。MIPS 處理器的特點表現在十分強大的處理能力上。作為高性能處理器,MIPS處理器適用於網路、企業及高級消費類電子應用,特別是在機頂盒系統中,MIPS處理器具有較高的市場佔有率。隨著可編程器件的規模不斷擴大,使得人們能夠根據需要定製處理器,並方便的將針對某種特殊應用定製的處理器方便的在可編程器件內部實現。除了處理器外,計算機系統還需要許多其他構成部分,比如在多通道媒體數據處理系統中,經常需要使用可編程器件來實現高速的數據處理功能,使用軟核DSP來實現復雜的數字信號處理演算法,同時還需要處理器進行事務處理,軟核處理器將可編程器件,DSP同處理器結合在一起,為系統級設計提供了極大的靈活性。DSP(數字信號處理器)有別於通用處理器,集中表現在其強大的數字信號處理能力上。在DSP 內部提供了硬體乘累加器,處理器在設計上對於特殊的定址方式做了優化,一些DSP 還支持零耗循環(Zero OverheadLoop)。為了方便嵌入式系統設計,主流DSP 一般也都提供了豐富的外設。特別值得一提的是ADI 公司的Blackfin 系列DSP和TI 公司的DM64X系列DSP,兩種處理器都提供了豐富的片上外設,非常適用嵌入式系統應用。
操作系統
http://WindowCE.NET/5.0
作為Microsoft的產品,WindowCE.NE/5.0提供了功能完備的平台開發工具Platform Builder和應用開發工具Embedded Visual C++/Visual Studio 2003。WindowsCE由於擁有廣大使用者所熟悉的windows界面,系統提供了眾多驅動程序,並且有完備的文檔支持。對於應用開發而言,熟悉Windows系統開發的程序員很容易轉到WindowsCE 應用程序的開發。Windows CE將會是一個非常有前途的嵌入式操作系統。
VxWorks
VxWorks是由Windriver(風河)公司出品的嵌入式實時操作系統,大名鼎鼎的火星登陸車就是使用了VxWorks。Windriver為VxWorks提供了集成開發環境tornado。
υC/OSII
υC/OS是由Jean Labrosse設計編寫的開放源代碼的嵌入式實時操作系統,筆者最早接觸的嵌入式操作系統就是它。閱讀並深入理解υC/OS的源代碼對於理解實時系統是大有裨益的。
ARM Linux
ARM linux是由Russell King和其他開發者開發移植的用於ARM 處理器的linux操作系統。ARM Linux系統在GNU GPL下發布。
υCLinux
υClinux 是適用於沒有MMU 的嵌入式處理的LinuxOS 版本。υ Clinux 同樣在GNU GPL發布。
嵌入式系統開發過程中的常見問題和解決方法
Bootloader如何寫入Flash ?
初學者一般都會遇到如何將程序寫入處理器的問題。對於不同的處理器,可以採用不同的方法。例如Intel的Xscale處理器可以使用Intel公司提供的JFlash工具燒寫。對於具有JTAG調試工具軟體的處理器,可以使用如下思路:編寫一段程序,這段程序能將位於SDRAM/SRAM 固定地址中的數據寫入Flash中。燒寫時,首先,將這段軟體下載到SDRAM 中,然後通過調試軟體將要寫入Flash的數據下載到SDRAM/SRAM的某個固定地址開始的緩沖區,然後通過調試器開始執行程序,將數據寫入Flash。除此以外,網路上還提供了很多專用的寫Flash的工具,開發者可以根據自己的需要選用。(現在明白了我在學的那個BF533為什麼先下個flashProgramer.dxe先了)
什麼是arm-elf-gcc?
arm-elf-gcc是一個交叉C語言編譯器。我們在PC平台下編譯程序,編譯器運行的處理器同生成的代碼將要運行的處理器相同。但是,在PC
機上編譯ARM程序時,編譯器運行的處理器同生成的代碼運行的處理器不同,這種編譯器叫做交叉編譯器。其中的elf是指編譯器生成的目標文件格式。(其實我們平時用的單片機編譯器如GCC—AVR等已是交叉編譯器了,我到現在才弄清楚什麼是交叉編譯器)
走了哪條編譯路徑?
系統程序和驅動程序往往包含很多的編譯選項,很多選項都是在編譯時通過命令行定義的,如果想知道編譯的是那一段程序可以使用如下的方法:
#ifdef PLAT_AAA
#error Code for Platform AAA
#else
#error Code NOT for Platform AAA
#endif
這樣在編譯的時候就知道,編譯的是哪一條路經了。對於支持#pragma message( 「I am here」)的編譯器也可使用#pragma message預編譯指令。
我怎麼知道那段代碼在那個文件中?
系統編程中經常需要使用在多個文件中搜索字元串,在windows平台下可以使用平台提供的多文件字元串搜索工具。在linux平台下,可以使用grep來搜索字元串。Grep的搜索功能十分強大,支持正則表達式搜索,熟練使用grep對於閱讀系統和驅動程序代碼是很有幫助的。
系統是從那個文件開始運行的?
對於Windows CE系統,一般從WINCE420\PLATFORM\YourPlatform\KERNEL\HAL目錄的某個匯編文件中。對於Linux系統版本不同會存在一定差異,以arm處理器為例,一般會在linux2.4.x\arch\arm\kernel的head-armv.S中。
程序執行到了那裡?
可以在程序中插入如下代碼來實現
printf( 「I am here %s, %d\n」,__FILE__,__LINE__);
代碼將打出printf語句所在的文件名和行號。
推薦書目
Jean J.Labrosse MicroC/OS-II The Real-TimeKernel,Second Edition這本書是筆者接觸嵌入式實時系統的入門書,在國內能夠買到中文版。這本書較為清楚地講述了實時系統的概念,各個組成部分的工作原理,特別是公開了實時系統內核的源代碼,仔細研究定會受益匪淺。有個小的提示,對於初學者,這本書可以先不看第一章,直接從第二章看起。
Abraham Silberschatz, Peter Baer Galvin,GregGagne Operating System Concepts筆者在教學過程中發現,無論是計算機還是電子工程專業都有很多學生對於操作系統的基本概念都沒有搞清,很少有學生有完整的系統編程經驗。Operating System Concepts這本書對操作系統的概念講述只能用經典來形容。對於嵌入式系統有興趣深入研究的同學,首先要把基礎打好,這本書就成了必讀之物了。
Andrew S. Tanenbaum Computer Networks 提起Andrew S. Tanenbaum 學習計算機的同學一定都知道OPERATINGSYSTEMs:Designand
Implementation這本書,筆者對於Tanenbaum這樣的教授由衷佩服。網路協議棧是嵌入式系統中的支柱性組成部分。願意致力於網路深層技術研究的同學,這本書將為你們建立一個堅實的網路基礎。
Karim Yaghmour Building Embedded Linux Systems本書詳盡的介紹了嵌入式linux系統的組成,基本概念和如何去建立各個部分。全書篇幅較小,可謂短小精悍。即可以作為嵌入式linux系統的入門讀物,又是開發過程各個部分的指南。
Advanced RISC Machines Ltd (ARM) ARM7 TDMI DataSheet Advanced RISC Machines Ltd (ARM) ARM920TTechnical Reference Manual學習嵌入式系統不了解當前應用最廣泛的嵌入式處理器怎麼行?ARM7 TDMI 的 data sheet是學習ARM編程模型,指令集的好東西。在嵌入式系統中,MMU(內存管理單元)是很重要的部分,又是較難理解和掌握的部分。ARM920TTechnical Reference Manual 正好可以幫你講解這方面的內容。
Perter Van Der LinDen Expert C Programming嵌入式系統級編程最常用的語言還是C 。很多同學都自認為自己的C語言學的很好,那好,就看看這本書吧,找找自己和Experts差距。
嵌入式開發與桌面開發既有不同,又有非常大的聯系,而且十分注重實際操作能力。搞桌面開發的人在一開始接觸嵌入式的時候,通常轉換不過來,這主要體現在定位上。如文中所說,你是誰,你要做什麼?我對硬體的了解僅限於編程領域,PCB設計一竅不通,但並不能說你不懂硬體就不能從事嵌入式開發。一個系統的開發設計方方面面,在自己感興趣和熟悉的領域做出自己的貢獻才是最主要的。
1。硬體設計: 需要有硬體設計的經驗,對各種嵌入式器件有很好的了解。
2。系統移植:需要匯編經驗,操作系統原理以及底層驅動的了解
3。應用程序:需要桌面編程經驗

❹ 嵌入式bootloader和內核在flash上分布問題

這篇文章指引了我,希望它也能指引你

近些年來,嵌入式系統的發展在國內可謂如火如荼,很多公司都急需嵌入式系統方面的開發人員。然而,在高校中,嵌入式系統的教學卻較為滯後,很多高年級的本科生和剛入學的研究生都苦於不知從何學起。在本文中,筆者將根據自己的嵌入式系統開發和教學經驗,簡要介紹嵌入式系統的學習方法,力求能幫助初學者找到一條入門之路。
什麼是嵌入式系統?
學習嵌入式系統,首先應該明確什麼是嵌入式系統,否則費力去學,卻不知所學為何物,豈不惘然?嵌入式系統的定義很多,這也是困擾嵌入式系統學習的一個因素。筆者根據自己開發和教學過程中的理解,以及對各種嵌入式系統的應用進行總結,提出了嵌入式系統的簡單定義:嵌入式系統是嵌入式計算機系統的簡稱,這個定義突出嵌入式計算機系統和普通計算機系統的共性。下表列出了嵌入式系統的一些典型的
應用:
智能機器人(S D R 4,火星登陸車)
娛樂和消費電子(Gameboy Advance,Sony PSP)
網路通信產品(Smartphone)
軍用設備(軍用PDA )
汽車(車載導航,自動駕駛,娛樂系統)
智能儀器(虛擬儀器)
安全防護(防火,防盜)
環境保護(探空氣球)
銀行和商業消費(ATM)
以火星登陸車為例來分析一下嵌入式系統的定義。火星登陸車雖然聽起來感覺在技術上有些高不可測,但是本質就是嵌入式計算機系統的應用,其核心就是一個計算機系統,而這個計算機系統的組成同傳統的計算機系統在本質上沒有什麼差別。兩者的顯著不同之處就在於,用於火星登陸車的計算機系統被安裝到了火星登陸車上。當然,一個計算機系統能夠被安裝在火星登陸車上,是需要進行很多特殊設計的。但是從本質上講,嵌入式系統的核心概念還在計算機系統。嵌入式系統學習的重點也在計算機系統上。一方面,學習者需要牢固掌握計
算機系統本身的概念,更重要的是學習嵌入系統的開發過程同傳統計算機系統開發過程的差別。這里需要指出的是,很多學習者本來就沒有從事過完整計算機系統的開發,高校的教學是以程序設計為中心的,計算機系統的構成,操作系統的原理,編程語言等課程都是為了能夠讓學生更好的使用計算機系統進行程序設計,在現有的計算平台上來設計實現各種應用,學生一般沒有機會學習一個完整的計算機系統是如何構建,並親身參與到構建的每一個過程。而對於嵌入式系統而言,從事平台開發的人就是要親自去開發出一個完整的計算機系統,這個過程包括
l 需求分析
2 硬體設計
3 驅動程序
4 Bootloader & BSP (板級支持包)
5 操作系統的移植
6 應用程序的開發
7 性能檢查
嵌入式系統教學的目的就是教會學生如何根據需求去建立滿足某種特殊行業需求的嵌入式計算機系統。讓學生學會如何構件硬體平台,進行硬體設計,選擇能夠滿足應用要求的最佳的嵌入式操作系統,並完成Bootloader,BSP 和驅動程序的編寫,移植,調試等過程。為了滿足行業需求,最終要在所建立的系統上編寫調試相應的應用程序,並進行性能的測試和檢查。
你是誰,你需要學習哪些東西?
如果你的工作只是需要在PC 機上編寫一個圖片瀏覽程序,那麼你就沒有必要去了解當系統收到一個ARP 請求包後應該如何回應。同樣的道理,嵌入式系統的學習也是有很多方面的。就嵌入式系統的設計和實現而言,基本上需要四種不同的工作:系統設計工作,硬體設計工作,驅動程序和操作系統移植工作和應用程序設計開發工作。
系統設計工作
在系統的設計階段,系統分析師將根據需求確定系統的硬體的基本構成,根據系統的需求選擇使用那種處理器,使用哪種操作系統,使用那些軟體開發工具。系統分析師往往是較為完整的參與過嵌入式系統設計的全過程,對於系統應用的行業較為了解,對於嵌入式系統
本身的開發流程十分清楚的人。
硬體設計工作
系統硬體設計人員需要根據系統分析師的設計結果,進行硬體原理圖的設計。通常需要硬體設計人員熟悉嵌入式系統的硬體構成。硬體設計人員需要了解常用的嵌入式系統處理器,存儲器(Flash,SDRAM),乙太網MAC晶元,音頻/ 視頻編解碼晶元,電源管理晶元,匯流排介面電路 (USB, PCI),液晶顯示模塊,可編程邏輯器件(FPGA/CPLD),無線網路通信模塊(Bluetooth, WLAN,GPRS)等硬體電路構成元素的基本工作原理,連接使用方法,使用注意事項,基本調試方法等內容。在網路上能找到很多公司的評估板的原理圖,對於這些原理圖要仔細研究,摸清處理器同存儲器,網卡,液晶模塊等器件的連接方法和原因。通過對這些電路的研究,能夠較快地了解整個嵌入式系統的構成,這些電路同實際產品中的電路雖有一定差別的,特別是對於手持設備,但這些差別不影響初學者學習嵌入式系統的硬體設計基本構成。
以上這些知識,往往需要較長時間的學習和積累,需要親自參與實踐的機會。對於剛剛接觸嵌入式系統硬體開發的學生來講,一般不可能全部了解這些知識,但也不會是通通一無所知。筆者結合自己開發和教學的經驗認為:首先應該選定一款主流且較為簡單的嵌入式系
統處理器,比如基於ARM7TDMI 內核的AT91M40800,S3C44B0 等嵌入式系統處理器,學習32 位RISC 處理器的編程模型,指令集。高校教學中,單片計算機課程一般以8051系列單片為核心講解,由於現代32位處理器的結構和開發方式同8 位單片機有著較大的差別,學習者還是需要花一點力氣來研究以下32 位處理器的。以ARM處理器為例,學習者就需要理解處理器的多種工作模式,備份寄存器,RISC 指令集的特點,MMU 和虛擬地址,中斷處理過程等內容。在學習指令集的過程中,最好能夠每學習幾條指令,就使用這幾條指令在模擬器上實驗以下,觀察處理器執行的結果。這個過程一方面是學習者對於指令本身的學習能夠取得一個比較好的效果,另外也是對開發工具本身的一種學習。接著,就可以開始學習片上資源的使用和配置方法。這時就需要一個方便使用的開發板,學習者能夠通過JTAG 模擬器將開發板同調試PC 機相連,進行程序的下載,調試。特別是要仔細研究系統的初始化過程和中斷處理的過程。在開發過程中如果遇到問題,應自己分析問題產生的原因,通過分析縮小問題可能產生的范圍,最終找到問題的所在。最重要的就是要保持一種解決問題的信心,面對困難如何處理,往往能夠決定最終系統是否能夠調試成功。然後,學習者可以開始仔細學習處理器同存儲器的連接,存儲空間的配置,各種外擴器件,如網卡,AC97音效卡的工作原理和使用方法。嵌入式系統硬體設計中往往需要使用可編程器件,學習者還需要一定的時間來學習使用常用的可編程器件(C P L D / F P G A ),常用的有Xilinx和Altera公司的產品。進行系統硬體原理圖設計,就需要使用原理圖設計的E D A 工具,常用的E D A 原理圖設計工具主要包括Cadence公司的Capture,Protel公司的Protel99 SE等。接下來就可以參照評估板的電路圖,根據系統的設計要求,開始進行原理圖的繪制了。在原理圖繪制過程中,一定要搞清評估板電路連接的原因,對於一時沒有搞清楚的問題切不可矇混過關。例如,有些處理器的地址線是以位元組位單位的,而另一些處理器的地址線則是以兩個位元組為單位的,當連接16 位的存儲器的時候,切不可想當然的把處理器的A 0 直接連接到存儲器的A 0 上面。另外,學生還應具有一定的P C B 板圖繪制能力,因為在現階段,很多公司還不能完全把原理圖的設計工作和PCB 的繪制工作分開,往往要求硬體設計人員既能進
行原理圖設計又能進行板圖設計。即使是PCB設計和原理圖設計分開的公司,也需要原理圖設計者能為PCB 的設計者對於不同的信號提出布板要求。
驅動程序和操作系統移植工作
現代嵌入式系統的開發同傳統8 位單片機系統的開發相比,一個顯著的區別就是嵌入式操作系統的廣泛使用。在拿到焊接完畢的電路板,並進行基本的測試後,就要進行驅動程序和操作系統的移植工作了。首先要進行的Bootloader的編寫和移植工作。Bootloaer相當於PC系統的BIOS。對於有些嵌入式操作系統,如uc/OSII 沒有bootloader同樣可以開發調試。但是對於Windows CE和嵌入式linux系統而言Bootloader就是必須的了。本文以
Windows CE 為例,做一個簡要的說明。
Windows CE 系統的移植工作主要就是BSP(板級支持包)的開發過程。B S P 將具體的硬體差異同操作系統的核心隔離開來,主要由Bootloaer ,OAL (OEMAbstraction
Layer)和設備驅動程序三部分組成。WindowsCE系統中Bootloader叫做Eboot。Eboot被寫入系統的引導Flash。系統啟動時運行 Eboot,完成通過網卡將調試PC 機中Windows CE 操作系統映像下載到目標系統的S D R A M 中並開始執行的功能。對於一個系統移植人員,首先需要閱讀文檔,了解Windows CE系統Bootloader和BSP的基本概念和開發過
程。(呵,還要做這工作啊,我還沒想到(初學^_^))Windows CE的開發系統Platform Builder提供了詳細的文檔和常式,開發人員需要仔細的閱讀文檔和常式。搞清楚各個函數之間的調用關系。在開發過程中的一個重要的步驟就是打通串口,使得目標板能夠通過PC 機串口向調試PC 機發送數據。由於A R M 系統的模擬器比較昂貴,而且操作系統的調試往往不使用JTAG 調試器進行單步調試。所以能從串口觀察程序的執行過程和結果對於調試就顯得十分重要了。串口打通之後一個比較棘手的問題就是網卡晶元的調試。剛剛接觸嵌入式系統開發的人往往沒有直接在寄存器級上使用網卡晶元的經驗,而網卡晶元的說明一般都較為簡短,這就要求開發者學習一些乙太網的基礎知識,對乙太網的 MAC 層有一個基本的認識。另外,各種網路調試(抓包)工具的使用也能大大降低系統調試的難度。系統的O A L 需要根據具體硬體的不同做出相應的修改,這個部分可次參照文檔進行,在調試過程中根據串口的信息分析出錯的地方。要充分發揮跨文件字元串搜索工具的功能,在浩如煙海的源文件中找到出錯的位置。當然,隨著開發者對系統文件目錄結構的熟悉和了解,錯誤定位的速度會不斷加快。Windows CE 的驅動程序相對而言是比較好寫的。程序結構較為簡單,學習者可參照 MSDN Home > MSDN Library >Mobile and Embedded Development > Embedded Operating
System Development > Columns SPOT the Geek and WindowsCE Drivers 這篇文章。
應用程序的開發
嵌入式系統的應用程序開發同在PC 機上開發應用程序的區別不是很大。對於W i n d o w s C E 系統而言,Microsoft已經提供了較為完善的開發工具。特別是.NET Compact Framework 的使用,使得基於Windows CE.NET Compact Framework的應用程序有了跨平台性。開發人員可以使用Windows 的C# 語言直接在PC 上進行CE .NET應用程序的開發和模擬調試,也可將目標系統同PC 機相連,進行聯機調試。現在有很多系統支持J2ME(JAVA 的嵌入式系統版本) ,這使得JAVA 在嵌入式系統應用開發中佔有較大的
優勢。另外,作為專業的嵌入式系統軟體開發人員,還需要充分了解面向對象技術和設計模式等方面的知識,當然作為初學者可以先不深入研究這方面的內容。
常用嵌入式系統處理器和操作系統
處理器
常用嵌入式系統處理器主要包括A R M 處理器,Power PC 處理器,基於MIPS 內核的嵌入式處理器,軟核處理器(如Alter 的Nios和Xilinx的MicroBlaze等)和D S P(數字信號處理器)等。
A R M 處理器的主要特點是具有較高的性能功耗比。A R M 處理器被廣泛的應用在手機,P D A 等領域,其中較為著名的有Intel 公司生產的基於ARM 內核的XScale系列處理器。由於所有公司生產的基於ARM 內核的處理器具有相同的編程模型,在手持和電池供電的系統中,基於A R M 的嵌入式系統處理器往往被首先選用。PowerPC (簡稱PPC)處理器具有較強的運算性能和數據吞吐能力,在網路和數據通信領域基於PPC 的嵌入式系統處理器有著廣泛的應用。其中Motorola公司生產的MPC860/MPC8260 被大量地應用在嵌入式網路產品中。MIPS 處理器的特點表現在十分強大的處理能力上。作為高性能處理器,MIPS 處理器適用於網路、企業及高級消費類電子應用,特別是在機頂盒系統中,MIPS 處理器具有較高的市場佔有率。隨著可編程器件的規模不斷擴大,使得人們能夠根據需要定製處理器,並方便的將針對某種特殊應用定製的處理器方便的在可編程器件內部實現。除了處理器外,計算機系統還需要許多其他構成部分,比如在多通道媒體數據處理系統中,經常需要使用可編程器件來實現高速的數據處理功能,使用軟核DSP 來實現復雜的數字信號處理演算法,同時還需要處理器進行事務處理,軟核處理器將可編程器件,D S P 同處理器結合在一起,為系統級設計提供了極大的靈活性。D S P (數字信號處理器)有別於通用處理器,集中表現在其強大的數字信號處理能力上。在DSP 內部提供了硬體乘累加器,處理器在設計上對於特殊的定址方式做了優化,一些DSP 還支持零耗循環(Zero OverheadLoop)。為了方便嵌入式系統設計,主流DSP 一般也都提供了豐富的外設。特別值得一提的是A D I 公司的Blackfin 系列DSP 和TI 公司的DM64X 系列DSP,兩種處理器都提供了豐富的片上外設,非常適用嵌入式系統應用。
操作系統
Window CE.NET/5.0
作為Microsoft的產品,Window CE.NE/5.0提供了功能完備的平台開發工具Platform Builder和應用開發工具Embedded Visual C++/Visual Studio 2003。Windows CE由於擁有廣大使用者所熟悉的windows 界面,系統提供了眾多驅動程序,並且有完備的文檔支持。對於應用開發而言,熟悉Windows 系統開發的程序員很容易轉到WindowsCE 應用程序的開發。Windows CE將會是一個非常有前途的嵌入式操作系統。
VxWorks
VxWorks 是由Windriver(風河)公司出品的嵌入式實時操作系統,大名鼎鼎的火星登陸車就是使用了VxWorks。Windriver 為VxWorks 提供了集成開發環境tornado。
υC/OSII
υC/OS是由Jean Labrosse設計編寫的開放源代碼的嵌入式實時操作系統,筆者最早接觸的嵌入式操作系統就是它。閱讀並深入理解υ C/OS 的源代碼對於理解實時系統是大有裨益的。
ARM Linux
ARM linux是由Russell King和其他開發者開發移植的用於ARM 處理器的linux操作系統。 ARM Linux系統在GNU GPL下發布。有興趣的讀者可以參看
的介紹。
υ CLinux
υ Clinux 是適用於沒有MMU 的嵌入式處理的LinuxOS 版本。υ Clinux 同樣在GNU GPL 下發布,有興趣的讀者可以參看

嵌入式系統開發過程中的常見問題和解決方法
Bootloader如何寫入Flash ?
初學者一般都會遇到如何將程序寫入處理器的問題。對於不同的處理器,可以採用不同的方法。例如Intel的Xscale處理器可以使用Intel公司提供的JFlash工具燒寫。對於具有JTAG 調試工具軟體的處理器,可以使用如下思路:編寫一段程序,這段程序能將位於SDRAM/SRAM 固定地址中的數據寫入Flash 中。燒寫時,首先,將這段軟體下載到SDRAM 中,然後通過調試軟體將要寫入Flash的數據下載到S D R A M / S R A M 的某個固定地址開始的緩沖區,然後通過調試器開始執行程序,將數據寫入Flash。除此以外,網路上還提供了很多專用的寫Flash的工具,開發者可以根據自己的需要選用。(現在明白了我在學的那個BF533為什麼先下個flashProgramer.dxe先了)
什麼是arm-elf-gcc?
arm -elf-gcc是一個交叉C語言編譯器。我們在PC平台下編譯程序,編譯器運行的處理器同生成的代碼將要運行的處理器相同。但是,在PC 機上編譯ARM 程序時,編譯器運行的處理器同生成的代碼運行的處理器不同,這種編譯器叫做交叉編譯器。其中的elf是指編譯器生成的目標文件格式。(其實我們平時用的單片機編譯器如GCC—AVR等已是交叉編譯器了,我到現在才弄清楚什麼是交叉編譯器)
走了哪條編譯路徑?
系統程序和驅動程序往往包含很多的編譯選項,很多選項都是在編譯時通過命令行定義的,如果想知道編譯的是那一段程序可以使用如下的方法:
#ifdef PLAT_AAA
#error Code for Platform AAA
#else
#error Code NOT for Platform AAA
#endif
這樣在編譯的時候就知道,編譯的是哪一條路經了。對於支持#pragma message( 「I am here」)的編譯器也可使用#pragma message預編譯指令。
我怎麼知道那段代碼在那個文件中?
系統編程中經常需要使用在多個文件中搜索字元串,在windows平台下可以使用平台提供的多文件字元串搜索工具。在linux平台下,可以使用grep來搜索字元串。Grep 的搜索功能十分強大,支持正則表達式搜索,熟練使用grep對於閱讀系統和驅動程序代碼是很有
幫助的。
系統是從那個文件開始運行的?
對於W i n d o w s C E 系統,一般從
W I N C E 4 2 0 \PLATFORM\YourPlatform\KERNEL\HAL 目錄的某個匯編文件中。對於Linux 系統版本不同會存在一定差異,以arm處理器為例,一般會在linux2.4.x\arch\arm\kernel的head-armv.S中。
程序執行到了那裡?
可以在程序中插入如下代碼來實現
printf( 「I am here %s, %d\n」,__FILE__, __LINE__);
代碼將打出printf語句所在的文件名和行號。
推薦書目
Jean J.Labrosse MicroC/OS-II The Real-Time Kernel,Second Edition
這本書是筆者接觸嵌入式實時系統的入門書,在國內能夠買到中文版。這本書較為清楚地講述了實時系統的概念,各個組成部分的工作原理,特別是公開了實時系統內核的源代碼,仔細研究定會受益匪淺。有個小的提示,對於初學者,這本書可以先不看第一章,直接從
第二章看起。
Abraham Silberschatz, Peter Baer Galvin,Greg Gagne Operating System Concepts
筆者在教學過程中發現,無論是計算機還是電子工程專業都有很多學生對於操作系統的基本概念都沒有搞清,很少有學生有完整的系統編程經驗。Operating SystemConcepts這本書對操作系統的感念講述只能用經典來形容。對於嵌入式系統有興趣深入研究的同學,首先
要把基礎打好,這本書就成了必讀之物了。
Andrew S. Tanenbaum Computer Networks
提起Andrew S. Tanenbaum 學習計算機的同學一定都知道OPERATINGSYSTEMs:Design and Implementation這本書,筆者對於Tanenbaum 這樣的教授由衷佩服。網路協議棧是嵌入式系統中的支柱性組成部分。願意致力於網路深層技術研究的同學,這本書將你們建立一個堅實的網路基礎。
Karim Yaghmour Building Embedded Linux Systems
本書詳盡的介紹了嵌入式linux系統的組成,基本概念和如何去建立各個部分。全書篇幅較小,可謂短小精悍。即可以作為嵌入式linux 系統的入門讀物,又是開發過程各個部分的指南。
Advanced RISC Machines Ltd (ARM) ARM7 TDMI
Data Sheet
Advanced RISC Machines Ltd (ARM) ARM920T
Technical Reference Manual
學習嵌入式系統不了解當前應用最廣泛的嵌入式處理器怎麼行? ARM7 TDMI 的 data sheet是學習ARM編程模型,指令集的好東西。在嵌入式系統中,M M U (內存管理單元)是很重要的部分,又是較難理解和掌握的部分。ARM920T Technical Reference Manual 正好可以幫你講解這方面的內容。
Perter Van Der LinDen Expert C Programming
嵌入式系統級編程最常用的語言還是C 。很多同學都自認為自己的C 語言學的很好,那好,就看看這本書吧,找找自己和Experts差距。
註:這篇文章是我在2004年第12期的學習園地看到的。文章的作者是袁通
作者簡介
袁通,北京工業大學實驗學院嵌入式系統課程教師,曾於2 0 0 4 年以訪問學生身份工作於微軟亞洲研究院。
看完這篇文章後,我就迫不及待得貼出來,因為確實是寫的好啊。我搞嵌入式一年多了,從8051到ARM,學習過,彷徨過,高興過,郁悶過。。。近來甚至有放棄的想法,終歸到底是對嵌入式開發認識不全面造成的,一開始就一頭鑽到技術里,學習各種技術,最終迷失在自己一手造成的泥坑裡。這篇文章非常清晰的講述了嵌入式開發的方方面面,對我這樣迷惑的人起到了醍醐灌頂的作用。
嵌入式開發與桌面開發既有不同,又有非常大的聯系,而且十分注重實際操作能力。搞桌面開發的人在一開始接觸嵌入式的時候,通常轉換不過來,這主要體現在定位上。如文中所說,你是誰,你要做什麼?我對硬體的了解僅限於編程領域,PCB設計一竅不通,但並不能說你不懂硬體就不能從事嵌入式開發。一個系統的開發設計方方面面,在自己感興趣和熟悉的領域做出自己的貢獻才是最主要的。
1。硬體設計: 需要有硬體設計的經驗,對各種嵌入式器件有很好的了解。
2。系統移植:需要匯編經驗,操作系統原理以及底層驅動的了解
3。應用程序:需要桌面編程經驗

閱讀全文

與嵌入式linuxarp相關的資料

熱點內容
當前無網路怎麼解決 瀏覽:299
x200thinkpad升級 瀏覽:568
華為mate8幾個版本的區別 瀏覽:582
怎樣把一個excel拆分多個文件 瀏覽:388
圖片重命名添加上一級文件名 瀏覽:940
java讀linux文件換行符 瀏覽:995
oracel客戶端工具 瀏覽:557
自學編程語言從哪裡入手 瀏覽:401
linux創建交換文件格式 瀏覽:567
配音試音文件擴展名mp3格式 瀏覽:523
安卓系統鎖屏密碼文件夾里 瀏覽:478
win8系統桌面文件 瀏覽:300
升級到win10後刪除 瀏覽:17
linuxtotalcommander 瀏覽:165
傳票翻打在電腦上下什麼app 瀏覽:39
db2查看資料庫字元集 瀏覽:449
小米私密文件移出後找不到 瀏覽:775
紅底白色的心是什麼app的標志 瀏覽:163
小冤家APP角色怎麼變回家長 瀏覽:822
夢幻西遊合寵模擬器網站是什麼 瀏覽:420

友情鏈接