1. 程式人生 > >u-boot ctr0.S詳解 包含_main函式

u-boot ctr0.S詳解 包含_main函式

/** ****************************************************************************** * @author    Maoxiao Hu * @version   V1.0.0 * @date       Jan-2015 ****************************************************************************** * < COPYRIGHT 2015 ISE of SHANDONG UNIVERSITY > ******************************************************************************
**/ based on u-boot-2014.10。原始碼紅色標示,其它均為新增的註釋。

------------腦補區---------------

本文彙編涉及的指令:ldr , bic , mov , sub , cmp , strlo , addlo , blo , str , bl 。

----------------------------------

分析一下 crt0.S 檔案開頭的一段。crt0.S 位於u-boot-2014.10/arch/arm/lib/crt0.S。 正如 crt0.S 檔案開頭所註釋的一樣: “ 1. Set up initial environment for calling board_init_f().This environment only provides a stack and a place to store the GD (‘global data’) structure, both located in some readily available RAM (SRAM, locked cache...). In this context, VARIABLE global data, initialized or not (BSS), are UNAVAILABLE; only CONSTANT initialized data are available. ” 最開始先為呼叫 board_init_f() 設定初始化條件。這個初始化條件就是:設定棧首地址,將棧往下移 GD_SIZE 個大小,然後將剛才經過的這段 SRAM 從頭清空(寫0)。話不多說看程式碼:

ENTRY(_main)

/*
* Set up initial C runtime environment and call board_init_f(0).
*/

ldr sp, =(CONFIG_SYS_INIT_SP_ADDR)

一路反查定義:

#define CONFIG_SYS_INIT_SP_ADDR (CONFIG_SYS_LOAD_ADDR-GENERATED_GBL_DATA_SIZE) #define CONFIG_SYS_LOAD_ADDR (CONFIG_SYS_SDRAM_BASE+0x4800000) #define GENERATED_GBL_DATA_SIZE 0xC0 #define CONFIG_SYS_INIT_SP_ADDR 
(0x40000000 +0x4800000 - 0xC0) #define CONFIG_SYS_INIT_SP_ADDR  0x447FFF40

最終SP值為0x447FFF40。

bic sp, sp, #7 /* 8-byte alignment for ABI compliance */

sp低三位清0。

mov r2, sp

儲存sp到r2中,現在r2中的值也是0x447FFF40。

sub sp, sp, #GD_SIZE /* allocate one GD above SP */

 GD_SIZE為184(0xB8),將sp指標向下移184個位元組,現在sp為0x447ffe88。

bic sp, sp, #7 /* 8-byte alignment for ABI compliance */

sp低三位再次清0。

mov r9, sp /* GD is above SP */

儲存sp到r9中,現在r9中的值也是0x447ffe88。

mov r1, sp

再次儲存sp到r1中,現在r1中的值也是0x447ffe88。

mov r0, #0

清r0。

clr_gd:

    cmp r1, r2 /* while not at end of GD */

    現在 r1=0x447ffe88 < r2=0x447FFF40不相等是必然的。

    strlo r0, [r1] /* clear 32-bit GD word */


    addlo r1, r1, #4 /* move to next */


    blo clr_gd

    blo小於則跳轉。


#if defined(CONFIG_SYS_MALLOC_F_LEN) && !defined(CONFIG_SPL_BUILD)
sub sp, sp, #CONFIG_SYS_MALLOC_F_LEN

CONFIG_SYS_MALLOC_F_LEN=(1<<10)即0x400,現在sp為0x447ffa88。


str sp, [r9, #GD_MALLOC_BASE] 

GD_MALLOC_BASE = 136 (0x88),把sp的值存到r9+ 0x88 = 0x447fff10 地址處。

NewImage

#endif
/* mov r0, #0 not needed due to above code */
bl board_init_f

相關推薦

u-boot ctr0.S 包含_main函式

/** ****************************************************************************** * @author    Maoxiao Hu * @version   V1.0.0 * @date       Jan-2015 *****

imx6q 平臺2016版 u-boot連結指令碼

醞釀許久,關於uboot終於開篇;因為最近一直在使用imx6q平臺進行Linux應用開發,但是我對imx6q的外圍不是很熟悉,而且系統也不是我從頭搭建的,總感覺心裡沒底,這樣做事不是我的風格;所以有點空閒之後,決定把imx6平臺的uboot、Linux整體再捋一遍,這樣我睡覺都踏實一點;同時

u-boot.lds檔案

網上大部分u-boot.lds檔案的分析大部分都是千遍一律,例如下面就是本人在網上找到的關於u-boot.lds的資料。 OUTPUT_FORMAT("elf32-littlearm","elf32-littlearm","elf32-littlearm")

U-Mail郵件系統郵件收發延遲原因及解決方案

郵件系統 郵件是現代社會辦公最常見、最頻繁的通聯工具,但使用郵件系統時,用戶普遍最關心兩個安全,一個是安全性,郵件會不會被竊密?自己的郵箱賬號會不會被盜取被攻占呢?保存的數據會不會丟失呢?關於這個問題,國內知名通聯解決方案提供商U-Mail資深專家馬工已反復闡述過很多次。 另一個問題是關於郵件傳輸的,郵

Spring Boot 之 HelloWorld

www repos lookup dex lns jar nap put epo SpringBoot介紹~<暫時假裝有> 配置 <?xml version="1.0" encoding="UTF-8"?> <project xmlns="ht

Spring Boot異常處理

在Spring MVC異常處理詳解中,介紹了Spring MVC的異常處理體系,本文將講解在此基礎上Spring Boot為我們做了哪些工作。下圖列出了Spring Boot中跟MVC異常處理相關的類。 Spring Boot在啟動過程中會根據當前環境進行AutoConfigurat

spring-boot入門程式

1.建立一個普通的maven專案,專案名為boot-learnning 2.在pom.xml新增parent依賴 <parent> <groupId>org.springframework.boot</groupId> <

spring boot之配置

spring boot支援的配置檔案 spring boot支援兩種型別的配置檔案,一種是傳統的預設配置檔案application.properties ,還有一種是現在被廣泛推薦使用的YAML檔案。書寫上properties是採用鍵值對的形式來表示,而YAML是以類似大綱的縮排形式,這

SpringBoot非官方教程 | 第二篇:Spring Boot配置檔案

springboot採納了建立生產就緒Spring應用程式的觀點。 Spring Boot優先於配置的慣例,旨在讓您儘快啟動和執行。在一般情況下,我們不需要做太多的配置就能夠讓spring boot正常執行。在一些特殊的情況下,我們需要做修改一些配置,或者需要有自己的配置屬性。 當我們

Spring boot 配置檔案 (properties 和yml )

從其他框架來看 我們都有自己的配置檔案, hibernate有hbm,mybatis 有properties, 同樣, Spring boot 也有全域性配置檔案。 Springboot使用一個全域性的配置檔案,而且配置檔案的名字是固定的。 有兩種 application.properties

Spring Boot 配置檔案:自定義屬性、隨機數、多環境配置等

相信很多人選擇Spring Boot主要是考慮到它既能兼顧Spring的強大功能,還能實現快速開發的便捷。我們在Spring Boot使用過程中,最直觀的感受就是沒有了原來自己整合Spring應用時繁多的XML配置內容,替代它的是在pom.xml中引入模組化的Starter POMs,其中各個模組都有自己的預

Spring boot 2 -配置

分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow 也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!        

SpringBoot學習第二篇:Spring Boot配置檔案

原文首發於:https://www.fangzhipeng.com/springboot/2017/07/11/springboot2-config-file/ 本文出自方誌朋的部落格 springboot採納了建立生產就緒Spring應用程式的觀點。 Spring Boot優先於配置的慣例,旨

Spring Boot配置檔案-ConfigurationProperties和Value優缺點-(轉)好文

文章轉自 http://www.cnblogs.com/itdragon/p/8686554.html Spring Boot提供了兩種常用的配置檔案,分別是properties檔案和yml檔案。他們的作用都是修改Spring Boot自動配置的預設值。相對於properties檔案而言,yml檔

Spring Boot 整合 FreeMarker 案例

一、Springboot 那些事 SpringBoot 很方便的整合 FreeMarker ,DAO 資料庫操作層依舊用的是 Mybatis,本文將會一步一步到來如何整合 FreeMarker 以及配置的詳解 二、執行 springboot-freemarker 工程 1.資

Spring Boot事務管理

什麼是事務? 我們在開發企業應用時,對於業務人員的一個操作實際是對資料讀寫的多步操作的結合。由於資料操作在順序執行的過程中,任何一步操作都有可能發生異常,異常會導致後續操作無法完成,此時由於業務邏輯並未正確的完成,之前成功操作資料的並不可靠,需要在這種情況下進行回退。 事務的作用就是為了

企業級 SpringBoot 教程 (二)Spring Boot配置檔案

springboot採納了建立生產就緒Spring應用程式的觀點。 Spring Boot優先於配置的慣例,旨在讓您儘快啟動和執行。在一般情況下,我們不需要做太多的配置就能夠讓spring boot正常執行。在一些特殊的情況下,我們需要做修改一些配置,或者需要有自己的配置屬性

Android系列教程之七:EditText使用-包含很多教程上看不到的功能演示

Android系列教程目錄: 一:新建HelloEditText工程 新建一個Hello world詳細步驟可以參見 建立設定如下: Project name:HelloEditTextBuild Target :android 2.2Application name

系統啟動U盤製作全過程

敘:之前自己的系統是家庭版的,在自己升級為專業版的時候出了問題,很生氣想重灌系統,但是苦於沒有系統U盤,想自己製作一個系統U盤,但當時出差手裡又沒有帶空白U盤,很尷尬~,最後自己自己在網上查了很久,試了很多方法終於把系統的小瑕疵解決了(家庭版升專業版詳細操作:https://blog.c

第二篇:Spring Boot配置檔案

Spring Boot採納了建立生產就緒Spring應用程式的觀點。 Spring Boot優先於配置的慣例,旨在讓您儘快啟動和執行。在一般情況下,我們不需要做太多的配置就能夠讓Spring Boot正常執行。在一些特殊的情況下,我們需要做一些配置修改,或者配置自定義屬性。 自定義屬