u boot中重定位

2021-07-10 12:18:58 字數 497 閱讀 1255

在學習 u-boot的時候,對程式重定位不理解,不知道為什麼要進行重定位,在網上查詢資料學習了一下。

首先,要了解一下乙個程式的生成的四個步驟:預處理、編譯、彙編、鏈結。經過這四步,最終才生成可執行檔案bin檔案。預處理主要是巨集定義的展開,編譯主要是進行語法此分析,如我們常見的語法錯誤,某些函式未定義或者某個變數沒有定義等,編譯結果生成了.s彙編檔案,彙編階段將.s檔案轉變成機器可以執行的檔案,鏈結階段通過呼叫鏈結器把程式執行需要的一系列檔案連線到一起,成為乙個可執行檔案。

上面說的重定位概念出自鏈結階段。我們知道程式的執行必須放到記憶體中,可執行檔案bin檔案中包含了程式執行的一系列檔案,這些檔案的組織關係由.lds檔案結構按照一定順序定義。程式執行時,必須位於它的鏈結位址處才能正確執行。所以,彙編檔案中的各個標號或者c檔案中的各個函式名,初始化化後的變數,未初始化後的變數都必須遵守lds檔案中定義。最終,當pc暫存器指標被賦予正確的值以後,就能在正確的位置能取出**並執行,這一步必不可少。

uboot 重定位 nand norflash啟動

nand flash啟動 cpu無法給nand flash傳送指令,因此無法從nand flash中取指令的。那麼上電後,為啥依然可以從nand flash中啟動uboot呢?1.硬體會自動將nand flash的 前4k拷貝到sram 片內記憶體,steppintstone 中。cpu從sram的...

關於C 中的重定位

標準庫定義了4個io物件,處理輸入時使用命名為cin的istream型別物件,這個物件也成為標準輸入。處理輸出時使用命名為cout的ostream型別物件,這個物件也稱為標準輸出。標準庫還定義了另外兩個ostream物件,分別命名為cerr和clog。cerr物件又叫標準錯誤,通常用來輸出警告和錯誤...

共享可寫節包含重定位 理解重定位

一 段的概念 段是程式的組成元素。將整個程式分成乙個乙個段,並且給每個段起乙個名字,然後在鏈結時就可以用這個名字來指示這些段,使得這些段排布在合適的位置。乙個程式通常包含以下五個段 段 text 存放 指令 唯讀資料段 rodata 存放有初始值並且const修飾的全域性類變數 全域性變數或stat...