1. 程式人生 > >高通平臺BootLoader的流程

高通平臺BootLoader的流程

原文連結:http://www.codingblog.cn/blog/44451.html

注:很多內容和MTK  LK階段相同,可以借鑑學習。aboot.c內容差異很大。

本文以C6的bootlader程式碼為例,

1. 一  kmain

1.1. 1 crt0.S

手機上電後,硬體會從固定的地址(固化在ROM中)載入bootloader到RAM,然後跳轉到bootloader的入口函式開始執行,對於mido,它的入口函式是:

bootable/bootloader/lk/arch/arm/crt0.SCollapse
source
#define
DSB .
byte 0x4f0xf00x7f0xf5 #define
ISB .
byte 0x6f0xf00x7f0xf5 .section ".text.boot" .globl
_start
_start: b  
reset
b  
arm_undefined
b  
arm_syscall
b  
arm_prefetch_abort
..... ..... ..... #ifdef
ARM_CPU_CORTEX_A8
DSB ISB #endif bl     
kmain
b      
.

在_start中先主要完成CPU初始化,禁用mmu,禁用cache,初始化異常向量表等操作,最後將直接跳轉到函式kmain中

1.2. 2 kmain

kmain的程式碼位於

bootable/bootloader/lk/kernel/main.cCollapse
source
/*
called from crt0.S */
void kmain(void)
__NO_RETURN __EXTERNALLY_VISIBLE;
void kmain(void)
{ //
get us into some sort of thread context
thread_init_early(); //
early arch stuff
arch_early_init(); //
do any super early platform initialization
platform_early_init(); //
do any super early target initialization
target_early_init(); dprintf(INFO, "welcome
to lk\n\n"
); bs_set_timestamp(BS_BL_START); //
deal with any static constructors
dprintf(SPEW, "calling
constructors\n"
); call_constructors(); //
bring up the kernel heap
dprintf(SPEW, "initializing
heap\n"
); heap_init(); __stack_chk_guard_setup(); //
initialize the threading system
dprintf(SPEW, "initializing
threads\n"
); thread_init(); //
initialize the dpc system
dprintf(SPEW, "initializing
dpc\n"
); dpc_init(); //
initialize kernel timers
dprintf(SPEW, "initializing
timers\n"
); timer_init(); #if
(!ENABLE_NANDWRITE)
//
create a thread to complete system initialization
dprintf(SPEW, "creating
bootstrap completion thread\n"
); thread_resume(thread_create("bootstrap2",
&bootstrap2, NULL, DEFAULT_PRIORITY, DEFAULT_STACK_SIZE));
//
enable interrupts
exit_critical_section(); //
become the idle thread
thread_become_idle(); #else bootstrap_nandwrite();

相關推薦

[Android]平臺BootLoader啟動流程

一、什麼是BootLoader BootLoader程式碼是晶片復位後,進入作業系統之前執行的一段程式碼。主要用於完成由硬體啟動到作業系統啟動的過渡,從而為作業系統提供基本的執行環境。 BootLoder主要的啟動流程可以概括為:PBL階段、SBL階段、LK階段。之後會載入並啟動kern

平臺BootLoader流程

原文連結:http://www.codingblog.cn/blog/44451.html 注:很多內容和MTK  LK階段相同,可以借鑑學習。aboot.c內容差異很大。 本文以C6的bootlader程式碼為例, 1.

平臺bootloader裡面串列埠log輸出配置方法

1:在modem端將相應的gpio設定成相應功能。 2:在/lk/project/xxx.mk開啟uart輸出log功能。 3:在platform/msm_shared/uart.c中定義uart幾輸出log, #if PLATFORM_MSM7X30 static uns

平臺Camera框架部分淺談--Camera C/S 的init流程

       瞭解的不夠深入,應用功能實現後,再回頭細看Camera框架時,還是有些地方沒能連通,在網上也找了一些文章結合程式碼來分析,不過能力有限,甚是痛苦。而且由於平臺不同,程式碼的具體流程還是有區別。       下

平臺msm8916修改開機logo 平臺修改LK(bootloader)開機logo

經過兩天的奮戰終於把開機logo給搞定了啊。 首先修改開機logo要從哪裡入手呢?先分析一下原始碼看看. ---> 1 void display_image_on_screen() 2 { 3 struct fbimage default_fbimg, *fbimg; 4

平臺LCD的開啟和關閉流程

開機的時候 SurfaceFlinger open msm_fb device [    9.468484] mdp4_overlay_pipe_alloc: pipe=c07f7830 ndx=1 num=0 share=0 cnt=0      剛開機的時候 sl open device [    9.

基於Android7.1 8953 平臺下零死角玩轉裝置樹DTS

【基於Android7.1 8953 高通平臺下零死角玩轉裝置樹DTS】 更新內容:  【創科之龍_安卓開發】第01課_為什麼引用linux裝置樹和對比優勢  【創科之龍_安卓開發】第02課_如何在Linux-3.x核心

平臺啟動log概述(PBL log、sbl1 log、kernel log)【轉】

本文轉自:https://blog.csdn.net/RadianceBlau/article/details/78416776?utm_source=blogxgwz9 高通平臺啟動log概述(PBL log、sbl1 log、kernel log)在嵌入式linux的除錯過程中log有著至關重要的地位,

平臺讀寫nv總結【轉】

本文轉載自:https://blog.csdn.net/suofeng12345/article/details/52713993 一,引言      1. 什麼是NV      &nbs

平臺 ramdump-parser 簡介

ramdump 是什麼?簡單來說就是把系統memory中的某一個時間點的的資料資訊通過一定手段取出來儲存起來的記憶體崩潰檔案,屬於ELF檔案格式。 當系統發生致命錯誤無法恢復的時候,主動觸發抓取ramdump把異常現場保留下來供離線分析定位問題是一種非常重要的高階除錯手段。 高

通過平臺簡單總結的許可權問題

 android 5.x開始,引入了非常嚴格的selinux許可權管理機制,我們經常會遇到因為selinux許可權問題造成的各種avc denied困擾。有時候我們在添加了一些驅動或應用的時候,發現不能用,但是程式本身查不出問題來,那就要抓log看一下了,很多時候就是因為沒有新增許可權,下

平臺電池曲線

跟電池相關的一些名詞: FCC Full-Charge Capacity 滿電荷電量 UC Remaining Capacity RC 剩餘電量 CC Coulumb Counter 電量計 UUC Unusable Capacity 不可用電量 PC Percentage

平臺SPI外設的片選訊號配置

spi master 和spi device有各自的dts配置: 這是spi master的配置示例,也就是spi控制器 這是一個spi device的配置示例,也就是spi外設(從裝置) 一個spi控制器上可以連線多個從裝置,在任何時刻只有一個從裝置可以通

平臺新增或者移植一個完整的camera

OV8865 1、kernel部分: A、kernel_driver: 把驅動檔案ov8865_qtech_f8865ac.c 放到kernel/drivers/media/platform/msm/camera_v2/sensor/目錄下 B、kernel_dt

平臺GPIO模擬PWM控制背光

    很多時候由於節省硬體資源,降低成本,會把PWM控制晶片去掉或者是改做它用,導致當我們想用PWM方式控制背光時只能使用帶有clk功能的GPIO口。本篇文件就來講解下如何使用GPIO模擬PWM功能進行背光的控制。本文以MSM8909為例。 一、選取GPIO口並進行配置

平臺 efs.mbn的製作與修改

1.修改需要修改的mbn相關檔案 如MDM9607/trunk/modem_proc/mcfg/mcfg_gen/genneric/China/CT下的 2.EFS相關程式碼修改 開啟相關巨集定義 #define FEATURE_EFS_NAND_FACTORY_STAR

平臺framework,hal,kernel開啟log【轉】

本文轉載自:https://blog.csdn.net/u010164190/article/details/78625636 1 1.Add framework log 2 #define LOG_NDEBUG 0 3 2.Add hal log 4 #define LOG_NDEBU

Android平臺下編譯時能生成(拷貝)預編譯的so到system的lib目錄

  參考hardware\qcom\display\libcopybit 通過編譯log可以知道編譯到這裡,生成的copybit.msm8937.so在out\target\product\msm8937_64\system\lib\hw下。libcopybit\Andr

平臺 UART log 開啟方法

1  配置kernel  DTS      例如:  kernel\arch\arm\boot\dts\qcom\msm8909-mtp.dtsi,  配置status屬性 okay.   同時檢查DTS 確認UART PIN  沒有配作他用      &blsp1

[平臺小米4]的電源管理配置學習

1.溫控調頻 /system/etc/thermal-engine-8974.conf sampling 5000 [CPU0_MONITOR] algo_type monitor sensor cp