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

2020-12-03 電子發燒友

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閱讀更多精彩內容

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

相關焦點

  • ARM-Linux開發與MCU開發的區別
    開發arm應用程式有兩種方法:一種是直接在arm晶片上開發應用程式,而不使用作業系統,也稱為裸機編程。這種開發方法主要應用於一些低端的arm晶片,其開發過程與單片機的開發過程非常相似,本文不作介紹。另一種是在ARM晶片上運行作業系統。對於硬體的操作,需要編寫相應的驅動程序。
  • ARM和Linux交叉開發環境的搭建過程
    例如:arm.1inux—gcc。交叉開發環境是指編譯、連結和調試嵌入式應用軟體的環境,它與運行嵌入式應用軟體的環境有所不同,通常採用宿主機/目標機模式。  1)GNU交叉工具鏈的下載  從ARM官方網站F載刪.arm.tinux.org.ak,可以從該站點下載2.95.3工具鏈:  ftp://tip.arm.Iinux.org.uk/pub/armlinux/toolehain/cross-2.95.3.tar.bz2  2)cross-2.95.3.tar.bz2包的安裝步驟
  • 嵌入式arm開發學習第三天
    arm開發學習第三天交叉編譯裸板程序:1.arm-cortex_a9-linux-gnueabi-gcc -nostdlib -c -o xxx.o xxx.c-c: 只編譯不連結-nostdlib: 不允許使用標準c庫內容2.arm-cortex_a9-linux-gnueabi-ld -nostartfiles
  • 淺析gcc、arm-linux-gcc和arm-elf-gcc的關係
    四、arm-linux-gccarm-linux-gcc 是基於 ARM 目標機的交叉編譯軟體,arm-linux-gcc 跟 GCC 所需的安裝包不同,但僅僅是名字不同而已,這是為什麼呢?arm-linux-gcc 使用 GNU 的 Glibc,而 arm-elf-gcc 一般使用 uClibc/uC-libc 或者使用 RedHat專門為嵌入式系統的開發的C庫newlib。只是所應用的領域不同而已,Glibc是針對PC開發的,uClibc/uC-libc是與Glibc API兼容的小型化C語言庫,實現了Glibc部分功能。
  • Ubuntu12.10 使用JLink連接開發板用arm-gdb調試ARM程序
    arm-linux-gnueabi-gcc-4.7         arm-linux-gnueabi-ld              arm-linux-gnueabi-readelfarm-linux-gnueabi-as              arm-linux-gnueabi-gcc-ar-4.7      arm-linux-gnueabi-ld.bfd
  • 如何在Linux系統中手動安裝arm-linux-gcc交叉編譯工具
    嵌入式開發少不了arm開發平臺。要編譯出能在arm平臺上運行的程序,必須使用交叉編譯工具arm-linux-gcc、arm-linux-ld、arm-linux-objcopy、arm-linux-objdump等。arm-linux-gcc是幹什麼的?gcc是linux系統下面用來將代碼編譯成一個可執行程序的手段。
  • arm-linux-gcc的安裝
    在X86電腦上開發的程序要在ARM系統上運行就必須使用交叉工具鏈arm-linux-gcc,linux系統上是沒有這個工具鏈的,為此必須自己下載安裝,安裝步驟為
  • linux上搭建stm32開發環境 vscode+gcc+stm32cubeMX 和 vscode+...
    :sudo apt-get install gcc-arm-none-eabisudo apt-get install gdb-arm-none-eabi  或 手動下載安裝:https://launchpad.net/gcc-arm-embedded/+download( 補充:VSCode的PlatformIO
  • Linux內核開發工具的介紹
    她對絕大部分內核開發者基本上是透明的,隱藏了大部分實現細節,有效地降低了開發者的負擔,能使其能專注於內核開發,而不至於花費時間和精力在編譯過程上。,則必須指定ARCH為arm(注意大小寫,須與arch/目錄下的arm一致),如:當然,也可以修改Makefile,將修改為ARCH ?
  • Linux 系統下ARM Linux交叉編譯環境crosstool工具
    一、使用別人編譯好的開發工具鏈本文引用地址:http://www.eepw.com.cn/article/201611/317983.htmcross-2.95.3.tar.bz2arm-linux-gcc-3.3.2.tar.bz2arm-elf-tools-20030314.sh。
  • 了解Linux安裝ARM交叉編譯器的步驟
    環境下的asm和c語言編譯器,生成的是可以在x86平臺上運行的可執行程序; 而在開發板上運行的程序則需要arm平臺專用的編譯器,也稱為交叉編譯器; 交叉編譯器可以由開發人員手工定製,也可用使用別人已經編譯好的,比如arm-linux-gcc; (1)安裝交叉編譯器 -- $>cd /home/zhang/tools/
  • 嵌入式linux新手入門手記-準備qt5.4.1開發平臺
    /qtbase/mkspecs/linux-arm-gnueabi-g++/qmake.conf。mkspecs目錄下有很多的保存.conf文件的目錄,分別對應不同的作業系統和交叉編譯平臺,我這裡使用linux-arm-gnueabi-g++平臺的配置文件進行交叉編譯。
  • Linux Lab 推出十大精彩使用案例
    C 語言開發裡頭已經安裝好了必備的編輯器 vim 和編譯器 gcc,可以直接上手 C 語言開發。的也不在話下:ubuntu@linux-lab:/labs/linux-lab/examples/assembly/arm$ cat arm-hello.s.datamsg: .ascii "Hello, ARM!
  • 單片機開發與Linux開發有何不同?
    針對ARM-Linux程序的開發,主要分為三類:應用程式開發、驅動程序開發、系統內核開發,針對不同種類的軟體開發,有其不同的特點。ARM-Linux:由於採用ARM晶片,執行效率高,功能強大,外設相對豐富,是功能強大的計算機系統,並且需要運行作業系統,所以其啟動方式和單片機有較大的差別,但是和家用計算機的啟動方式基本相同。
  • Arm Linux Kernel 構建 情景分析
    命令:# CROSS_COMPILE 的值根據自己情況設定make ARCH=arm CROSS_COMPILE=arm-linux-androideabi-這條命令做了什麼呢,把 make 輸出到控制臺的信息貼出來(省略中間相似的信息):make ARCH=arm CROSS_COMPILE
  • Linux 對 ARM 的支持一團糟
    當硬體製造商正在談論基於ARM晶片的伺服器時, 支持ARM的軟體還要繼續努力開發以跟上發展步伐。LINUX越來越普 及,ARM晶片必須讓自己在這個系統上工作得更有效率。
  • 移植SSH到ARM Linux開發板成功
    一個月之前遇到問題沒有找到-lgcc_s的問題一直沒有解決,以致後來非常影響開發進度。最近決心解決這個問題,在google上查到沒有找到lxx其實時沒有找到libxxx.so,然後與友善2440比較了下,發現果真是arm-none-linux-gnueabi/libc/lib下缺少libgcc_s.so。最後一步問題總結是我編譯的時候遇到等所有問題,後一一化解,成功移植。
  • 玄鐵910與ARM_arm彙編 - CSDN
    提醒:本文已有自動構建的項目支持,請移步到:再續【從零使用qemu模擬器搭建arm運行環境】為什麼會有這篇文章早在2011年的時候,跟當時同事一起討論,做Linux系統開發正處於整個Linux開發中間層,沒有上層的C/C++業務和資料庫的開發經驗,也沒有底層的內核和驅動開發經驗,到底路該如何走
  • 嵌入式arm開發學習第五天
    嵌入式arm學習第五天相關概念: i:輸入 o:輸出 clk:時鐘 src:源 div:分頻/降頻 inv:翻轉 invert sel:選擇 slave:外設 master:cpucpu通過uart串口訪問上位機流程:
  • Linux Lab 發布 v0.2-rc2,支持實時 Linux v5.2 開發
    Linux Lab 是一套用於 Linux 內核學習、開發和測試的即時實驗室,可以極速搭建和使用,功能強大,用法簡單!