日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > linux >内容正文

linux

linux内核启动流程x86,linux内核-x86_32位内核启动流程

發布時間:2024/7/23 linux 21 豆豆
生活随笔 收集整理的這篇文章主要介紹了 linux内核启动流程x86,linux内核-x86_32位内核启动流程 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

arch/x86/boot/header.S

執行_start,第274行:

.global _start

_start:

然后跳轉執行start_of_setup,準備實模式建立堆棧,BSS段清0,為下步C語言執行建立環境。

start_of_setup:

然后跳轉到C代碼執行main:

# Jump to C code (should not return)

calll main

arch/x86/boot/main.c

執行main函數:

void main(void)

maim中使用BIOS中斷讀取一些硬件信息,如內存信息等。

main函數最后,再執行go_to_protected_mode函數。

arch/x86/boot/pm.c

執行go_to_protected_mode函數。

void go_to_protected_mode(void)

禁用中斷,開啟20位以上的地址線,設置保護模式,設置全局描述表。

函數最后執行protected_mode_jump

arch/x86/boot/pmjump.S

執行protected_mode_jump:

GLOBAL(protected_mode_jump)

該段開始的.code16指令,表示這段代碼依然是16位的實模式代碼。使能CR0寄存器中的PE(Protection Enable)位,進入32位保護模式。建立32位的堆棧,清除寄存器以允許將來擴展到32位引導協議。

跳轉到了code32_start地址處執行。

arch/x86/boot/compressed/head_32.S

執行startup_32:

__HEAD

ENTRY(startup_32)

執行過程,調用了efi_main

執行到,解壓內核

call decompress_kernel

arch/x86/boot/compressed/misc.c

執行decompress_kernel函數。

asmlinkage void decompress_kernel

會輸出打印Decompressing Linux…字樣。

解壓完成后跳轉到output。

/arch/x86/kernel/head_32.S

進入到第88行,開始執行

__HEAD

ENTRY(startup_32)

執行到第454行,跳轉到i386_start_kernel函數。

jmp *(initial_code)

/arch/x86/kernel/head32.c

執行i386_start_kernel函數。此函數最后調用start_kernel函數。

/init/main.c

執行start_kernel函數。開始啟動內核。

參考鏈接:

https://blog.csdn.net/jn1158359135/article/details/7436211

https://www.cnblogs.com/long123king/p/3545991.html

http://blog.chinaunix.net/uid-1701789-id-148056.html

總結

以上是生活随笔為你收集整理的linux内核启动流程x86,linux内核-x86_32位内核启动流程的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。