u-boot ctr0.S詳解 包含_main函式
------------腦補區---------------
本文彙編涉及的指令: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最終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 地址處。
#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正常執行。在一些特殊的情況下,我們需要做一些配置修改,或者配置自定義屬性。 自定義屬