初識 Arm 處理器

英國ARM公司是全球領先的半導體知識產權(IP)提供商。全世界超過95%的智能手機和平板電腦都采用ARM架構。ARM設計了大量高性價比、耗能低的RISC處理器、相關技術及軟件。2014年基于ARM技術的全年全球出貨量是120億顆,從誕生到現在為止基于ARM技術的芯片有600億顆 [2] 。技術具有性能高、成本低和能耗省的特點。在智能機、平板電腦、嵌入控制、多媒體數字等處理器領域擁有主導地位。

現在的嵌入式開發大部分都是ARM處理器了,從MCU級別的M0,M3,M4,M23,M33,到MPU級別的ARM9,ARM11,ARM-A5x,ARM-A7x。

📢 1991 年,ARM 公司成立于英國劍橋,主要出售芯片設計技術的授權。
ARM公司是蘋果、諾基亞、Acorn、VLSI、Technology等公司的合資企業。

產品有A,R,M三個系列,和ARM名字重合,funny。

1. ARM 處理器的分類

1.1 按系列分類

  • Cortex-M系列(通用微處理器)

    包括Cortex-M0、M3、M4,新的M23,M33,以及早期的ARM7TDMI,這類處理器一般不跑操作系統,或者只跑個RTOS

  • Cortex-R系列(實時微處理器)

    這類處理器可以認為是在Cortex-M的基礎上增強了實時性能,用于高安全,高實時的場合。

  • Cortex-A系列(帶MMU的處理器)

    包括Cortex-A5,A7,A9,到現在的A5x,A7x,以及早期的ARM9,ARM11。這類處理器一般跑Linux,安卓之類的帶內存管理功能的操作系統,利用這類操作系統的強大功能去實現復雜的應用。

1.2 按指令集分類

  • V4 指令集

    ARM7TDMI、ARM9TDMI、Intel StrongARM

  • V5 指令集

    ARM926EJ、Intel XScale

  • V6 指令集

    ARM11,M0

  • V7 指令集

    ARM-A系列中的32位,M3,M4,M7

  • V8 指令集

    ARM-A系列中的64位,M23,M33,M55,A系列32位用V8的比較少,但也有。

在這里插入圖片描述

1.3 按硬件浮點分類

這種分類有些牽強,但是和編譯器有較大關系,幾種之間不兼容,所以這里單獨列一下。

  • 無硬件浮點單元

    浮點運算通過軟件完成,低端的M0,M3,M23;部分A系列的都沒有。對應浮點編譯選項為 soft

  • 有硬件浮點單元,但是傳參數用普通寄存器傳

    編譯器后綴有 el 的對應這種形式,對應浮點編譯選項為 softfp,這種形式的產品比較少,后面會詳細說明。

  • 有硬件浮點單元,傳參數也用浮點單元的寄存器傳

    編譯器后綴有 hf 的對應這種形式,對應浮點編譯選項為 hard

    32位CPU帶硬件浮點運算功能的大部分都是這種。

    64位CPU都帶硬浮點,也是這種。

2. ARM 編譯器的分類

交叉編譯就是在一種平臺上編譯出能運行在體系結構不同的另一種平臺上的程序,比如在PC平臺(X86 CPU)上編譯出能運行在以ARM為內核的CPU平臺上的程序,編譯得到的程序在X86 CPU平臺上是不能運行的,必須放到ARM CPU平臺上才能運行,雖然兩個平臺用的都是Linux系統。 交叉編譯工具鏈是一個由編譯器、連接器和解釋器組成的綜合開發環境,交叉編譯工具鏈主要由binutils、gcc和glibc三個部分組成。有時出于減小 libc 庫大小的考慮,也可以用別的 c 庫來代替 glibc,例如 uClibc、dietlibc 和 newlib。

  • 免費版目前有三大主流工具商提供,第一是GNU(提供源碼,自行編譯制作),第二是 Codesourcery,第三是Linora。
  • 收費版有ARM原廠提供的armcc、IAR提供的編譯器等等,這些價格都比較昂貴

交叉編譯工具鏈的一般命名規則為:arch [-vendor][-os] [-(gnu)eabi]

  • arch - 體系架構,如ARM,MIPS

  • verdor -工具鏈提供商

  • os - 目標操作系統

  • eabi - 嵌入式應用二進制接口

    ABI:二進制應用程序接口(Application Binary Interface (ABI) for the ARM Architecture)。在計算機中,應用二進制接口描述了應用程序(或者其他類型)和操作系統之間或其他應用程序的低級接口。

    EABI:嵌入式ABI。嵌入式應用二進制接口指定了文件格式、數據類型、寄存器使用、堆積組織優化和在一個嵌入式軟件中的參數的標準約定。開發者使用自己的匯編語言也可以使用 EABI 作為與兼容的編譯器生成的匯編語言的接口。

    兩者主要區別是,ABI是計算機上的,EABI是嵌入式平臺上(如ARM,MIPS等)。

2.1 arm-none-eabi編譯器

可以在下面這個網址下載:
https://developer.arm.com/tools-and-software/open-source-software/developer-tools/gnu-toolchain/gnu-rm/downloads

這種編譯器的名字中沒有包含操作系統的信息,所以這種編譯器用于編譯裸機或者使用RTOS的程序,M0,M3之類的單片機都使用的是這種編譯器。
對應的64位為 aarch64-none-elf。

在這里插入圖片描述

2.2 arm-none-linux-eabi編譯器

可以在下面這個網址下載:如何區分
https://developer.arm.com/tools-and-software/open-source-software/developer-tools/gnu-toolchain/gnu-a/downloads

這種編譯器的名字中包含linux,所以這種編譯器用于編譯linux中的程序,32位編譯器一般默認都是軟件浮點。

對應的64位為aarch64-none-linux-eabi,64位編譯器默認都是硬件浮點。
在這里插入圖片描述

2.3 arm-linux-androideabi編譯器

顧名思義是安卓編譯器,64位為aarch64-linux-eabi

3. ARM編譯器和ARM架構相關的編譯選項

其實各芯片廠家提供的編譯器主要作用就是指定了下面這些選項的默認值(當然不僅僅是下面這些選項),使用戶使用起來更方便,不需要手動去指定了。

3.1 -mcpu和-march

  • -mcpu用于指定cpu的類型,例如cortex-a7,cortex-a9,cortex-a53,cortex-a73之類的。
  • -march用于指定cpu的指令集,例如armv6,armv7。

一般都是直接指定-mcpu,編譯器能正確推斷出-march的值。

3.2 -mfloat-abi和-mfpu

-mfloat-abi用于指定軟浮點還是硬浮點

  • soft:軟浮點
  • softfp:硬件浮點但是參數傳遞使用普通寄存器,中斷的時候,只需要保存普通寄存器,中斷負荷小,但性能較差,參數需要轉換成浮點的再計算。
  • hard:硬浮點并且參數傳遞使用硬浮點寄存器,省去了轉換,性能最好,但是中斷負荷高。

一般armv5的CPU是soft,armv6以上的是hard,softfp的比較少

注意:不同mfloat-abi編譯出來的庫一般不兼容,所以整個linux系統中所有程序和庫的mfloat-abi應該保持一致。

  • -mfpu用于指定硬浮點的類型,可以是vfp,vfpv3,neon-vfpv4。

一般32位CPU選擇vfp或者vfpv3,64位CPU選擇neon-vfpv4,或者直接不選擇,讓編譯器根據CPU選擇默認值即可。不同mfpu選項應該是能兼容的,這個沒測試,印象中是可以的,只要CPU本身有相應的硬件支持就行。

3.3 通過-print-multi-lib選項,可以查看編譯器支持的選項

在這里插入圖片描述

3.4 通過readelf -a命令,查看程序和庫對應的編譯選項

在這里插入圖片描述

4. 什么是Arm開發板?

一般來說再采購Arm嵌入式板卡的時候會涉及 核心板開發板

  • 如何區分核心板:CPU + 內存 + FLASH + 電源 + IO接口 等等
  • 開發板:SD卡 + 網口 + HDMI + 串口 + USB 等等

開發板有時也被叫做 底板。購買商家提供的開發板會比較貴,一般前期測試會使用,后期只是購買核心板,然后自行開發底板(開發板)。

5. 其他

  1. 如何區分arm支持32位還是64位

    一般我們通過從指令集來區分,從ARMv3到ARMv7支持32位空間和32位算數運算。

    2011年發布的ARMv8-A架構添加了對64位空間和64位算術運算的支持。

    總結常見的:

    1. armv8是64位的,也可以叫 aarch64
    2. armv7是32位的
  2. armv7、armv7l和armv7hl有什么區別?

    armv7l中的 l 代表Little-Endian,與之對應的就是Big-Endian,含義是字節序

    • Little-Endian就是低位字節排放在內存的低地址端,高位字節排放在內存的高地址端。
    • Big-Endian就是高位字節排放在內存的低地址端,低位字節排放在內存的高地址端。

    armv7hl中的 h 代表hard-float,指浮點運算直接由CPU(APU)完成,而不用通過軟件庫編譯成定點算法實現,對應的是soft-float。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/535956.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/535956.shtml
英文地址,請注明出處:http://en.pswp.cn/news/535956.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

模擬神器之QEMU

1. 簡介 QEMU(quick emulator)是一款由法布里斯貝拉(Fabrice Bellard)等人編寫的免費的可執行硬件虛擬化的(hardware virtualization)開源托管虛擬機(VMM)。 QEMU 是一個托管的虛擬…

X86_64平臺運行Arm docker容器

QEMU是什么 QEMU是一個通用的開源的跨平臺仿真模擬器,提供user和system兩種模式。其模擬的作用可是可以模擬在特定的體系結構下的應用的執行或者構建,比如在x86的體系結構的操作系統上運行ARM的應用。 常見問題的場景 在ARM體系結構的硬件環境中安裝D…

Go 條件編譯

接觸過C/C++編程的應該一定知道條件編譯。通常為了滿足不同環境下使用不同的代碼,從而在編譯的時候進行選擇性的編譯,達到最佳的泛用性。 例如: #define WINDOWS #ifdef WINDOWS # include <windows.h> #elif defined LINUX # include <sys/types.h> # includ…

Boost Arm 交叉編譯

Boost Arm 交叉編譯 1. 源碼下載 下載地址&#xff1a;https://sourceforge.net/projects/boost/files/boost/ 這里下載 1.74.0 版本 然后解壓。 2. 配置 有些庫我們是不需要的&#xff0c;所以就不需要編譯&#xff0c;可以通過 -show-libraries 查看庫列表 vincentmsi-…

為什么Linux會開機黑屏?

有的童鞋由于工作的需要&#xff0c;或者想體驗一把無廣告的世界&#xff0c;會去嘗試使用Linux的發行版&#xff0c;但是經常被Linux拒之門外&#xff0c;甚至連系統到裝不上&#xff0c;當然這個現象也在越來越少&#xff0c;只有更多的人去使用它&#xff0c;它才會變的更好…

Golang跨平臺UI框架之Wails(一)

Golang作為后端、腳手架、API服務等很常見,但Go不僅僅局限于此,它的目標是星辰大海!本系列文章就開始講解如何使用Go來構建現代化的桌面級程序。 1. 初識Wails Wails 是一個框架,可使用 Go 和 Web 技術編寫桌面應用程序。我們先來欣賞一下美圖: Go官方是不支持寫帶有GUI…

Linux安裝NVIDIA顯卡驅動的正確姿勢

文章目錄Linux安裝NVIDIA顯卡驅動的正確姿勢什么是nouveau驅動&#xff1f;檢測NVIDIA驅動是否成功安裝集顯與獨顯的切換使用標準倉庫進行自動化安裝使用**PPA**倉庫進行自動化安裝使用官方的NVIDIA驅動進行手動安裝常見問題解決Linux安裝NVIDIA顯卡驅動的正確姿勢 可能想玩Li…

Linux安裝CUDA的正確姿勢

Linux安裝CUDA的正確姿勢 CUDA&#xff08;Compute Unified Device Architecture&#xff0c;統一計算架構&#xff09;是由NVIDIA所推出的一種集成技術&#xff0c;是該公司對于GPGPU的正式名稱。 透過這個技術&#xff0c;用戶可利用NVIDIA的GeForce 8以后的GPU和較新的Qua…

Linux升級內核的正確姿勢

Linux升級內核的正確姿勢 很多童鞋在玩耍linux發行版的時候&#xff0c;都會遇到各種各樣的問題&#xff0c;比如&#xff1a;網卡不能使用&#xff0c;亮度不能調節&#xff0c;觸摸板不能識別&#xff0c;藍牙不能使用等等&#xff0c;這些關系都和linux的內核有關系。 什么…

Ubuntu 18.04安裝NVIDIA(英偉達) RTX2080Ti顯卡

Ubuntu 18.04安裝NVIDIA&#xff08;英偉達&#xff09; RTX2080Ti顯卡 在安裝顯卡之前請先把ubuntu 18.04系統提前安裝好。 需要準備的資料&#xff1a; NVIDIA 驅動 下載驅動 驅動的下載地址&#xff0c;在此下載頁面選擇合適的顯卡&#xff0c;目前最新的顯卡驅動版本是…

Ubuntu18.04安裝cuDNN和Tensorflow的正確姿勢

文章目錄Ubuntu18.04安裝cuDNN和Tensorflow的正確姿勢一、檢查NVIDIA驅動是否安裝成功二、檢查CUDA是否安裝成功三、安裝cuDNN1. 確定版本2. 下載安裝包3. 解壓安裝4. 安裝libcupti四、安裝Tensorflow1. 確定版本2. 安裝pip3. 安裝Tensorflow4. 檢查是否正常運行五、錯誤解決1.…

HttpServletResponse應用 的 簡單介紹

HttpServletResponse是專門用于HTTP協議的ServletResponse接口&#xff0c;它用于封裝HTTP響應消息&#xff0c;允許操控HTTP協議相關數據&#xff0c;包括響應頭和狀態碼&#xff0c;支持Cookies和session跟蹤&#xff0c;HttpServletResponse也定義了一系列用于描述各種HTTP狀…

移動站應該嘗試百度MIP的五個原因

MIP 是什么&#xff1f;MIP 是百度在 2016 年提出的移動網頁加速器項目。 MIP 能做什么&#xff1f;MIP 能幫助站長和網站開發者快速搭建移動端頁面。 MIP 怎么加速&#xff1f;MIP 從前端渲染和頁面網絡傳輸兩方面進行優化&#xff0c;杜絕頁面渲染中的阻塞問題&#xff0c;…

Vim從理解到應用

1991 年&#xff0c;來自荷蘭的一名工程師 Bram Moolenaar 為了在他的Amiga計算機上復制Vi的功能&#xff0c;正式發布 了Vim的第一個版本。在當時無論誰也沒想到&#xff0c;這款軟件未來能在技術圈爆發出那么大的威力&#xff0c;為千千萬萬的工程師節省了無數時間&#xff0…

如何用百度MIP快速搭建體驗友好的移動頁面

在讀這篇文章之前&#xff0c;請確定你已經了解 MIP 定義及加速原理。如果不確定的話&#xff0c;可以到 MIP 官網了解。 改造前期準備和注意事項: 你可以選擇直接將原先的移動站點直接改成 MIP 站&#xff0c;也可以單獨再做一套 MIP 站點與移動站并存。 復雜的頁面暫不建議…

JAVA知識基礎(一):數據類型

在我們學習一門編程語言時&#xff0c;最先要了解的就是數據類型&#xff0c;而數據類型又都是抽象的概念&#xff0c;初學者理解起來比較困難&#xff0c;所以我們往往是先應用再理解&#xff0c;但是在本篇文章我決定用先理解再應用的方式嘗試一下&#xff0c;試試效果。 1、…

百度MIP移動頁面加速——不只是CDN

MIP 是用 CDN 做加速的么&#xff1f;準確答案是&#xff1a;是&#xff0c;但不只是。 MIP 全稱 Mobile Instant Pages&#xff0c;移動網頁加速器&#xff0c;是百度提出的頁面加速解決方案。MIP 從前端渲染和頁面網絡傳輸兩方面進行優化&#xff0c;杜絕頁面渲染中的阻塞問…

JAVA知識基礎(二):基本語法

本篇主要介紹JAVA的運算符、循環結構以及條件結構。 1、JAVA運算符 計算機的最基本用途之一就是執行數學運算&#xff0c;作為一門計算機語言的Java也提供了一套豐富的運算符來操縱變量。 JAVA運算符可以大致概括為幾類&#xff1a;算術運算符、關系運算符、位運算符、邏輯運…

JAVA知識基礎(三):修飾符

JAVA中根據修飾對象的不同可以分為類修飾符、方法修飾符、變量修飾符三類&#xff0c;其中每種修飾符又可以單獨分成兩類&#xff1a;訪問修飾符和非訪問修飾符。為了便于理解&#xff0c;本文以訪問和非訪問的角度展開。 1、訪問修飾符 訪問修飾符有四個&#xff1a;public、…

百度推出新技術 MIP,網頁加載更快,廣告呢?

MIP 項目在 2016 年年初正式發布&#xff0c;幫助移動頁面加速&#xff08;原理&#xff09;。內測數據表明&#xff0c;MIP 頁面在 1s 內加載完成。現在已經有十多家網站加入 MIP 項目&#xff0c;有更多的網站正在加入中。在MIP收到的反饋中&#xff0c;大部分都提到了廣告的…