ARM-Linux開發與MCU開發的差別是什麼

2020-12-18 電子發燒友

ARM-Linux開發與MCU開發的差別是什麼

嵌入式資訊精選 發表於 2020-03-09 16:43:12

針對ARM-Linux程序的開發,主要分為三類:應用程式開發、驅動程序開發、系統內核開發,針對不同種類的軟體開發,有其不同的特點。今天我們來看看ARM-Linux開發和MCU開發的不同點,以及ARM-Linux的基本開發環境。

1. ARM-Linux應用開發和單片機開發的不同

這裡先要做一個說明,對於ARM的應用開發主要有兩種方式:一種是直接在ARM晶片上進行應用開發,不採用作業系統,也稱為裸機編程,這種開發方式主要應用於一些低端的ARM晶片上,其開發過程非常類似單片機,這裡不多敘述。還有一種是在ARM晶片上運行作業系統,對於硬體的操作需要編寫相應的驅動程序,應用開發則是基於作業系統的,這種方式的嵌入式應用開發與單片機開發差異較大。ARM-Linux應用開發和單片機的開發主要有以下幾點不同:

(1)應用開發環境的硬體設備不同

單片機:開發板,仿真器(調試器),USB線;

ARM-Linux: 開發板,網線,串口線,SD卡;

對於ARM-Linux開發,通常是沒有硬體的調試器的,尤其是在應用開發的過程中,很少使用硬體的調試器,程序的調試主要是通過串口進行調試的;但是需要說明的是,對於ARM晶片也是有硬體仿真器的,但通常用於裸機開發。

(2)程序下載方式不同

單片機:仿真器(調試器)下載,或者是串口下載;

ARM-Linux:串口下載、tftp網絡下載、或者直接讀寫SD、MMC卡等存儲設備,實現程序下載;

這個與開發環境的硬體設備是有直接關係的,由於沒有硬體仿真器,故ARM-Linux開發時通常不採用仿真器下載;這樣看似不方便,其實給ARM-Linux的應用開發提供了更多的下載方式。

(3)晶片的硬體資源不同

單片機:通常是一個完整的計算機系統,包含片內RAM,片內FLASH,以及UART、I2C、AD、DA等各種外設;

ARM:通常只有CPU,需要外部電路提供RAM以供ARM正常運行,外部電路提供FLASH、SD卡等存儲系統映像,並通過外部電路實現各種外設功能。由於ARM晶片的處理能力很強,通過外部電路可以實現各種複雜的功能,其功能遠遠強於單片機。

(4)固件的存儲位置不同

單片機:通常具備片內flash存儲器,固件程序通常存儲在該區域,若固件較大則需要通過外部電路設計外部flash用於存儲固件。

ARM-Linux:由於其沒有片內的flash, 並且需要運行作業系統,整個系統映像通常較大,故ARM-Linux開發的作業系統映像和應用通常存儲在外部的MMC、SD卡上,或者採用SATA設備等。

(5)啟動方式不同

單片機: 其結構簡單,內部集成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)啟動應用:在作業系統內核啟動之後,就可以開始啟動需要的應用,去完成真正的業務操作了。

2. Arm-Linux 基本開發環境

前面介紹了ARM-Linux應用開發和單片機開發的不同之處,相信你已經對ARM-Linux應用開發有了一個基本的認識了,下面將介紹一下ARM-Linux的基本開發環境。其主要包括硬體環境和軟體環境兩個部分,這裡以iMX53和Ubuntu為例進行說明。

(1)硬體環境

開發板: ARM運行的硬體環境,或者是相應項目的ARM電路板;

計算機:作為開發主機使用,安裝Linux(如Ubuntu)),或者採用虛擬機安裝Ubuntu;

串口線:用於開發過程中採用終端進行串口調試或下載程序;

網線:用於連接arm-board和開發主機,實現tftp下載內核(程序等),通過網絡nfs運行程序等。

SD卡(及讀卡器)或者其他存儲設備: 用於存儲bootloader、內核映像等,以及最終的軟體系統的存儲;開發過程中,通常用於保存bootloader,引導系統啟動。

(2)軟體環境

Ubuntu:作為作業系統,是整個軟體開發環境的載體,相應的開發工具都布置在此系統中。

LTIB:這是freescale的提供的一個編譯工具鏈,能夠很方便的將原始碼文件編譯為適合的程序代碼,並對程序進行調試;用戶也可以通過下載源碼構建自己的編譯工具鏈。

tftp:用於從開發主機Ubuntu上向arm-board 下載內核文件、應用文件等。

nfs網絡文件系統:用於在開發主機上建立網絡nfs文件根系統,arm-board通過nfs網絡文件系統讀取開發主機上的虛擬根文件系統,完成系統的啟動;方便系統的開發與調試。

minicom:串口調試工具,用於在開發主機上與arm-board通信,實現對arm-board上應用程式的操作與調試;

Eclipse:集成開發環境,主要方便代碼的編輯、編譯等,也可採用DS5,RealView等;或者採用gedit進行編輯,通過LTIB進行編譯和管理。

責任編輯:Ct

打開APP閱讀更多精彩內容

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容圖片侵權或者其他問題,請聯繫本站作侵刪。 侵權投訴

相關焦點

  • 移動開發是什麼?蘋果,安卓開發,手機app,C語言JAVA的關係
    現在手機流行啊,就業好啊,很多人想學手機app開發,卻不知道到底是什麼玩意,今天給大家簡要介紹一下,快速了解。首先,android開發,繞不開的就是JAVA編程,因為android的底層就是java,再底層就是C語言,可以這樣理解:java是一種程式語言,android應用用java開發,而c語言是另一種程式語言,也可以在android開發,但是需要通過java去調用C語言。
  • Linux手冊:Fedora Linux
    一、Fedora 是什麼,與Redhat有什麼關係Fedora 是什麼?如果您是初學Linux,可能在 LinuxSir.Org 上看到 Fedora&Redhat 討論區,之所以把Fedora和Redhat這兩個Linux的發行版放在一起,主要是他們的聯繫太密切了。
  • ARM架構是什麼?為什麼連高通都離不開?
    ARM架構是什麼?為什麼高通都離不開?  ARM指令對於行動裝置就想x86對於電腦一樣,目前arm指令集在行動裝置上已經形成了完整的生態鏈,從作業系統到上層應用軟體都是基於arm架構開發的。
  • linux運維需要掌握什麼知識?linux運維學習路線
    linux運維需要掌握什麼知識?運維需要掌握什麼知識? 想要學習linux,那麼就得知道linux運維是做什麼的? linux運維從低到高分為基礎運維、高級運維、運維架構師,不同級別的運維的職責不一樣,需要幹的事情也不一樣,當然需要掌握的技能也不一樣。
  • 引用ARM開發,對entry point的含義
    本文引用地址:http://www.eepw.com.cn/article/201611/317248.htm從事了這麼久的ARM開發,對entry point的含義一知半解,今日再次拿出一本寫得還算不錯的ARM教材來翻,書中這一段僅僅是把英文手冊單純翻譯成中文
  • iOS基於unix,安卓基於linux,而國產系統基於linux就被吐槽?
    說怎麼能稱之為國產作業系統呢,明明就是linux套了個馬甲而來,卻說是國產作業系統了。但其實這個吐槽真是不對的,如果這麼說,那iOS系統也是unix了,而安卓也是linux了,因為這兩者都是基於這兩個內核而來的,不也是套了個馬甲麼?
  • 中國十大mcu公司
    中國mcu公司排名一——中穎電子股份有限公司   中穎電子是家電MCU市場的龍頭企業。   中國mcu公司排名四——深圳愛思科微電子有限公司   公司TCL集團與國有政策性投資機構(北京國投)共同投資興建,是國家「九0九」工程集成電路設計公司。
  • app開發和小程序開發的區別是什麼,西安軟體開發公司
    現在是移動網際網路營銷時代,很多企業都通過app和微信進行品牌推廣,如今人們的手機上裝了很多的app,娛樂的,工作的,聽音樂的,看視頻的等等,開發一款app需要很多的費用,價格幾萬到幾十萬不等,很多企業看到開發價格就望而卻步了。
  • Python開發簡單爬蟲【學習資料總結】
    開發爬蟲步驟 python語言基礎:(帶你熟悉python語言的特性,學會使用python開發環境,使用python開發一些簡單的案例)
  • 兩者有什麼區別?需要什麼開發環境?
    但是它們的程序設計哲學卻差別很大,C是問題來適應語言;C++是語言適應問題;所以也可以說是兩種語言。 至於先學C還是先學C++,專家也意見不一,主要是因為:相對打基礎來說,彙編無疑是重要的,但 畢竟太生澀,所以C是最好的選擇,而且不論何種語言,算法仍然是核心,而C最適合培養算法素養。
  • 如何學習Linux,需要找培訓機構嗎?我們來聊一聊
    如何學習Linux,需要找培訓機構嗎?對應的學習方法:計算機愛好者:對linux感興趣,想了解熟悉一下,推薦拍一本Linux的入門書籍或者找對應的電子書學習一下,也可以網上找一些基礎的公開課學習。開發人員:開發工作中需要用到Linux,了解linux的基礎操作的話同上;如果你涉及到Linux方向的開發,那麼就要學習linux的一些系統原理,找一些linux系統原理和內核的書籍或教程。
  • 有關arm彙編中的align
    經常會看到arm-linux彙編中有如下的指令:.arm-linu是按照2^n的方案對齊的,需要說明的是這個對齊和ld-script裡的對齊不同,不是一會事。For other systems, including the i386 using a.out format, and the arm and strongarm,it is the number of low-order zero bits the location counter must have after advancement.
  • arm linux上建立nfs文件系統
    nfs文件系統建立(主機ip地址為192.168.3.170,開發板ip地址為192.168.3.100)1.安裝 nfs-kernel-server# sudo aptitude install nfs-kernel-server2、設置主機共享目錄,我就直接用根目錄,編輯文件/etc/exports,增加以下內容/home/puke/arm
  • ZYNQ Linux作業系統移植四個部分說明文檔
    二、啟動過程 移植作業系統後zynq的啟動過程如下,首先加載bootrom(zynq中自帶,用戶無法修改),然後執行fsbl(這個根據硬體在sdk中創建),然後執行uboot,uboot會將kernel、devicetree和ramdisk載入ddr,跳轉到內核入口處執行,這樣linux
  • 一文看懂arm架構和x86架構有什麼區別
    本文主要介紹的是arm架構和x86架構的區別,首先介紹了ARM架構圖,其次介紹了x86架構圖,最後從性能、擴展能力、作業系統的兼容性、軟體開發的方便性及可使用工具的多樣性及功耗這五個方面詳細的對比了arm架構和x86架構的區別,具體的跟隨小編一起來了解一下。
  • MCU單片機主流晶片公司有哪些_十大主流MCU單片機公司匯總
    十大主流MCU單片機公司匯總   1、瑞薩電子(Renesas)   瑞薩是MCU領域的王者,絕對的領頭羊,他們是由瑞薩、NEC、三菱這三家公司組成的mcu   該公司有自己架構的單片機,叫PIC,分別有PIC8 PIC16 PIC32 等系列 ,pic單片機也有採用mips的microAptiv內核 ;還有一個系列的產品是傳統8051/80c51產的mcu。公司mips合作,用mips的內核做mcu而跟ARM對抗,所以他們沒有基於ARM架構的MCU。
  • 《Linux就該這麼學》與《鳥哥的linux私房菜》哪個更適合初學者?
    時不時在一起聚會中也會說到一些關於linux的話題,談及關於linux「升級」話題時,一致的表示linux是一個「先苦後甜」系統。學習使用的時候非常難,但是一旦學習成功,那就是步入一馬平川之境界。針對於小白如何變成linux「最強王者」,根據朋友們的說法,總結給大夥一下建議:建議一:萬丈高樓平地起祖國古語「萬丈高樓平地起」,強調的就是基礎,一切偉大的工程起源必須有堅固無比 的地基。T:那麼對於linux來說什麼是基礎呢?S:命令?T:對!就是Linux命令!
  • Kali-Linux 2020.2,深、淺色主題,PowerShell元支持,ARM升級
    這意味著,如果在系統安裝配置過程中選擇安裝這個元包,或者在Kali啟動並運行後,通過命令:sudo apt install -y kali-linux-large安裝 kali-linux-large 軟體包;如果PowerShell與當前的系統架構兼容,就可以直接跳轉到pwsh。
  • Linux作業系統你真的了解嗎?
    這家看一下圖中的linux發行版的幾個重要分支,實際上Linux發行版有很多種因為它是開源的,所以我這個小電腦屏幕上是根本不足以顯示出全部的發行版本的。那麼我們怎麼去理解發行版之間的區別的,很簡單比方說安卓小米版,安卓華為版,安卓VO版等等。它就是在作業系統內核kernal上拓展了一些其他的東西,這就是Linux發行版。