亚洲av成人无遮挡网站在线观看,少妇性bbb搡bbb爽爽爽,亚洲av日韩精品久久久久久,兔费看少妇性l交大片免费,无码少妇一区二区三区

  免費(fèi)注冊 查看新帖 |

Chinaunix

  平臺 論壇 博客 文庫
最近訪問板塊 發(fā)新帖
查看: 4281 | 回復(fù): 4
打印 上一主題 下一主題

關(guān)于bootloader中的編譯地址、運(yùn)行地址和下載地址的問題 [復(fù)制鏈接]

論壇徽章:
0
跳轉(zhuǎn)到指定樓層
1 [收藏(0)] [報告]
發(fā)表于 2012-10-14 14:14 |只看該作者 |倒序瀏覽
這幾天偶然想到一個問題,一直想不通,所以在這里發(fā)帖請教各位大牛們,在使用bootloader時,我們常常需要和這3個地址打交道:編譯地址、運(yùn)行地址和下載地址,這里以U-boot為例子,使用的開發(fā)板是S3C2440,編譯地址是指各個具體開發(fā)板中board/開發(fā)板名/config.mk中指定,s3c2440是TEXT_BASE = 0x33F80000
這樣我們生成的uboot.bin文件中所有的函數(shù)地址就是在TEXT_BASE上做偏移,打開編譯好的根目錄下文件System.map,顯示如下:
  1. 33f80000 T _start
  2. 33f80020 t _undefined_instruction
  3. 33f80024 t _software_interrupt
  4. 33f80028 t _prefetch_abort
  5. 33f8002c t _data_abort
  6. 33f80030 t _not_used
  7. 33f80034 t _irq
  8. 33f80038 t _fiq
  9. 33f80040 t _TEXT_BASE
  10. 33f80044 T _armboot_start
  11. 33f80048 T _bss_start
  12. 33f8004c T _bss_end
  13. 33f80050 t start_code
  14. 33f80104 t nandflash_boot
  15. 33f80140 t bad_nand_read
  16. .....
復(fù)制代碼
我的理解是Uboot中在C部分的函數(shù)調(diào)用都是以絕對地址來進(jìn)行的,因為uboot關(guān)閉了MMU,沒有提供虛擬地址,所有的函數(shù)調(diào)用是以絕對地址來執(zhí)行,調(diào)用那個函數(shù)就到上表中對應(yīng)的地址中去尋找(start.S中除外,那里的函數(shù)調(diào)用是以b和bl調(diào)用,那是一種相對地址調(diào)用),我所說的是C語言的部分,所以在實際中,編譯地址和下載地址需要一致,這樣C語言中的調(diào)用才能找到對應(yīng)的函數(shù)(因為函數(shù)調(diào)用是以絕對地址方式調(diào)用)。
這種理解方式解釋了為什么uboot的編譯地址和下載地址須一致的問題,你可以做實驗,編一個可在SDRAM中直接運(yùn)行的U-boot,但是下載地址和編譯地址不一致,其結(jié)果就是程序飛了。
    但是另一種情況出現(xiàn)了,norflash是支持XIP的, uboot也可以支持在norflash中直接運(yùn)行,你可在對應(yīng)開發(fā)板的.h中添加宏
#define CONFIG_SKIP_LOWLEVEL_INIT   1
#define CONFIG_SKIP_RELOCATE_UBOOT  1
,再設(shè)置從norflash啟動即可,此時U-boot能否運(yùn)行,因為開發(fā)板送人了,以前測試時我記得是可以運(yùn)行的,請哪位有開發(fā)板的朋友幫忙驗證一下,如果能運(yùn)行,而norflash的地址從0開始,執(zhí)行函數(shù)調(diào)用時又去調(diào)用33fXXXXX處的函數(shù),那程序不是應(yīng)該crash掉嗎?如果不crash那么則說明函數(shù)調(diào)用是以相對地址方式的,如果是相對方式,編譯地址和下載地址可以不一致,但實際驗證是不行的,這樣矛盾產(chǎn)生了。
那位老兄幫忙解答一下????????????????????????????????????????????????????????????????????????
不勝感激!

論壇徽章:
0
2 [報告]
發(fā)表于 2012-11-18 16:01 |只看該作者
試著回答下:
如果想從flash運(yùn)行,地址應(yīng)該就是0x0, 這個時候不用開啟地址remap.
如果bootloader在flash中,有想從0x33xxxx運(yùn)行,應(yīng)該開啟remap功能.

remap和MMU應(yīng)該是兩個獨(dú)立的電路.

論壇徽章:
0
3 [報告]
發(fā)表于 2012-11-18 16:33 |只看該作者
知不知道bootload里有代碼搬運(yùn)這回事?

論壇徽章:
0
4 [報告]
發(fā)表于 2012-12-08 22:47 |只看該作者
本帖最后由 heyangya 于 2012-12-08 22:49 編輯

UBOOT對NOR FLASH和NAND FLASH分別進(jìn)行了不同的處理,可以看下匯編那塊的代碼。

論壇徽章:
0
5 [報告]
發(fā)表于 2013-02-24 00:32 |只看該作者
回復(fù) 3# HDU_rock

很久沒上了,我禁止了代碼搬移啊,#define CONFIG_SKIP_RELOCATE_UBOOT  1    從NOR Flash到SDRAM的代碼搬移就不會做了,我想測試的是我的代碼編譯地址是0x33f8000,不做代碼搬移能否在NOR Flash上執(zhí)行,其實就是測試,編譯地址和運(yùn)行地址不同能否執(zhí)行,我已經(jīng)知道答案了,答案是不能
您需要登錄后才可以回帖 登錄 | 注冊

本版積分規(guī)則 發(fā)表回復(fù)

  

北京盛拓優(yōu)訊信息技術(shù)有限公司. 版權(quán)所有 京ICP備16024965號-6 北京市公安局海淀分局網(wǎng)監(jiān)中心備案編號:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年舉報專區(qū)
中國互聯(lián)網(wǎng)協(xié)會會員  聯(lián)系我們:huangweiwei@itpub.net
感謝所有關(guān)心和支持過ChinaUnix的朋友們 轉(zhuǎn)載本站內(nèi)容請注明原作者名及出處

清除 Cookies - ChinaUnix - Archiver - WAP - TOP