日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

【基础】ARM芯片上电取第一条指令流程

發布時間:2023/12/14 编程问答 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【基础】ARM芯片上电取第一条指令流程 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

轉載:ARM上電啟動及Uboot代碼分析

網上關于ARM的bootloader(以Uboot為例)的啟動順序的資料有好多,但是對于Uboot的地址映射、體系結構級操作介紹很少,都是直接開始Start.s代碼的閱讀。本文擬詳細分析Uboot從上電,到第一條指令的執行,同時分析代碼對于cache、TLB等部件的操作過程。

以下內容以u-boot-2012.04.01源碼為例,從網上很容易下載該版本。

1 ARM上電取第一條指令流程
1.1 上電后的第一條指令在哪里?
首先明確:對于ARM芯片,啟動時pc值由CPU設計者規定,不同的ARM CPU有不同的值,例如S3C2440芯片上電后PC值被硬件設計者規定為0x0;其他ARM芯片不一定是0x0。

第一章講述的上電取第一條指令過程以S3C2440為例,該芯片是ARMv4T架構,其他芯片在原理上類似。

S3C2440的啟動時讀取的第一條指令是在內存0x00地址處,不管是從nand flash還是nor flash啟動。

但是上電后內存中是沒有數據的,那么0x00地址處的指令是如何放進去的?針對不同的flash(nandflash、norflash),操作方式是不同的,下面講述從nandflash和norflash啟動的不同流程。

?

1.1.1 ?norflash和nandflash的異同
nandflash:價格低,容量大,適合大容量數據存儲,地址線和數據線共用I/O線,所有信息都通過一條線傳送,類比于PC的硬盤,

norflash:價格貴,容量小,適合小容量的程序或數據存儲,類似硬盤,但是能在其中運行程序;有獨立地址線、數據線

sdram:主要用于程序執行時的程序存儲、執行或計算,類比于PC的內存;

?

綜上:norflash比較適合頻繁隨即讀寫的場合,通常用于存儲代碼并直接在其中運行。nandflash用于存儲資料。

只要知道以上大概區別就行。以下說明ARM從兩種flash啟動方式的異同。

?

1.1.1.1 ?ARM從nandFlash啟動
若從nandflash啟動,上電后nandflash控制器自動把nandflash存儲器中的0——4K內容加載到芯片內的起步石(Steppingstone,起步石這個機制是處理器中集成的功能,對程序員透明),即內部SRAM緩沖器中,同時把內部SRAM的起始地址設置為0x0(不同的CPU上電后的PC值不盡相同,對不同的CPU該值也不盡相同),然后把這段片內SRAM映射到nGCS0片選的空間,進而CPU開始從內部SRAM的0x0處開始取得第一條指令,該過程全部是硬件自動完成,不需要程序代碼控制。

或許你有個疑問,為什么不能直接把nandflash映射到0x0地址處?非要經過內部SRAM緩沖?

答案是,nandflash根本沒有地址線,沒法直接映射,必須使用SRAM做一個載體,通過SRAM把剩余的nandflash代碼(即剩余的uboot啟動代碼)復制到SDRAM中運行。

若想從nandflash啟動,那么uboot最核心的代碼必須放在前4k完成。這4k代碼要完成ARM CPU的核心配置以及將剩余的代碼拷貝到SDRAM中(若從norflash啟動則沒有4k這個大小的限制,但是還會在完成最主要的設置后進入SDRAM中運行)。

?

1.1.1.2 ARM從norflash啟動
若從norflash啟動,則norflash直接被映射到內存的0x0地址處(就是nGCS0,這里就不需要片內SRAM來輔助了,所以片內SRAM的起始地址不變,還是0x40000000),然后cpu從0x00000000開始執行(也就是在Norfalsh中執行)。

??????需要說明的是,uboot代碼段(.text段)起始位置必須是與上電后PC值一致,即編譯uboot時,TEXT_BASE宏必須設置成0x0?,反匯編uboot文件后,文本段第一條指令的地址也是0.

總結:

1、從norflash還是從nandflash啟動,是由ARM的OM1和OM0引腳組合決定

2、不管從norflash還是nandflash啟動,S3C2440上電后的pc值為0x0

3、如果某芯片上電后PC值不是0x0,假如是0x38ff0000,那么從norflash啟動時,硬件就要自動將其映射到0x38ff0000地址處;如果從nandflash啟動,那么硬件就要自動將nandflash中的前4K內容加載到0x38ff0000地址處。

總結

以上是生活随笔為你收集整理的【基础】ARM芯片上电取第一条指令流程的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。