Android系統啟動過程

2021-06-28 11:44:26 字數 2357 閱讀 5297

android系統啟動過程由以下幾個大步驟組成:

bootrom, bootloader, linux kernel, android啟動

bootrom沒有源**

bootloader**主要在/bootable下,包括對normal startup,及recovery mode, fastboot mode的處理

linux主要是linux kernel啟動

android從porcess init (process 1)開始,帶動其他process/service啟動

下面主要講bootloader及linux呼叫過程

1.bootloader呼叫過程

kernel/arch/arm/crt0.s    _start   call kmain() in bootable/bootloader/lk/kernel/main.c

kmain() 依次呼叫

thread_init_early()

arch_early_init()

platform_early_init()

target_early_init()

bs_set_timestamp()

call_constructors()

heap_init()

thread_init()

dpc_init()

timer_init()

create thread bootstrap2

其中target_early_init()定義在bootable/bootloader/lk/target/msm8226/init.c,會對uart初始化uart_dm_init(1, 0, blsp1_uart2_base);

bootstrap2()   又會呼叫

arch_init()

platform_init()

target_init()             

target_init()定義在具體平台下,通常初始化些用到匯流排,keyboard, display等

aboot_init()

首先判斷按鍵是recovery mode還是fastboot mode.

如果是正常啟動模式或recovery模式,則呼叫

emmc_recovery_init())

boot_linux_from_mmc()

首先根據不同模式讀出/boot, /recovery分割槽索引及偏移,接著會呼叫boot_linux()進入linux kernel.

2. kernel啟動呼叫過程

進入linux kernel首先是解壓縮zimage,初始化mmu等硬體,進入到start_kernel()

是由kernel/arch/arm/kernel/head-common.s裡的__init呼叫過來

start_kernel()定義在kernel/init/main.c,會呼叫

boot_cpu_init();

page_address_init();

mm_init_owner(&init_mm, &init_task);

mm_init_cpumask(&init_mm);

setup_command_line(command_line);

setup_nr_cpu_ids();

setup_per_cpu_areas();

smp_prepare_boot_cpu();         /* arch-specific boot-cpu hooks */

setup_log_buf(0);

vfs_caches_init_early();

mm_init();

sched_init();

…….rest_init();

rest_init()  create two threads,

在第乙個執行緒執行函式kernel_init(),

if (!ramdisk_execute_command)

ramdisk_execute_command = "/init";

接著呼叫init_post(), 

run_init_process(ramdisk_execute_command);

->kernel_execve

-> do_execve

process init

就這樣被建立了

3. 除錯

bootloader除錯:

串列埠,t32,  寫到檔案裡,列印到螢幕,設定硬體(gpio, led,vibrate)

kernel:     printk, cat proc/kmsg, dmesg

init process:  error or change log_default_level to 6

系統啟動 過程

系統啟動 1 系統加電 2 bios 自檢 本地裝置列舉和初始化 3 post 從記憶體中清除,但執行時服務 runtime service 仍然留在記憶體。4 bios 從 cmos 的設定中找出第1 2 3 啟動裝置 可能有第4個 然後逐個嘗試,並在第乙個 active 狀態的硬碟上讀入其 mb...

系統啟動過程

linux 啟動過程 linux 啟動過程有以下的步驟 bios boot sequence mbr master boot record 1 sector,512 bytes bootloader kernel init etc inittab etc rc.local login。以下我將對以上...

rhel系統啟動過程 Linux 系統啟動過程

按下系統的電源開關,過一會就可以看到linux的登入介面了。你是否曾經想過,從按下電源開關到登入介面出現,這後面到底發生了什麼?linux 系統在啟動過程中,首先是韌體 pc 上大多是 cmos bios 的物理檢測,諸如檢測系統的顯示卡 cpu 和硬碟等,可從系統按下電源後看到此檢測資訊 檢測無問...