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

歡迎訪問 生活随笔!

生活随笔

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

linux

Linux入门之系统启动过程及初始化----“翻滚吧,牛宝宝”

發布時間:2025/3/20 linux 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Linux入门之系统启动过程及初始化----“翻滚吧,牛宝宝” 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

? ? 每當你按下開機電源鍵的時候,總是懷著一顆虔誠的心,抱著求神拜佛的念頭,祈求機器順利開機,不要出幺蛾子;每當你看到屏幕上輸出的一行又一行的信息,綠的OK,紅的failed,迷茫的眼神穿透了顯示器;這一切都是因為你不懂系統的啟動過程及初始化流程。在這里,力圖將Linux系統的啟動過程及初始化描述清楚,闡述好背后的原理。在撰寫本文的時候,必定會因為個人對知識理解的偏差,知識面的狹窄也限制了博文內容,因此,希望小友們能夠提出寶貴意見。

Linux系統的啟動及初始化是Linux學習過程中非常重要的一個點,只有洞悉系統啟動過程、初始化了哪些內容,才能對Linux有更加深入的了解。本文主要描述Linux系統從電腦開機到初始化完成整個過程,包括cpu加電自檢、bios尋找啟動項、bootloader加載系統內核、系統啟動并初始化等等。




一、“人生”第一步,加電自檢

POST(Power on self test)。電腦開機通上電源后第一件事便是給cpu加載電源,cpu需要對硬件設備等外設進行檢測,以便于啟動系統。然后cpu本身是不存儲任何信息的,所以,cpu根據固定在內部的指向信息,從COMS中加載BIOS里存儲的內容,對各個硬件如硬盤、PCI設備、內存等進行檢測。如果出現錯誤,如內存沒有插好,電腦會發出警報,無法啟動;(這一步也可以算作是BIOS的工作)

二、BIOS的主要任務

BIOS中的信息被加載到cpu中,cpu負責將這些程序運行起來,一是進行自檢,對周邊的硬件設備進行檢測,確保系統啟動的硬件環境;二是,在自檢完成之后,由于電腦中可能存在多個能夠用于啟動系統的驅動器,所以,需要根據BIOS中啟動順序(boot sequence)的設定,找到啟動系統的驅動器。例如我們的硬盤。BIOS會去讀取硬盤上的第一個扇區(512K):MBR(master boot recoder)。至于MBR中是什么內容,怎樣來啟動系統,BIOS并不關心。它只負責讀取該扇區上的數據和程序。

三、“咽喉”MBR

主引導分區記錄分為三段,第一段是446K的bootloader,第二段是硬盤分區表,第三段是硬盤有效標志(也可稱魔術區)。bootloader是啟動系統的核心模塊,cpu根據上面安裝的管理器(我們這里以最常見的grub為例)加載系統內核。

四、“光明之路”Bootloader

bootloader是系統的啟動加載器。通常情況下,引導程序都安裝在bootloader中。以我們常見的grup為例,grub分為stage1,stage1.5,stage2。其中stage1的代碼是直接存放在mbr中的。當BIOS將控制權傳遞給MBR后,stage1的代碼就開始運行,它主要負責將stage1.5或者stage2的內容加載在內存中。stage2被加載到內存中后,就會讀取grub的配置文件grub.conf。grub.conf的主要內容如下:

[root@station47 grub]# cat grub.conf # grub.conf generated by anaconda # # Note that you do not have to rerun grub after making changes to this file # NOTICE: You have a /boot partition. This means that # all kernel and initrd paths are relative to /boot/, eg. # root (hd0,0) # kernel /vmlinuz-version ro root=/dev/mapper/vg0-root # initrd /initrd-[generic-]version.img #boot=/dev/sda #指定默認啟動的內核或者os default=0 #等待用戶選擇需要啟動的內核或者os的時常,時間為秒 timeout=5 #啟動時顯示的圖片 splashp_w_picpath=(hd0,0)/grub/splash.xpm.gz #隱藏選擇菜單 hiddenmenu #啟動時顯示的名稱 title CentOS (2.6.32-358.el6.x86_64) #系統內核所在的磁盤root (hd0,0) #指定內核文件及傳遞給內核的參數kernel /vmlinuz-2.6.32-358.el6.x86_64 ro root=/dev/mapper/vg0-root rd_NO_LUKS rd_NO_DM LANG=en_US.UTF-8 rd_LVM_LV=vg0/swap rd_NO_MD SYSFONT=latarcyrheb-sun16 crashkernel=auto rd_LVM_LV=vg0/root KEYBOARDTYPE=pc KEYTABLE=us rhgb crashkernel=auto quiet rhgb quiet #initrd為加載真正系統文件系統前加載的虛擬文件系統(在centos5.0上為虛擬磁盤initrd,在centos6.0上為initramfs虛擬文件系統)initrd /initramfs-2.6.32-358.el6.x86_64.img [root@station47 grub]#

讀取配置文件后,系統內核會初始化一部分的設備和文件,但是由于真正的系統內核是在磁盤上文件系統上的,而此時磁盤文件系統還沒有被加載。并且,由于底層硬件設備平臺的巨大差異,內核也不可能將全部的驅動程序都包含進來。這個時候,initramfs出馬了。它是一個虛擬的文件系統,在安裝操作系統的時候,一部分的安裝信息和硬件驅動程序就被寫入進去。這樣,當grub配置文件被讀取后,initramfs中的內容會被復制到rootfs中,內核從中讀取必須的驅動模塊,掛載真正的“根”,完成這些工作后,虛擬文件系統的內容會被復制到系統中,然后從內存中銷毀。控制權被交接給/sbin/init程序來進行初始化

五、系統初始化

? ?/sbin/init接收到系統初始化的工作后,馬上開始工作。它是所有系統進程的父進程,pid永遠為1。它接管了系統的控制權先之后,它首先會去讀取/etc/inittab文件來執行相應的腳本進行系統初始化,如設置鍵盤、字體,裝載模塊,設置網絡等。inittab主要的任務有:

? ? 設置系統默認的運行級別

? ? ? ? 定義運行系統的系統初始化腳本rc.sysinit

? ? ? ?啟動指定級別下的S開頭的服務,關閉K開頭的服務

? ? ? ?定義CtrlAltDel組合操作

? ? ? ?啟動字符端終端

? ? ? ?啟動圖形終端

1.執行初始腳本rc.sysinit

? ?sysinit做了系統初始化的大部分的工作,不辭辛勞的掛載文件系統,啟動相應運行級別上的服務。主要有以下內容:

? ?設定主機名,激活selinux和udev,掛載文件系統,激活swap,以讀寫方式重新掛載根文件系統,設置內核參數,設置系統時鐘,鍵盤映射,加載額外的驅動程序。

? ?rc.sysinit執行完成后,系統基本上就算是啟動了。可以正常工作了。但是還需要啟動相關的系統服務才行。

2.執行/etc/rc.d/rc#.d腳本,根據系統inittab配置文件設定的系統運行級別,執行不同目錄下的服務腳本,K開頭的為關閉的服務,S開頭的為需要開啟的服務。

3.執行用戶定義的引導程序/etc/rc.d/rc.local

我們可以自己定義屬于自己的啟動腳本,一般情況下可以放到該目錄下。

4.初始工作完成,啟動系統,看到登錄界面

六、最淺薄的認識給最需要學習的自己

簡單的描述了系統啟動及初始化的主要流程。但是,由于初學,windows的影響,必定有很多地方認識有誤,也會有很多地方遺漏。但是,奔跑的人從來不在于起步時姿勢是否好看,重要的是,一直在朝著正確的方向奔跑。

最后附一張來自網絡的圖,非常詳細和明晰,由于沒有找到相關作者,這里注明是從網絡上獲取,謝謝作者。

轉載于:https://blog.51cto.com/sweetweapen/1367801

總結

以上是生活随笔為你收集整理的Linux入门之系统启动过程及初始化----“翻滚吧,牛宝宝”的全部內容,希望文章能夠幫你解決所遇到的問題。

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