1. 程式人生 > >uboot原始碼及啟動過程分析

uboot原始碼及啟動過程分析

#include

#include

/*

 *************************************************************************

 *

 * Jump vector table as in table 3.1 in [1]

 *

 *************************************************************************

 */

.globl _start

_start:        b       start_code

         ldr     pc, _undefined_instruction

         ldr     pc, _software_interrupt

         ldr     pc, _prefetch_abort

         ldr     pc, _data_abort

         ldr     pc, _not_used

         ldr     pc, _irq

         ldr     pc, _fiq

_undefined_instruction:      .word undefined_instruction

_software_interrupt:    .word software_interrupt

_prefetch_abort:          .word prefetch_abort

_data_abort:                .word data_abort

_not_used:                  .word not_used

_irq:                    .word irq

_fiq:                     .word fiq

         .balignl 16,0xdeadbeef

/*

 *************************************************************************

 *

 * Startup Code (called from the ARM reset exception vector)

 *

 * do important init only if we don't start from memory!

 * relocate armboot to ram

 * setup stack

 * jump to second stage

 *

 *************************************************************************

 */

_TEXT_BASE:

         .word         TEXT_BASE

.globl _armboot_start

_armboot_start:

         .word _start

/*

 * These are defined in the board-specific linker script.

 */

.globl _bss_start

_bss_start:

         .word __bss_start

.globl _bss_end

_bss_end:

         .word _end

#ifdef CONFIG_USE_IRQ

/* IRQ stack memory (calculated at run-time) */

.globl IRQ_STACK_START

IRQ_STACK_START:

         .word         0x0badc0de

/* IRQ stack memory (calculated at run-time) */

.globl FIQ_STACK_START

FIQ_STACK_START:

         .word 0x0badc0de

#endif

/*

 * the actual start code

 */

start_code:

         /*

          * set the cpu to SVC32 mode

          */

         mrs   r0, cpsr

         bic    r0, r0, #0x1f

         orr    r0, r0, #0xd3

         msr   cpsr, r0

         bl      coloured_LED_init

         bl      red_LED_on

#if     defined(CONFIG_AT91RM9200DK) || defined(CONFIG_AT91RM9200EK)

         /*

          * relocate exception table

          */

         ldr     r0, =_start

         ldr     r1, =0x0

         mov  r2, #16

copyex:

         subs r2, r2, #1

         ldr     r3, [r0], #4

         str     r3, [r1], #4

         bne   copyex

#endif

#if defined(CONFIG_S3C2400) || defined(CONFIG_S3C2410)

         /* turn off the watchdog */

# if defined(CONFIG_S3C2400)

#  define pWTCON    0x15300000

#  define INTMSK       0x14400008        /* Interupt-Controller base addresses */

#  define CLKDIVN     0x14800014        /* clock divisor register */

#else

#  define pWTCON    0x53000000

#  define INTMSK       0x4A000008        /* Interupt-Controller base addresses */

#  define INTSUBMSK         0x4A00001C

#  define CLKDIVN     0x4C000014       /* clock divisor register */

# endif

         ldr     r0, =pWTCON

         mov  r1, #0x0

         str     r1, [r0]

         /*

          * mask all IRQs by setting all bits in the INTMR - default

          */

         mov  r1, #0xffffffff

         ldr     r0, =INTMSK

         str     r1, [r0]

# if defined(CONFIG_S3C2410)

         ldr     r1, =0x3ff

         ldr     r0, =INTSUBMSK

         str     r1, [r0]

# endif

         /* FCLK:HCLK:PCLK = 1:2:4 */

         /* default FCLK is 120 MHz ! */

         ldr     r0, =CLKDIVN

         mov  r1, #3

         str     r1, [r0]

#endif        /* CONFIG_S3C2400 || CONFIG_S3C2410 */

         /*

          * we do sys-critical inits only at reboot,

          * not when booting from ram!

          */

#ifndef CONFIG_SKIP_LOWLEVEL_INIT

         bl      cpu_init_crit

#endif

#ifndef CONFIG_SKIP_RELOCATE_UBOOT

relocate:                                /* relocate U-Boot to RAM       */

         adr    r0, _start             /* r0 <- current position of code   */

         ldr     r1, _TEXT_BASE                   /* test if we run from flash or RAM */

         cmp  r0, r1                   /* don't reloc during debug         */

         beq   stack_setup

         ldr     r2, _armboot_start

         ldr     r3, _bss_start

         sub   r2, r3, r2              /* r2 <- size of armboot            */

         add   r2, r0, r2              /* r2 <- source end address         */

copy_loop:

         ldmia         r0!, {r3-r10}                  /* copy from source address [r0]    */

         stmia          r1!, {r3-r10}                  /* copy to   target address [r1]    */

         cmp  r0, r2                   /* until source end addreee [r2]    */

         ble    copy_loop

#endif        /* CONFIG_SKIP_RELOCATE_UBOOT */

         /* Set up the stack                                                          */

stack_setup:

         ldr     r0, _TEXT_BASE         /* upper 128 KiB: relocated uboot   */

         sub   r0, r0, #CONFIG_SYS_MALLOC_LEN   /* malloc area              */

         sub   r0, r0, #CONFIG_SYS_GBL_DATA_SIZE /* bdinfo                 */

#ifdef CONFIG_USE_IRQ

         sub   r0, r0, #(CONFIG_STACKSIZE_IRQ+CONFIG_STACKSIZE_FIQ)

#endif

         sub   sp, r0, #12          /* leave 3 words for abort-stack    */

clear_bss:

         ldr     r0, _bss_start               /* find start of bss segment        */

         ldr     r1, _bss_end               /* stop here                        */

         mov  r2, #0x00000000          /* clear                            */

clbss_l:str r2, [r0]                 /* clear loop...                    */

         add   r0, r0, #4

         cmp  r0, r1

         ble    clbss_l

         ldr     pc, _start_armboot

_start_armboot:  .word start_armboot

/*

 *************************************************************************

 *

 * CPU_init_critical registers

 *

 * setup important registers

 * setup memory timing

 *

 *************************************************************************

 */

#ifndef CONFIG_SKIP_LOWLEVEL_INIT

cpu_init_crit:

         /*

          * flush v4 I/D caches

          */

         mov  r0, #0

         mcr   p15, 0, r0, c7, c7, 0      /* flush v3/v4 cache */

         mcr   p15, 0, r0, c8, c7, 0      /* flush v4 TLB */

         /*

          * disable MMU stuff and caches

          */

         mrc   p15, 0, r0, c1, c0, 0

         bic    r0, r0, #0x00002300     @ clear bits 13, 9:8 (--V- --RS)

         bic    r0, r0, #0x00000087     @ clear bits 7, 2:0 (B--- -CAM)

         orr    r0, r0, #0x00000002     @ set bit 2 (A) Align

         orr    r0, r0, #0x00001000     @ set bit 12 (I) I-Cache

         mcr   p15, 0, r0, c1, c0, 0

         /*

          * before relocating, we have to setup RAM timing

          * because memory timing is board-dependend, you will

          * find a lowlevel_init.S in your board directory.

          */

         mov  ip, lr

         bl      lowlevel_init

         mov  lr, ip

         mov  pc, lr

#endif /* CONFIG_SKIP_LOWLEVEL_INIT */

…...

相關推薦

uboot原始碼啟動過程分析

#include #include /*  *************************************************************************  *  * Jump vector table as in table 3.1 in [1]  *  *

TOMCAT原始碼分析啟動過程

前言:   本文是我閱讀了TOMCAT原始碼後的一些心得。 主要是講解TOMCAT的系統框架, 以及啟動流程。若有錯漏之處,敬請批評指教!建議:   畢竟TOMCAT的框架還是比較複雜的, 單是從文字上理解, 是不那麼容易掌握TOMCAT的框架的。 所以得實踐、實踐、再實踐。

10 uboot的配置編譯過程分析

uboot的配置及編譯過程分析 uboot的配置過程(make config_uboot): 1.orangepi_sdk目錄下的Makefile: 26 PHONY += config_uboot 27 config_uboot : 28

【Elasticsearch 5.6.12 原始碼】——【3】啟動過程分析(下)

版權宣告:本文為博主原創,轉載請註明出處! 簡介 本文主要解決以下問題: 1、ES啟動過程中的Node物件都初始化了那些服務? 構造流程 Step 1、建立一個List暫存初始化失敗時需要釋放的資源,並使用臨時的Logger物件輸出開始初始化的日誌。 這裡首先建立了一個List

【Elasticsearch 5.6.12 原始碼】——【2】啟動過程分析(上)

版權宣告:本文為博主原創,轉載請註明出處! 簡介 本文主要解決以下問題: 1、啟動ES的入口類及入口方法是哪個?2、分析梳理ES服務啟動的主要流程? 入口類 ES的入口類為org.elasticsearch.bootstrap.Elasticsearch,啟動方法為: public

android原始碼4.4.2----系統啟動過程分析

public class SystemServer {   private static final String TAG = "SystemServer";   public static final int FACTORY_TEST_OFF = 0;   public static final int F

Android筆記-service啟動過程分析:bindService原始碼分析、startService和bindService區別

前言: Service的啟動流程將會分為一個系列來講述。 本系列開始將分析Service的啟動過程。 看這個系列文章之前你所需要知道的知識點: 1. 熟悉service的基本用法。 2. 瞭解bind機制,知道android的客戶端和AMS間通

uboot分析uboot啟動過程分析

1.拿到uboot的原始碼之後,一般需要經過四個步驟: (1)解壓縮 (2)打補丁:patch -p? < ..補丁檔案 解釋:?用數字替代,表示忽略掉前幾級目錄。 (3)配置:因為uboot可以支援很多種晶片,需要將其配置為支援特定的晶片 解釋:這一步一般就是執行m

NanoPC-T2 Uboot啟動過程分析

在繼續分析之前,先回顧一下當前相關暫存器的值、記憶體空間的使用情況和相關變數的值的情況。 Registers: r0 = 0 r9 = 0x42BF_FF60 @ &gd r13 = &( bl mmu_turn_on ) @ /ubo

基於N原始碼的Activity的啟動過程分析

對於該主題的文章,網上氾濫,為了加深印象,最好還是自己跟一遍原始碼,這樣對框架的認識以及對應用的控制都是很有幫助的。 推薦老羅的一些列文章: 老羅的部落格寫的非常好,但分析的原始碼有點老,不過大體思路是不會變的。我這裡就基於android 7.0的原始碼來跟下這個流程,希

【轉】Android 4.0 Launcher2源碼分析——啟動過程分析

handler flag 這一 第一次啟動 asynctask pla size ontouch wait Android的應用程序的入口定義在AndroidManifest.xml文件中可以找出:[html] <manifest xmlns:android="htt

X86架構下Linux啟動過程分析

重要 ack csdn 檢查 point article span 註意 eap 1、X86架構下的從開機到Start_kernel啟動的整體過程 這個過程簡要概述為: 開機——>BIOS——>GRUB/LILO——>Linux Kernel

Linux開機啟動過程分析

物理內存 登錄 page thread 陷阱門 execute 啟動過程 font 定義 Linux開機啟動過程分析 開機過程指的是從打開計算機電源直到LINUX顯示用戶登錄畫面的全過程。分析LINUX開機過程也是深入了解LINUX核心工作原理的一個很好的途徑。 啟動第一

u-boot-201611 啟動過程分析——基於smdk2410

u-bootu-boot-201611 啟動過程分析——基於smdk2410

linux 系統啟動過程分析

系統root 密碼丟失故障 linux啟動順序主板BIOS加電自檢 檢查硬件--> 讀取硬盤引導扇區(MBR)--> 啟動引導程序(grub)--> 選擇系統--> 加載系統內核(kernel shell)--> 啟動系統讀取相應的默認設置(環境變量,運行級別)--

Ocata Neutron代碼分析(一)——Neutron API啟動過程分析

process fig ddr arch 異常 run tap 文件中 bridge 首先,Neutron Server作為一種服務(neutron-server.service),可以到Neutron項目目錄中的setup.cfg配置文件中找到對應的代碼入口。 [ent

Ocata Neutron代碼分析(二)——Neutron RPC啟動過程分析

gre add ice common multi tween wait函數 tex 依次 RPC啟動跟Neutron API的啟動在同一個函數中執行,neutron.server.wsgi_eventlet.py中的eventlet_wsgi_server。 def ev

從0移植uboot (二) _啟動流程分析

title tco ret 沒有 返回 ips css location config 來源:Linux社區 作者:xiaojiang1025 : http://www.linuxidc.com/Linux/2017-02/141019.htm 經過

Linux進程啟動過程分析do_execve(可執行程序的加載和運行)---Linux進程的管理與調度(十一)

[] flag 表示 conn nali 最終 roc 不同的 recursion execve系統調用 execve系統調用 我們前面提到了, fork, vfork等復制出來的進程是父進程的一個副本, 那麽如何我們想加載新的程序, 可以通過execve來加載和啟動新的程

imx6ul:uboot-2013.10啟動過程解析

1.原始碼結構分析      首先一個問題,老版本的u-boot是沒有SPL這個檔案的,新版u-boot開始包含SPL檔案,原來u-boot啟動比如放到nand中,在cpu內部有一個stepping stone,可以拷貝nand中的u-boot到ram