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

  免費注冊 查看新帖 |

Chinaunix

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

學習uboot遇到的幾個問題,想請教一下大家 [復制鏈接]

論壇徽章:
0
跳轉(zhuǎn)到指定樓層
1 [收藏(0)] [報告]
發(fā)表于 2011-12-01 13:42 |只看該作者 |倒序瀏覽
最近在研究uboot,大概三個星期了,對uboot的執(zhí)行流程大致已經(jīng)了解了,但是中間還是有幾個問題一直搞不明白,

1 我們編譯好的uboot.bin文件是要燒寫到Nor Flash 或者 Nand Flash中去的,uboot.bin是不是就是純粹的代碼和數(shù)據(jù),已經(jīng)沒有別的輔助信息了。

2 這個uboot.bin和linux下的可執(zhí)行程序是不一樣的,linux下可執(zhí)行程序是ELF格式的,里面有很多輔助信息,如elf表頭,段屬性 等等,程序的執(zhí)行是通過裝載器對elf進行處理并進行裝載才可以運行的,
   而uboot.bin已經(jīng)可以理解為已經(jīng)經(jīng)過裝載的elf文件,里面就是可執(zhí)行的指令和一些數(shù)據(jù),因為Arm處理器本身沒有加載器

3 我們把uboot.bin燒寫到了Nor Flash 的開始處,即地址為0,Arm處理器復位以后會從0地址處進行取地址并執(zhí)行,這樣uboot就執(zhí)行起來了

4 如果生成uboot.bin的鏈接過程中基地址都定以為0,我認為這樣執(zhí)行uboot.bin沒問題,但是我看uboot鏈接過程基地址不是0地址處,這樣的話地址的重定位不久出錯了嗎?就是說一些指令在鏈接過程中地址重定位是并不是以0為基質(zhì),而我們燒寫uboot.bin去時在0地址處?

以上都是我的理解,希望大家指點

論壇徽章:
0
2 [報告]
發(fā)表于 2011-12-01 16:03 |只看該作者
回復 1# q631951221


    1 我們編譯好的uboot.bin文件是要燒寫到Nor Flash 或者 Nand Flash中去的,uboot.bin是不是就是純粹的代碼和數(shù)據(jù),已經(jīng)沒有別的輔助信息了。
是的,就是純粹的代碼(指令)和數(shù)據(jù)。


2 這個uboot.bin和linux下的可執(zhí)行程序是不一樣的,linux下可執(zhí)行程序是ELF格式的,里面有很多輔助信息,如elf表頭,段屬性 等等,程序的執(zhí)行是通過裝載器對elf進行處理并進行裝載才可以運行的,而uboot.bin已經(jīng)可以理解為已經(jīng)經(jīng)過裝載的elf文件,里面就是可執(zhí)行的指令和一些數(shù)據(jù),因為Arm處理器本身沒有加載器
可以這么理解。不過有點不太一樣的是,uboot.bin執(zhí)行的環(huán)境都是絕對地址,而linux下的elf被加載執(zhí)行,一般都是進程中的相對地址

3 我們把uboot.bin燒寫到了Nor Flash 的開始處,即地址為0,Arm處理器復位以后會從0地址處進行取地址并執(zhí)行,這樣uboot就執(zhí)行起來了
是的。就是cpu一點點執(zhí)行對應的指令。

4 如果生成uboot.bin的鏈接過程中基地址都定以為0,我認為這樣執(zhí)行uboot.bin沒問題,但是我看uboot鏈接過程基地址不是0地址處,這樣的話地址的重定位不久出錯了嗎?就是說一些指令在鏈接過程中地址重定位是并不是以0為基質(zhì),而我們燒寫uboot.bin去時在0地址處?
arm芯片剛上電后,是從0地址運行。
所以,我們首先要保證0地址有程序指令可以運行。所以我們把uboot.bin燒寫到起始地址位0的Nor Flash中。
而uboot中開始的一段代碼中,一般會由reload重載代碼,即把uboot本身自己的這段代碼,重新加載(uboot中執(zhí)行拷貝指令),拷貝到對應的鏈接所指定的基地址。
對應的uboot這段開始的代碼,是所謂的地址無關(guān)的PIC(position independent code)。
然后在重新執(zhí)行對應的代碼,執(zhí)行到那段reload代碼,經(jīng)過判斷,已經(jīng)是reload過了,就不會再重新reload,會繼續(xù)執(zhí)行后面的代碼。
而全部的代碼,是以某個基地址為基地址鏈接過的,所以后面的代碼執(zhí)行,也就是我們所希望的了。
一般reload,都是被reload到對應的內(nèi)存中。

更新關(guān)于初始化部分內(nèi)容,可以參考:
Uboot中start.S源碼的指令級的詳盡解析 v1.6
http://72891.cn/thread-2312785-1-1.html

論壇徽章:
0
3 [報告]
發(fā)表于 2011-12-01 19:31 |只看該作者
回復 2# crifan

嗯,謝謝了,證明我的理論是正確的就踏實多了,呵呵!我現(xiàn)在去看看你提供的網(wǎng)址

論壇徽章:
2
2015年亞洲杯之阿曼
日期:2015-03-23 18:11:212015亞冠之大阪鋼巴
日期:2015-09-07 13:54:16
4 [報告]
發(fā)表于 2011-12-01 23:17 |只看該作者
u-boot里面有一個很好用的地址
TEXT_BASE

論壇徽章:
0
5 [報告]
發(fā)表于 2011-12-02 11:29 |只看該作者
回復 4# CN薰様


    嗯 這個是鏈接時候重定位的基址

論壇徽章:
2
2015年亞洲杯之阿曼
日期:2015-03-23 18:11:212015亞冠之大阪鋼巴
日期:2015-09-07 13:54:16
6 [報告]
發(fā)表于 2011-12-08 11:59 |只看該作者
回復 5# q631951221


    u-boot有2種方式加載

1. u-boot存放在NOR flash中,這種是可以片上執(zhí)行的,例如powerpc,啟動時CPU直接跳轉(zhuǎn)到0x00000100或者0xFFFFF100或其他地址開始運行u-boot,此時u-boot會初始化CPU、SDRAM/DDR等,最后加載內(nèi)核和根文件系統(tǒng)。
2. u-boot存放在DataFlash/NANDFlash中。這種情況u-boot不能直接在flash中執(zhí)行,例如AT91RM9200。CPU內(nèi)部總會有一個很小的bootloader。這個bootloader會初始化CPU、SDRAM/DDR,然后將u-boot拷貝到SDRAM/DDR的某一個地址,在通過跳轉(zhuǎn)語句執(zhí)行u-boot。在這種情況下,u-boot會跳過low level init,而直接加載內(nèi)核和根文件系統(tǒng)。

論壇徽章:
0
7 [報告]
發(fā)表于 2011-12-09 16:19 |只看該作者
回復  q631951221


    u-boot有2種方式加載

1. u-boot存放在NOR flash中,這種是可以片上執(zhí)行的, ...
CN薰様 發(fā)表于 2011-12-08 11:59



    嗯

論壇徽章:
0
8 [報告]
發(fā)表于 2011-12-17 00:23 |只看該作者
回復  q631951221


    u-boot有2種方式加載

1. u-boot存放在NOR flash中,這種是可以片上執(zhí)行的, ...
CN薰様 發(fā)表于 2011-12-08 11:59



    之前聽老師講過,但是很少用就忘了,溫習了。
您需要登錄后才可以回帖 登錄 | 注冊

本版積分規(guī)則 發(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