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 和硬碟等,可從系統按下電源後看到此檢測資訊 檢測無問...