ARM-Linux嵌入式開發和微控制器開發的不同
對於ARM的嵌入式開發主要有兩種方式:一種是直接在ARM晶片上進行應用開發,不採用作業系統,也稱為裸機程式設計,這種開發方式主要應用於一些低端的ARM晶片上,其開發過程非常類似微控制器,這裡不多敘述。還有一種是在ARM晶片上執行作業系統,對於硬體的操作需要編寫相應的驅動程式,應用開發則是基於作業系統的,這種方式的嵌入式應用開發與微控制器開發差異較大。
ARM-Linux應用開發和微控制器的開發主要有以下幾點不同:
應用開發環境的硬體裝置不同
微控制器:開發板、模擬器(偵錯程式)、USB線;
ARM-Linux:開發板、網線、串列埠線、SD卡;
對於ARM-Linux開發,通常是沒有硬體的偵錯程式的,尤其是在應用開發的過程中,很少使用硬體的偵錯程式,程式的除錯主要是通過串列埠進行除錯的;但是需要說明的是,對於ARM晶片也是有硬體模擬器的,但通常用於裸機開發。
程式下載方式不同
微控制器:模擬器(偵錯程式)下載,或者是串列埠下載;
ARM-Linux:串列埠下載、tftp網路下載、或者直接讀寫SD、MMC卡等儲存裝置,實現程式下載;
這個與開發環境的硬體裝置是有直接關係的,由於沒有硬體模擬器,故ARM-Linux開發時通常不採用模擬器下載;這樣看似不方便,其實給ARM-Linux的應用開發提供了更多的下載方式。
晶片的硬體資源不同
微控制器:通常是一個完整的計算機系統,包含片內RAM,片內FLASH,以及UART、I2C、AD、DA等各種外設;
ARM:通常只有CPU,需要外部電路提供RAM以供ARM正常執行,外部電路提供FLASH、SD卡等儲存系統映像,並通過外部電路實現各種外設功能。由於ARM晶片的處理能力很強,通過外部電路可以實現各種複雜的功能,其功能遠遠強於微控制器。
韌體的儲存位置不同
微控制器:通常具備片內flash儲存器,韌體程式通常儲存在該區域,若韌體較大則需要通過外部電路設計外部flash用於儲存韌體。
ARM-Linux: 由於其沒有片內的flash, 並且需要執行作業系統,整個系統映像通常較大,故ARM-Linux開發的作業系統映像和應用通常儲存在外部的MMC、SD卡上,或者採用SATA裝置等。
啟動方式不同
微控制器:其結構簡單,內部整合flash, 通常是晶片廠商在程式上電時加入固定的跳轉指令,直接跳轉到程式入口(通常在flash上);開發的應用程式通過編譯器編譯,採用專用下載工具直接下載到相應的地址空間;所以系統上電後直接執行到相應的程式入口,實現系統的啟動。
ARM-Linux:由於採用ARM晶片,執行效率高,功能強大,外設相對豐富,是功能強大的計算機系統,並且需要執行作業系統,所以其啟動方式和微控制器有較大的差別,但是和家用計算機的啟動方式基本相同。其啟動一般包括BIOS,bootloader,核心啟動,應用啟動等階段。
(a)啟動BIOS
BIOS是裝置廠家(晶片或者是電路板廠家)設定的相應啟動資訊,在裝置上電後,其將讀取相應硬體裝置資訊,進行硬體裝置的初始化工作,然後跳轉到bootloader所在位置(該位置是一個固定的位置,由BIOS設定)。(根據個人理解,BIOS的啟動和微控制器啟動類似,需要採用相應的硬體偵錯程式進行韌體的寫入,儲存在一定的flash 空間,裝置上電啟動後讀取flash空間的指令,從而啟動BIOS程式。)
(b)啟動bootloader
該部分已經屬於嵌入式Linux軟體開發的部分,可以通過程式碼修改定製相應的bootloader程式,bootloader的下載通常是採用直接讀寫SD卡等方式。即編寫定製相應的bootloader,編譯生成bootloader映象檔案後,利用工具(專用或通用)下載到SD卡的MBR區域(通常是儲存區的第一個扇區)。此時需要在BIOS中設定,或者通過電路板的硬體電路設定,選擇bootloader的載入位置;若BIOS中設定從SD卡啟動,則BIOS初始化結束後,將跳轉到SD卡的位置去執行bootloader,從而實現bootloader的啟動。
Bootloader主要作用是初始化必要的硬體裝置,建立核心需要的一些資訊並將這些資訊通過相關機制傳遞給核心,從而將系統的軟硬體環境帶到一個合適的狀態,最終呼叫作業系統核心,真正起到引導和載入核心的作用。
(c)啟動核心
bootloader啟動完成初始化等相關工作之後,將呼叫核心啟動程式。這就進入了實際的作業系統相關內容的啟動了,包括相應的硬體配置,任務管理,資源管理等核心程式的啟動。
(d)啟動應用
在作業系統核心啟動之後,就可以開始啟動需要的應用,去完成真正的業務操作了。
相關文章
- iOS 開發 frame和Bounds的不同iOS
- 論萌新開發與大佬開發的不同?
- 移動前端開發和Web前端開發的不同點介紹前端Web
- 嵌入式開發
- 嵌入式開發和普通伺服器開發的前景哪個更好?伺服器
- Qt 嵌入式圖形開發大全和QT開發手冊QT
- Linux嵌入式系統開發,嵌入式Linux開發教程Linux
- 嵌入式開發累不累?
- 小程式定製開發和APP開發相比較有何不同之處APP
- 最全!嵌入式STM32微控制器開發環境配置教學Win/Mac!!!開發環境Mac
- 做嵌入式開發辛苦嗎?
- 嵌入式開發基礎(3)
- 我看嵌入式開發薦
- 嵌入式CGI開發之旅——3
- 嵌入式CGI開發之旅——2
- 嵌入式開發的基礎知識
- Keil uVersion 4微控制器開發指南
- oms和android在開發上有什麼不同?Android
- 矽谷和國內的 iOS 開發到底有何不同?iOS
- 會開發和懂開發的區別
- 原生開發、H5開發和混合開發的區別H5
- Tessel:用JavaScript做嵌入式開發JavaScript
- AJAX 開發的兩種不同的方法(轉)
- uClinux 在 S3C4510B 嵌入式開發板上的移植和開發詳解LinuxS3
- 瀑布式開發和敏捷開發的區別敏捷
- Java開發和Android開發的區別JavaAndroid
- 嵌入式硬體開發最新技術
- 嵌入式開發要學哪些課程?
- 從零搭建嵌入式開發環境開發環境
- 嵌入式開發 ARM入門經典
- 嵌入式C++開發詳解(三)C++
- LEDE - Linux嵌入式開發環境Linux開發環境
- 搭建嵌入式Linux開發環境Linux開發環境
- 嵌入式軟硬體開發中遇到的坑
- 開發APP和開發微信小程式的區別?APP微信小程式
- 自上而下的軟體開發和自下而上軟體開發
- 嵌入式開發程式碼中的extern "C" {的作用
- 淺談軟體開發模型之瀑布開發和敏捷開發模型敏捷