完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>
標簽 > OR1200
or1200主要是GNU開發工具鏈的安裝,有了GNU工具鏈提供的工具,我們可以在Linux環境下將匯編、C代碼編譯成OR1200平臺的可執行代碼,這就是交叉編譯的過程。
OR1200主要是GNU開發工具鏈的安裝,有了GNU工具鏈提供的工具,我們可以在Linux環境下將匯編、C代碼編譯成OR1200平臺的可執行代碼,這就是交叉編譯的過程。有了OR1200的可執行代碼,就能夠在OR1200模擬器OR1KSim中運行該可執行代碼,觀察其是否如預期那樣執行。
在介紹GNU開發工具鏈之前簡單說明交叉編譯的概念,在嵌入式開發中,開發平臺與運行平臺往往是不同的,這是因為運行平臺上一般都資源有限,不能夠安裝編譯開發環境,因此需要在其他性能更好的平臺上安裝編譯環境,比如我們常在x86的平臺上開發OR1200、ARM的應用程序,但是x86與OR1200、ARM是不同的處理器體系結構,也就是處理器的指令集不同,那么就需要x86上的編譯器編譯得到能夠在OR1200、ARM架構下執行的目標代碼,這就是交叉編譯。圖2.1顯示x86平臺與OR1200平臺上“寄存器相與”指令對應不同的二進制編碼。
or1200開發環境的安裝
主要是GNU開發工具鏈的安裝,有了GNU工具鏈提供的工具,我們可以在Linux環境下將匯編、C代碼編譯成OR1200平臺的可執行代碼,這就是交叉編譯的過程。有了OR1200的可執行代碼,就能夠在OR1200模擬器OR1KSim中運行該可執行代碼,觀察其是否如預期那樣執行。
在介紹GNU開發工具鏈之前簡單說明交叉編譯的概念,在嵌入式開發中,開發平臺與運行平臺往往是不同的,這是因為運行平臺上一般都資源有限,不能夠安裝編譯開發環境,因此需要在其他性能更好的平臺上安裝編譯環境,比如我們常在x86的平臺上開發OR1200、ARM的應用程序,但是x86與OR1200、ARM是不同的處理器體系結構,也就是處理器的指令集不同,那么就需要x86上的編譯器編譯得到能夠在OR1200、ARM架構下執行的目標代碼,這就是交叉編譯。圖2.1顯示x86平臺與OR1200平臺上“寄存器相與”指令對應不同的二進制編碼。
圖2.1 x86平臺與OR1200處理器“寄存器相與”指令的二進制編碼是不一樣的
因此我們在x86上開發程序的時候就需要針對不同的目標平臺使用不同的編譯工具,從而得到可以在目標平臺上執行的二進制代碼。在這方面GNU工具鏈是一個很好的選擇。GNU工具鏈 (GNU Toolchain) 是一組用于開發應用程序和操作系統的編程工具的集合,這些工具構成了一個完整的系統,最重要的是其支持多種目標平臺,其中就包括本書要介紹的OR1200。
GNU工具鏈包括GCC、Glibc、GDB、GNU Binutils。
1、GCC
GCC(GNU Compiler Collection)主要的工具包括cpp、g++、gcc、gcov、gprof等。其中cpp是C預處理器,主要用于在編譯C、C++或Objective-C源代碼之前對它們進行預處理,由編譯器自動調用。g++和gcc可以認為分別是C++和C編譯器。
2、Glibc
Glibc(GNU libc)是GNU的C標準庫,Glibc是移植GNU工具鏈時一個不可或缺的部分。Glibc主要由兩部分組成,一部分是頭文件,另一部分是庫的二進制文件,包括動態和靜態兩個版本。有了Glibc就可以使用C語言開發程序。
3、GDB
GDB(GNU symbolic debugger)是一個功能很強大的調試工具,可以讓用戶調試一個程序,包括讓程序在希望的地方停下,此時,用戶可以查看變量,寄存器,內存及堆棧,而且可以修改變量及內存值。
4、GNU Binutils
GNU Binutils(Binary Utilities) 是一組二進制工具集,用來編譯、測試和分析軟件。其中主要的兩個工具是as和ld。as是GNU匯編器,通常也稱為GAS(GNU Assembler),ld是GNU鏈接器,as對GCC的輸出文件進行匯編產生目標文件,然后由ld鏈接目標文件、重定位數據,從而產生可執行文件。此外,GNUBinutils還包括其它一些工具,如下:
(1)addr2line:用于將程序中的地址對應到文件名和相應的行號。給定一個地址和一個可執行文件,addr2line使用可執行文件中的調試信息來確定該地址所對應的文件和行號。
(2)ar:用于建立、修改和提取檔案文件 (archives)。檔案文件經常被用作庫文件,保存程序常用的函數過程。
(3)c++filt:C++和Java中都有重載函數的特性,編譯器要區分重載函數,就需要對函數標識符進行編碼轉換成一個匯編級別的標簽 (label),這個過程稱為名字改編 (name mangling) 或名字修飾 (name decoration)。而c++filt所執行的就是這個過程的逆過程。
(4)dlltool:用于創建Windows動態鏈接庫。
(5)ld:是鏈接器,編譯程序最后是調用ld,把目標文件和歸檔文件鏈接在一起,重定位數據并鏈接符號引用。
(6)gold:是一種比ld更快,但只針對ELF文件格式的鏈接器。
(7)nm:用于列出二進制文件 (包括庫文件和可執行文件) 中的符號,這些符號可以是函數、全局變量、靜態變量等等。
(8)objcopy:用于將一種格式的目標文件復制成另外一種格式。
(9)objdump:用于列出關于二進制文件的各種信息。
(10)ranlib:用于為檔案文件生成索引信息,這樣可以提高檔案文件的訪問速度。
(11)readelf:類似于objdump,但是它只能處理ELF格式的文件,并且沒有使用GNU BFD庫。
(12)size:用于列出目標文件或者檔案文件各段的大小。
(13)strings:用于列出目標文件中的可打印字符串。
(14)strip:用于移除目標文件中的符號,以減少程序文件的大小,這對于嵌入式系統比較有用。
GNU工具鏈可謂博大精深,功能全面,諸位讀者不要驚慌,本書不是一本介紹GNU工具鏈的書,只是使用到了其中一點工具(實際只有as、ld,因為測試代碼都是用匯編寫的),所以不懂GNU工具鏈沒有關系,筆者會在使用到其中工具的時候做一個簡單介紹,這就足夠了。
針對目標平臺OR1200的GNU工具鏈,有三種安裝方法:
方法一:下載源文件,在Linux環境下自行編譯
方法二:下載編譯好的針對OR1200處理器的GNU工具鏈,可在Linux環境下安裝使用
方法三:下載一個Ubuntu的虛擬機文件,里面安裝好了針對OR1200處理器的GNU工具鏈
方法一筆者試過,容易出問題,而且比較耗時,當然對GNU工具鏈有著強烈興趣的朋友可以嘗試。方法二筆者沒用過。方法三簡單直接,速度快,不易出錯,而且基本都是Windows下的操作,適合新手,所以建議使用方法三,本書也只介紹方法三。
在瀏覽器中輸入地址:ftp://openrisc.opencores.org/virtualbox-image/,FTP的用戶名和密碼都是openrisc,登錄后會出現如圖2.2所示界面。
圖2.2 Ubuntu虛擬機鏡像下載
下載最新的那個文件就可以了,筆者使用的是2011-12-15版。下載完成后解壓該文件,大約4GB左右。此時還需要下載VisualBox以打開該文件。VisualBox是一款開源的虛擬機軟件,本書使用的是4.1.22版。下載完成后安裝VisualBox,安裝完成后打開VisualBox,界面如圖2.3所示。
圖2.3 VisualBox主界面
點擊“新建”出現“新建虛擬機”向導,點擊“下一步”,出現如下界面:
圖2.4 新建虛擬機設置一
此處操作系統選擇Linux,版本選擇Ubuntu,點擊下一步,設置內存大小,如圖2.5所示。
圖2.5 新建虛擬機設置二
內存大小依據個人情況設置,本人設置的是512M,已經夠用了,畢竟我們需要編譯的程序都是十分簡單的,點擊下一步,選擇“使用現有的虛擬硬盤”,然后選擇解壓后的虛擬機文件。
圖2.6 新建虛擬機設置三
點擊“下一步”,VisualBox會將用戶剛才的設置都列出來,確認無誤后,點擊“創建”,這樣虛擬機就創建好了。啟動虛擬機,顯示如圖2.7所示。
圖2.7 Ubuntu虛擬機桌面
雙擊左邊的“終端”圖標,就可以打開終端,在終端中輸入or32-elf-,然后按兩次Tab鍵,會列出虛擬機中已安裝的針對OR1200平臺的所有編譯工具,如圖2.8所示。
圖2.8 Ubuntu中已安裝的編譯工具
可見之前介紹過的GNU工具鏈中的GCC、as、ld、gdb等都包括在內。這樣GNU工具鏈就安裝完成了。Ubuntu虛擬機提供的功能遠不止GNU工具鏈,還包括OR1K模擬器、用于硬件調試的OR_DEBUG_PROXY、OpenRISC平臺參考SoC設計ORPSoCv2,其中在本書的研究過程中需要使用到OR1K模擬器——OR1KSim,2.2.5節會介紹其使用方法。
最后,因為宿主機是Windows平臺,而且在后面仿真時使用的ModelSim也是Windows平臺的,為了方便文件的傳遞,這里需要設置虛擬機與宿主機的文件共享。打開VisualBox中虛擬機的設置界面,選擇“共享文件夾”,如圖2.9所示。
圖2.9 虛擬機與宿主機共享文件夾設置步驟一
點擊界面右邊的添加文件夾按鈕,出現如圖2.10所示界面:
圖2.10 虛擬機與宿主機共享文件夾設置步驟二
在其中選擇共享文件夾的路徑,設置名稱,參考如上設置,然后啟動虛擬機,打開終端,輸入命令:
[plain] view plain copysudo mount –t vboxsf UbuntuShareFolder /mnt/sharefolder
該命令的作用是將共享文件夾掛載在/mnt/sharefolder目錄下,sudo表示以Root用戶身份執行該命令,終端會提示輸入密碼,Ubuntu虛擬機默認Root用戶的密碼是openrisc。這樣就實現了虛擬機與宿主機的文件共享,對虛擬機而言共享文件放在/mnt/sharefolder路徑下,對宿主機而言共享文件放在圖2.10所示的E盤UbuntuShareFolder文件夾下。
編輯推薦廠商產品技術軟件/工具OS/語言教程專題
電機控制 | DSP | 氮化鎵 | 功率放大器 | ChatGPT | 自動駕駛 | TI | 瑞薩電子 |
BLDC | PLC | 碳化硅 | 二極管 | OpenAI | 元宇宙 | 安森美 | ADI |
無刷電機 | FOC | IGBT | 逆變器 | 文心一言 | 5G | 英飛凌 | 羅姆 |
直流電機 | PID | MOSFET | 傳感器 | 人工智能 | 物聯網 | NXP | 賽靈思 |
步進電機 | SPWM | 充電樁 | IPM | 機器視覺 | 無人機 | 三菱電機 | ST |
伺服電機 | SVPWM | 光伏發電 | UPS | AR | 智能電網 | 國民技術 | Microchip |
開關電源 | 步進電機 | 無線充電 | LabVIEW | EMC | PLC | OLED | 單片機 |
5G | m2m | DSP | MCU | ASIC | CPU | ROM | DRAM |
NB-IoT | LoRa | Zigbee | NFC | 藍牙 | RFID | Wi-Fi | SIGFOX |
Type-C | USB | 以太網 | 仿真器 | RISC | RAM | 寄存器 | GPU |
語音識別 | 萬用表 | CPLD | 耦合 | 電路仿真 | 電容濾波 | 保護電路 | 看門狗 |
CAN | CSI | DSI | DVI | Ethernet | HDMI | I2C | RS-485 |
SDI | nas | DMA | HomeKit | 閾值電壓 | UART | 機器學習 | TensorFlow |
Arduino | BeagleBone | 樹莓派 | STM32 | MSP430 | EFM32 | ARM mbed | EDA |
示波器 | LPC | imx8 | PSoC | Altium Designer | Allegro | Mentor | Pads |
OrCAD | Cadence | AutoCAD | 華秋DFM | Keil | MATLAB | MPLAB | Quartus |
C++ | Java | Python | JavaScript | node.js | RISC-V | verilog | Tensorflow |
Android | iOS | linux | RTOS | FreeRTOS | LiteOS | RT-THread | uCOS |
DuerOS | Brillo | Windows11 | HarmonyOS |