Linux啟動過程
- 開機并執(zhí)行bootloader程序(引導程序);
- 操作系統(tǒng)內核初始化(執(zhí)行內核程序舶沛,初始化各種硬件柠新,建立各種內部數據結構)峰鄙;
- 執(zhí)行第一個應用程序——Home程序——一般是Terminal(啟動其他應用程序的入口)。
ARM處理器上的linux啟動過程~Android系統(tǒng)運行的底層處理器
復位 -> 執(zhí)行bootloader程序 -> 裝載uboot/fastboot程序 -> 開始運行:
- 用戶按下特別按鍵 —— 進入調試模式
- 用戶沒有按下特別按鍵 —— uboot(fastboot)從NAND Flash中裝載Linux內核套蒂。
-> 內核初始化:
- start() ./arch/XXX/boot/head.S 進行一些CPU寄存器的配置
- startup_32() ./arch/xxx/boot/compress/head.S 配置堆棧钞支,對BSS段進行清空
- decompress_kernel() ./archXXX/boot/compress/misc.c 解壓內核
- startup_32() ./arch/XXX/kernel/head.S CPU頁表配置(主要用于虛擬內存,并檢測該CPU是否有浮點處理單元(FPU)支持操刀,此時該進程為系統(tǒng)進程——0號進程)
- start_kernel() ./init/main.c 內核內部數據初始化烁挟,配置中斷向量表,掛載ramdisk骨坑,調用kernel_thread()方法
- kernel_thread() ./arch/XXX/kernel/process.c 根據ramdisk/init.rc信夫,啟動不同的應用程序
- cpu_idle() ./init/main.c 內核可以按照進程的優(yōu)先級進行調度