掃二維碼與項目經(jīng)理溝通
我們在微信上24小時期待你的聲音
解答本文疑問/技術(shù)咨詢/運營咨詢/技術(shù)建議/互聯(lián)網(wǎng)交流
Linux操作系統(tǒng)在開機時,需要啟動內(nèi)核,以便讓系統(tǒng)能夠正常運行。內(nèi)核是操作系統(tǒng)的核心組件,它負責管理操作系統(tǒng)的資源,控制系統(tǒng)的運行,處理外部設備的數(shù)據(jù)等。本文將介紹Linux開機啟動過程中如何啟動內(nèi)核。

站在用戶的角度思考問題,與客戶深入溝通,找到中山網(wǎng)站設計與中山網(wǎng)站推廣的解決方案,憑借多年的經(jīng)驗,讓設計與互聯(lián)網(wǎng)技術(shù)結(jié)合,創(chuàng)造個性化、用戶體驗好的作品,建站類型包括:網(wǎng)站建設、成都網(wǎng)站建設、企業(yè)官網(wǎng)、英文網(wǎng)站、手機端網(wǎng)站、網(wǎng)站推廣、主機域名、雅安服務器托管、企業(yè)郵箱。業(yè)務覆蓋中山地區(qū)。
1. BIOS加載
在電腦開機時,計算機會首先加載Basic Input/Output System(BIOS),BIOS是一種固化在主板固件中用于在開機時初始化硬件和啟動操作系統(tǒng)的程序。首先BIOS會進行硬件自檢,然后掃描并加載硬盤上的引導扇區(qū)。
2. 引導扇區(qū)的加載
引導扇區(qū)是硬盤上的一個區(qū)域,它負責加載操作系統(tǒng)的引導程序。在Linux系統(tǒng)中,引導程序位于/boot/grub/目錄下的grub.cfg文件中。該文件包含了操作系統(tǒng)的啟動選項和引導順序。
當BIOS加載了引導扇區(qū)后,它會掃描引導扇區(qū)的內(nèi)容,并將控制權(quán)交給引導程序。引導程序的主要作用是加載內(nèi)核,并將操作系統(tǒng)的控制權(quán)轉(zhuǎn)交給內(nèi)核。
3. 內(nèi)核加載
引導程序?qū)⒓虞d內(nèi)核的過程分為兩個階段:之一個階段和第二個階段。
之一個階段:引導程序會從硬盤中找到內(nèi)核文件,并將內(nèi)核文件加載到內(nèi)存中。內(nèi)存地址通常是0x100000(1MB),然后跳轉(zhuǎn)到此地址,進入第二個階段。
第二個階段:內(nèi)核已經(jīng)在內(nèi)存中運行,操作系統(tǒng)從此時開始啟動。內(nèi)核啟動時會執(zhí)行一些初始化操作:
1. 內(nèi)核會檢測系統(tǒng)的硬件設備,如處理器、內(nèi)存、硬盤、輸入設備等。
2. 內(nèi)核會初始化CPU,并分配CPU時間片,就像操作系統(tǒng)分配CPU時間片一樣,以便讓各個進程可以輪流執(zhí)行。
3. 內(nèi)核還會加載一些模塊,如驅(qū)動程序等,以便系統(tǒng)能夠識別硬件設備并進行相應的操作。
4. 內(nèi)核會加載root文件系統(tǒng),這是Linux操作系統(tǒng)中的核心文件系統(tǒng)。root文件系統(tǒng)包含了所有操作系統(tǒng)的文件和目錄。
5. 內(nèi)核會運行init程序,init程序是Linux操作系統(tǒng)中的之一個進程,它會初始化操作系統(tǒng),并啟動其他服務進程。
在Linux操作系統(tǒng)中,內(nèi)核是最重要的組件之一,它是操作系統(tǒng)的核心,并負責管理硬件資源和控制系統(tǒng)的運行。在Linux開機啟動過程中,首先BIOS會加載引導扇區(qū),然后引導程序會加載內(nèi)核,并將控制權(quán)交給內(nèi)核。內(nèi)核會執(zhí)行一些初始化操作,包括檢測硬件、初始化CPU、加載驅(qū)動程序和root文件系統(tǒng)等。內(nèi)核會運行init進程,初始化操作系統(tǒng),并啟動其他服務進程。
成都網(wǎng)站建設公司-創(chuàng)新互聯(lián)為您提供網(wǎng)站建設、網(wǎng)站制作、網(wǎng)頁設計及定制高端網(wǎng)站建設服務!
開機一直按E鍵即可進入內(nèi)核選擇界面。
找了蠻久解決方案的一個問題……
編輯 /etc/default/grub (比如命令:sudo gedit /etc/default/grub)
找到 hidden_timeout 數(shù)字改為10,保存
終端執(zhí)行命令:sudo update-grub
sudo reboot重啟 ,正常的話 會有一個
倒計時
那個時候按住shift 然后在菜單欄里選就ok了
啟動Linux操作系統(tǒng)后,按‘e’鍵進入Grub引導界面,選擇指定內(nèi)核進行引導。
在開機后的引導菜單里面用鍵盤上的上下方向鍵選擇,回車就可以了
修改grub.cfg
當然不能真正啟動就panic了,但是單步調(diào)試和理解內(nèi)核在x86平臺啟動已經(jīng)夠了灶罩逗。
bochs下運隱賣行l(wèi)inux3.0內(nèi)核(已驗證)
1. 構(gòu)造調(diào)試環(huán)境
由于bochs內(nèi)建調(diào)試功能, 且支持gdb, 用它調(diào)試內(nèi)核會很方便.
(文章中大部分命令的運行需要root權(quán)限,以sudo方式運行)
1.1 構(gòu)建磁盤鏡像
Shell代碼
dd if=/dev/zero of=hd0.img
count=$((63*16*100))
用這個命令可以構(gòu)建一個50MB左右的磁盤鏡像, 輸出結(jié)果如下:
100800+0 records in
100800+0 records out
bytes (52 MB) copied, 0.s, 70.3
MB/s
注意count必須為63*16的倍數(shù), 否則bochs識別硬盤會有問題.
1.2 掛載磁盤鏡像
Shell代碼
losetup /dev/loop0 hd0.img
這個命令可以將文件綁定到一個loop設備. 如果/dev/loop0不存悶首在, 可以嘗試 modprobe
loop.
然后進行設備初始化:
Shell代碼
cfdisk -s63 -h16/dev/loop0
只創(chuàng)建一個主分區(qū)就可以. 寫入后, 用命令fdisk檢查結(jié)果:
Shell代碼
fdisk -lu /dev/loop0
Disk /dev/loop0: 51 MB,bytes
16 heads, 63 sectors/track, 100 cylinders, total
sectors
Units = sectors of 1 * 512 = 512 bytes
Disk identifier: 0x
Device Boot Start End Blocks Id System
/dev/loop0p368+ 83 Linux
將分區(qū)1掛載到/dev/loop1.
Shell代碼
losetup /dev/loop1 hd0.img -o
$((63*512))
格式化/dev/loop1為ext3格式.
Shell代碼
mkfs.ext3 /dev/loop1
在mnt下創(chuàng)建img目錄, 做以后維護用.
Shell代碼
mkdir -p /mnt/img
將loop1掛載到/mnt/img
Shell代碼
mount /dev/loop1 /mnt/img/
安裝引導程序. 因為我狂熱傾向于模塊化架構(gòu), 所以選擇GRUB2.
本文以grub-1.97~beta3為示例,
讀者可自行安裝其他的引導系統(tǒng)如lilo.
Shell代碼
mkdir /mnt/img/boot
cp -r /usr/lib/grub/i386-pc/
/mnt/img/boot/grub
生成一個core.img, biosdisk負責讀取磁盤, part_msdos負責處理MBR,
ext2負責讀取ext3分區(qū).
Shell代碼
cd /mnt/img/boot/grub/
grub-mkimage -O i386-pc -o core.img biosdisk part_msdos
ext2
Shell代碼
ls -lh core.img
-rw-r–r–1 root root 25K Sep2114:28
core.img
只有區(qū)區(qū)的25K.. 里面甚至還包含一個小的應急shell, 不過作用不大.
安裝grub2到(hd0), 根目錄在(hd0,1)
Shell代碼
echo”(hd0) /dev/loop0″ >
./device.map
grub-setup -m ./device.map -d /mnt/img/boot/grub/ -r
‘(hd0,1)’ ‘(hd0)’
檢查一下安裝成果:
Shell代碼
hexdump -C /dev/loop0 | less
如果你能看到:
Shell代碼
d e8 2e00 cd18 eb
fe65|}…….GRUB .Ge|
f 6d6973 6b|om.Hard
Disk.Rea|
就說明安裝成功.
清理一下.
Shell代碼
cd
umount /mnt/img
losetup -d /dev/loop1
losetup -d /dev/loop0
1.3 啟動測試.
給上面的hd0.img配一個bochsrc文件, 可以拿bochs示例dlxlinux的配置文件來改,
只需將硬盤換為:
Shell代碼
ata0-master: type=disk, path=”hd0.img”, cylinders=100,
heads=16, spt=63
然后啟動Bochs, 順利的話, 你能看到傳說中的grub2 shell.
2. 從啟動到保護模式.
為我們的bochs虛擬機編譯一個內(nèi)核. 不必太復雜,
目前我們只關心啟動部分.
2.1 安裝內(nèi)核
退出bochs, 掛載hd0.img:
Shell代碼
mount hd0.img /mnt/img/ -o
loop,offset=$((63*512))
拷貝bzImage.
Shell代碼
cp /usr/src/linux/arch/i386/boot/bzImage
/mnt/img/boot/vmlinuz-3.0.00
這兩個步驟可以放到內(nèi)核的Makefile中, 以后每次編譯完成后,
自動更新到hd0.img里.
然后將下列配置寫到/mnt/img/boot/grub/grub.cfg
Shell代碼
# Timeout for menu
set timeout=10
# Set default boot entry as Entry0
set default=0
# Entry0- Load Linux kernel
menuentry”Linux-3.0.00″{
set root=(hd0,1)
linux
/boot/vmlinuz-3.0.00root=/dev/hda1
關于linux怎么啟動內(nèi)核的介紹到此就結(jié)束了,不知道你從中找到你需要的信息了嗎 ?如果你還想了解更多這方面的信息,記得收藏關注本站。
創(chuàng)新互聯(lián)-老牌IDC、云計算及IT信息化服務領域的服務供應商,業(yè)務涵蓋IDC(互聯(lián)網(wǎng)數(shù)據(jù)中心)服務、云計算服務、IT信息化、AI算力租賃平臺(智算云),軟件開發(fā),網(wǎng)站建設,咨詢熱線:028-86922220

我們在微信上24小時期待你的聲音
解答本文疑問/技術(shù)咨詢/運營咨詢/技術(shù)建議/互聯(lián)網(wǎng)交流