引用ARM開發,對entry point的含義

2020-12-21 電子產品世界

本文引用地址:http://www.eepw.com.cn/article/201611/317248.htm

從事了這麼久的ARM開發,對entry point的含義一知半解,今日再次拿出一本寫得還算不錯的ARM教材來翻,書中這一段僅僅是把英文手冊單純翻譯成中文,並沒有講到真正的實質。不是ARM公司手冊寫得不詳細,而是多數中文教材的編寫採用的方式是: english--華文 mapping,但英文手冊是有系列組織的suite,而書本往往翻譯自系列中的一篇,容易使得讀者管中窺豹。

摘要:ARM link的時候-entry 『行標號』 選項用於指定程序的入口地址,其實就是ICE把代碼load完之後自動跳入的地址,最後的程序中這個工作是由bootloader來完成的,當然bootloader也可以跳到別的入口地址去。幾乎所有的成品ARM晶片都有內置的bootloader,因此開發者看到的程序入口點就是entry point。對於FPGA上的ARM系統調試,ARM復位後跳轉到一個固化地址,就需要自己寫bootloader代碼並通過scatter加載到rom中(我們的EAS片上存儲器包括rom在內全部用FPGA的ram實現,tape out的時候bootloader代碼會被固化到chip的rom中)

1.entry point在編譯中的指定

看了make file,entry point的指定是在link的時候用命令行參數的方式告訴編譯器的,

armlink ... -Entry reset_handler

如果採用RVDS或ADS,工程屬性中有entry point選項可供設置,但最終還是作為參數傳遞給armlink。

這樣, 在連接ICE並loadimage之後,ICE會通過JTAG把代碼映像搬移到內存中,然後把當前PC指針指向reset_handler,但引出了一個問題:在最終的產品中不存在ICE和JTAG,ARM上電復位後跳向固化的復位地址,如0xFFFF0000,那麼由誰來讓PC指針指向我們指定的entry point呢?答案是:由bootloader代碼來完成,進一步引出2個問題:1,誰來生成bootloader?2,怎麼把bootloader定位到硬體復位地址?

2. 自己寫bootloader並通過scatter文件將之定位到硬體復位地址。

或許某些開發工具會自動的為我們生成bootloader,這裡介紹的是自力更生的方法。

首先介紹bootloader,這裡僅實現中斷向跳轉:

AREA Vect, CODE, READONLY ;編譯器偽指令,scatter根據這些屬性來組織程序映像

ENTRY ;這個entry和本文中的entry point是沒有關係的,它表示的是彙編程序代碼部分的開始

LDR PC, Reset_Addr

LDR PC, Undefined_Addr

LDR PC, SWI_Addr

LDR PC, Prefetch_Addr

LDR PC, Abort_Addr

NOP ; Reserved vector

LDR PC, IRQ_Addr

LDR PC, FIQ_Addr

Reset_Addr DCD Reset_Handler

Undefined_Addr DCD Undefined_Handler

SWI_Addr DCD SWI_Handler

Prefetch_Addr DCD Prefetch_Handler

Abort_Addr DCD Abort_Handler

IRQ_Addr DCD IRQ_Handler

FIQ_Addr DCD FIQ_Handler

Reset_Handler

LDR PC, =0x00000000;

然後是scatter文件:

ROM_LOAD 0x00000000

{

ROM_EXEC 0x00000000

{

* (InRoot$$Sections); 實現搬移scatter的代碼,編譯器自動生成

*(+RO) ; 除了bootloader的所有代碼段放這裡

}

D-TCM 0x00400000 0x003FFFFF

{

* (+RW,+ZI);這裡放所有的RW段(char ch=4;)和ZI段(char ch; ch會被初始化零)。

}

}

ROM2 0xFFFF0000

{

BOOTLOAD 0xFFFF0000

{

bootloader.o(+RO) ;bootloader的程序段放這裡

}

}

scatter也是在link的時候通過參數『-scatter 文件名』傳遞的。

3.總結

在以上條件下,比較使用ICE和最終產品中的啟動順序:當使用ICE調試時,ICE讀入映像文件,找到其中的scatter信息,通過JTAG把代碼段和數據段放到指定的位置,然後把PC設為-entry所指定的標號,這就是為什麼當我們loadimage之後看到的是在entry point中指定的行號所在的原始碼。當脫離ICE運行時,ARM上電後跳轉到硬體復位地址0xFFF0000 (ROM),我們已事先在那裡燒入了我們的bootloader,bootloder從外設中讀入加載映像文件(如片外nand,I2C,UART等)並放入scatter的加載域中(0x00000000),然後跳轉到0x000000,由於我們已在scatter中將InRoot$$Sections定位在那裡,所以它被執行,它負責把映像文件從加載域搬移到執行域中,然後跳轉到__main,__main是arm編譯器自動生成的,它負責清零ZI段和初始化C庫,最後__main跳向C代碼的入口main()

相關焦點

  • ARM平臺NEON指令的編譯和優化
    本文引用地址:http://www.eepw.com.cn/article/201611/317417.htm常用的編譯器選項配置自動向量化選項armcc編譯器使用--vectorize選項來使能向量化編譯,一般選擇更高的優化等級如-O2或者-O3就能使能--vectorize選項。
  • ARM-Linux開發與MCU開發的差別是什麼
    、驅動程序開發、系統內核開發,針對不同種類的軟體開發,有其不同的特點。今天我們來看看ARM-Linux開發和MCU開發的不同點,以及ARM-Linux的基本開發環境。 1. ARM-Linux應用開發和單片機開發的不同 這裡先要做一個說明,對於ARM的應用開發主要有兩種方式:一種是直接在ARM晶片上進行應用開發,不採用作業系統,也稱為裸機編程,這種開發方式主要應用於一些低端的ARM晶片上,其開發過程非常類似單片機,這裡不多敘述。
  • 有關arm彙編中的align
    經常會看到arm-linux彙編中有如下的指令:.align n它的含義就是使得下面的代碼按一定規則對齊,.align n 指令的對齊值有兩種方案,n 或 2^n ,各種平臺最初的彙編器一般都不是gas,採取方案1或2的都很多,gas的目標是取代原來的彙編器,必然要保持和原來彙編器的兼容,因此在gas中如何解釋 .align指令會顯得有些混亂,原因在於保持兼容。
  • 「armchair traveler」別理解成「坐輪椅旅行的人」
    大家好,歡迎來的餅哥英語的頻道,今天我們分享一個非常有用且地道的表達——armchair traveler, 這個短語的含義不是指「坐輪椅旅行的人」,其正確的含義是:armchair traveler 空談的旅行家(知道很多旅行知識的)
  • 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
  • Arm twisting tactics? 強制手段
    There’s a similar term to this, and that is 「strong arm」.As verb, if you strong arm your opponent, as if on the wrestling mat, you’re using an arm-twisting tactic in order to bend your opponent, to your will, or rather whim – people who use arm-twisting tactics
  • ARM板上掛載NFS文件系統
    開發環境主機Host:Windows XP sp3(32bit)本文引用地址:http://www.eepw.com.cn/article/201611/317272.htm客戶機Guest:VMware 7.01上安裝Debian LennyARM板Board:up-tech s3c2410 DVK1.1串口minicom
  • excel函數入門必學之相對引用,絕對引用和混合引用。
    小編今天與大家聊聊excel相對引用,絕對引用和混合引用,這是使用excel很常用很重要的部分,三種引用有不同的用法,如果用錯所求單元格會得到錯誤的結果。一、相對引用含義:如果在excel的默認狀態下複製公式,公式中引用的單元格與複製位置的單元格保持一致,進行了相應改變,公式中表現形式如:A1*A2。
  • point-to-multipoint
    point-to-multipoint 文章
  • ARM架構是什麼?為什麼連高通都離不開?
    本文引用地址:http://www.eepw.com.cn/article/201906/401175.htm  ARM是一家好很厲害的公司 ,ARM處理器是英國Acorn有限公司設計的低功耗成本的第一RISC微處理器。全稱為Advanced RISC Machine。
  • 常用ARM彙編指令
    在嵌入式開發中,彙編程序常常用於非常關鍵的地方,比如系統啟動時初始化,進出中斷時的環境保護,恢復等對性能有要求的地方。本文引用地址:http://www.eepw.com.cn/article/201611/322957.htmARM指令集可以分為六大類,分別為數據處理指令、Load/Store指令、跳轉指令、程序狀態寄存器處理指令、協處理器指令和異常產生指令。
  • 詞根系列|ARM 「weapon」
    詞根arm來源於拉丁名詞arma "weapons", 也可以來自拉丁動詞armare "to arm 武裝", From PIE root *ar- "to fit together停戰,休戰;休戰協議■拆: arm(to arm)+i+st(stand: 站立; 停止)+ice(n後綴) -> 休戰■GRE ■短語
  • 英語語法學習point at point to point out用法
    point to、point out、point at的意思:point at指較近的事物(可以接觸),point to指較遠的事物(不接觸),point out表示的是給某人指示方向,要點或錯誤等。point out意思是:指出.例:She pointed out to him the unfairness of his actions.
  • 2010年中考英語易混詞複習:point to point at point out
    point to point at point out  point to和point at都有「指向」之意,有時可以互換。  ①point to多指較遠距離的事物,to著重於指方向,主語既可以是人,也可以是物;  ②point at多指向較近距離的事物,at著重於指的對象,其主語通常是人;但point...at是「瞄準……」之意;③point out是「指出……」之意,out是副詞。
  • 【移民美國】美國旅行快速通關利器--Global Entry詳解(二)
    移居美國指南旨在用專業的知識為計劃或正在移民美國的同胞們提供真實有效的移居美國的信息與服務,謝謝大家在後臺對我們的支持,也請轉載我們文章的同行在引用時註明出處。所以如果是每年至少回一次國的話,申請global entry pass, 出關的時候就跟坐地鐵一樣刷卡就可以了,不用排長隊,不用接受海關的質詢,甚至都不用填海關申報單。不用見海關,無形中就大大減少了綠卡被取消的風險。如果你曾經有過害怕被海關盤問:為什麼這麼久都不在美國,就會明白不用見海關移民官時件多麼爽的事情。
  • 2019中考英語:易混詞複習---point to point at
    point to point at point out point to和point at都有「指向」之意,有時可以互換。 ①point to多指較遠距離的事物,to著重於指方向,主語既可以是人,也可以是物; ②point at多指向較近距離的事物,at著重於指的對象,其主語通常是人;但point...at是「瞄準……」之意;③point out是「指出……」之意,out是副詞。
  • android平臺arm指令學習和調試
    */一、Ndk下內聯彙編跟vc下一樣,ndk編譯環境下也能使用內聯彙編,如下:本文引用地址:http://www.eepw.com.cn/article/201611/317575.htmincludeintmy_thumb(intdummy)
  • Java之Map集合的第二種遍歷方式,使用Entry對象遍歷
    Map集合中的方法:Set<Map.Entry<K,V>>entrySet()返回此映射中包含的映射關係set視圖。 Set<Map.Entry<Integer,String>> set=map.entrySet(); //2.遍歷Set集合,獲取每一個Entry對象。
  • Cradlepoint為AT&T提供5G路由器設備
    近日,AT&T 宣布與Cradlepoint建立合作夥伴關係,Cradlepoint提供多種型號的「5G Evolution」路由器。這些路由器現在提供高速4G網絡,並承諾在未來支持更快的5G網絡。