u boot 第一階段學習筆記

2021-07-11 06:39:47 字數 3663 閱讀 2593

一、cpu訪問晶元時需要的條件:

1.位址線

2.資料線 8/16/32位寬

3.訪問速度 即時鐘相關

由儲存管理器負責管理

二、為什麼從addr2連線a0?

因為arm是32位處理器,所以它一次處理資料都是以32位為單位的,也就是說它讀或者寫資料時,位址只能為

0x0、0x04、0x08、。。。即4位元組對齊(位址0x0,0x1,0x2,0x3 分別對應8bit,0~3位址組成32位資料),但一般

sdram的資料線都為16位,所以為了得到32位的數

據,一般都是將2個sdram連在一起,並使用相同位址線,使

得cpu的乙個位址,可以傳輸來sdram的32位資料,所以這裡就存在乙個位址轉換問題,即使cpu的0~3位址裡

的資料(32位)對應

sdram

的0位址資料,cpu的4~7位址的資料對應

sdram

的1位址的資料,所以cpu的0位址

對應sdram

的0位址,0x04位址對應ddr中1位址,0x08位址對應

sdram

中2位址,可以看出,

sdram

的位址剛

好是cpu定址向右移動兩位,所以2440或2410中位址線都是從addr2開始連線的。2440晶元手冊中有連線例子。

三、彙編指令 bl 為絕對跳轉,在當前位址格式內的跳轉,返回值在 lr 暫存器中。

四、sdram 13個暫存器設定

bank6、bank7 為接sdram專用

refresh hclk : 12mhz    0x008c07a3

hclk :100mhz  0x008c04f4

五、nor flash 可以像記憶體一樣讀,但不能像記憶體一樣寫,所以程式在nor中執行時,也要重定位,使用新位址

訪問變數,檢視位址 arm-linux-ld -pie 在鏈結檔案中生成 rel 和 dynsym 段。

nand 啟動 0位址對應記憶體中0 ,nor啟動0位址對應nor中的0 。

六、bss段放初始化為0 或還沒初始化的全域性變數,為了節省空間,不寫到程式中。

七、除錯的時候,還想得到u-boot的反彙編**,修改頂層目錄makefile239行:

all = $(obj)u-boot.srec $(obj)u-boot.bin $(obj)system.map $(u_boot_nand)

===>

all = $(obj)u-boot.srec $(obj)u-boot.bin $(obj)system.map$(obj)u-boot.dis$(u_boot_nand)

對應的修改2285行:

-o -name '*.srec' -o -name '*.bin' -o -name u-boot.img \) \

===>

-o -name '*.srec' -o -name '*.bin'-o -name u-boot.dis-o -name u-boot.img \) \

八、反彙編u-boot 在u-boot目錄下執行:

arm-linux-objdump -d u-boot> u-boot.dis

繼續執行 vi u-boot.dis 開啟反彙編檔案

九、#definedeclare_global_data_ptrregister volatile gd_t *gdasm("r8")

定義暫存器型別變數gd將其值存在r8r8 中,編譯時不會改變 fixed-r8

十、pie功能搜尋 arm-linux-ld --help | grep pie

生成位置無關**,用於放在何處都可執行的**,因上電時**還在記憶體或 nor flash 中,位址不是將代

重定向到 sdram 後的位址,重定向後的**應該在其鏈結位址上,不然會怎樣?

比如:訪問全域性變數時應該在某個鏈結位址上,若不在則會出錯。

十一、malloc 堆,在用malloc 函式時,是從 sdram 中分配一部分給程式用

u boot第一階段

u boot 第一階段 位置 cpu arm920t start.s 流程分析 1.儲存一些全域性變數,用於啟動程式將 從flash拷貝到ram或其他使用。有一些變數的值是通過鏈結指令碼得到的,如 text base 位於board 2440 config.mk 中 bss start end 位於...

UBOOT第一階段分析

感覺不錯的乙個圖就轉過來了!u boot第一階段的啟動流程。這個階段主要是初始化硬體裝置,為載入u boot的第二階段 準備ram空間最後跳轉到lib arm board.c中start armboot函式,這是第二階段的入口點。u boot第一階段的儲存器布局。上圖中u boot安裝在nand f...

u boot啟動流程 第一階段

具體分析參見另一篇blog 第一階段的啟動在.cpu arm920t start.s檔案中完成,之後執行c程式,對硬體進行更細緻的初始化操作 硬體初始化 設定svc模式 關閉watch dog 禁止irq 設定時鐘 fclk hclk pclk 禁止i cache d cache 禁止mmu和cac...