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

歡迎訪問 生活随笔!

生活随笔

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

linux

加载不同linux内核,Linux内核加载过程

發(fā)布時間:2024/9/27 linux 23 豆豆
生活随笔 收集整理的這篇文章主要介紹了 加载不同linux内核,Linux内核加载过程 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

以32位x86,bzImge為例

grub版本為0.97

1、計算機上電

2、0xFFFFFFF0

當cpu檢測reset引腳上的信號后

便將指令指針寄存器的值設置為0xfff0

——INTEL 80386 PROGRAMMER'S REFERENCE MANUAL 1986, Chapter 10

此時為實模式,cpu將執(zhí)行物理地址0xFFFFFFF0處的指令

訪址的時候,硬件將該地址映射到BIOS的ROM中

BIOS中的指令將MBR復制到物理地址0x7c00處,并跳轉到該處執(zhí)行

3、0x7C00

MBR中的指令由grub安裝而來,為grub-0.97/stage1/stage1.S

stage1將stage2的第1部分grub-0.97/stage2/start.S(512字節(jié))復制到物理地址0x8000處,并跳轉到該處執(zhí)行

stage2將剩余部分grub-0.97/stage2/asm.S復制到物理地址0x8200處,并跳轉到該處執(zhí)行

...

grub-0.97/stage2/boot.c——load_image()函數(shù)

將內(nèi)核映像bzImage的setup部分復制到物理地址0x90000

vmlinux部分復制到物理地址0x100000處

隨后跳轉到0x90200處執(zhí)行

4、0x90200

arch/x86/boot/heaer.S——_start => start_of_setup

檢查準備實模式堆棧,bss段清0,隨后調(diào)用arch/x86/boot/main.c——main()函數(shù)

main()中使用BIOS中斷讀取一些硬件信息,如內(nèi)存信息等

最后調(diào)用arch/x86/boot/pm.c——go_to_protected_mode()函數(shù)

go_to_protected_mode()設置段描述符,隨后調(diào)用arch/x86/boot/pmjump.S——protected_mode_jump()函數(shù)

protected_mode_jump()置cr0的PE位,開啟保護模式

最后跳轉到code32_start,對于bzImage即物理地址0x100000,grub復制的bzImage第2部分

5、0x100000

arch/x86/boot/compressed/head_32.S——startup_32

arch/x86/boot/compressed/misc.c——decompress_kernel()解壓內(nèi)核

解壓完成后跳轉到output

6、LOAD_PHYSICAL_ADDR

根據(jù)不同的配置,解壓后的代碼在物理內(nèi)存中的起始位置亦不同

arch/x86/kernel/head_32.S——startup_32

設置頁表,置cr0的PG位,開啟分頁

最后跳轉到arch/x86/kernel/head32.c——i386_start_kernel()函數(shù)

i386_start_kernel()中最后調(diào)用start_kernel()

7、start_kernel()

init/main.c——start_kernel()

進入c代碼部分

總結

以上是生活随笔為你收集整理的加载不同linux内核,Linux内核加载过程的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。