国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 系統(tǒng) > Linux > 正文

(五)Linux引導(dǎo)流程解析

2024-06-28 13:21:04
字體:
供稿:網(wǎng)友
(五)linux引導(dǎo)流程解析 Posted on 2015-04-15 12:40 wsying 閱讀(...) 評論(...) 編輯 收藏

  目錄

  • Linux引導(dǎo)流程
  • Linux運(yùn)行級別
  • Linux啟動(dòng)服務(wù)管理
  • GRUB配置與應(yīng)用
  • 啟動(dòng)故障分析與解決

Linux引導(dǎo)流程

  Linux系統(tǒng)引導(dǎo)流程如下圖:

  

  固件(Firmware)就是寫入EROM或EEPROM(可編程只讀存儲器)中的程序,一般來說,擔(dān)任著一個(gè)數(shù)碼產(chǎn)品最基礎(chǔ)、最底層工作的軟件才可以稱之為固件,比如計(jì)算機(jī)主板上的基本輸入/輸出系統(tǒng)BIOS(Basic Input/output System),在以前其實(shí)更多的專業(yè)人士叫它固件。

  通常這些硬件內(nèi)所保存的程序是無法被用戶直接讀出或修改的。在以前,一般情況下是沒有必要對固件進(jìn)行升級操作的,即使在固件內(nèi)發(fā)現(xiàn)了嚴(yán)重的Bug也必須由專業(yè)人員帶著寫好程序的芯片把原來機(jī)器上的更換下來。隨著技術(shù)的不斷發(fā)展,修改固件以適應(yīng)不斷更新的硬件環(huán)境成了用戶們的迫切要求,所以,可重復(fù)寫入的可編程可擦除只讀存儲器EPROM(Erasable Programmable ROM),EEPROM和Flash出現(xiàn)了,這些芯片是可以重復(fù)刷寫的,讓固件得以修改和升級。

  常用固件設(shè)置有:安全設(shè)置、可引導(dǎo)介質(zhì)列表、可引導(dǎo)介質(zhì)搜索順序、電源管理、啟動(dòng)細(xì)節(jié)顯示等

  

  接通微機(jī)的電源,系統(tǒng)將執(zhí)行一個(gè)自我檢查的例行程序,對系統(tǒng)的幾乎所有的硬件進(jìn)行檢測。這是固件BIOS最重要的功能,通常稱為POST——加電自檢(Power On Self Test)

  


關(guān)于系統(tǒng)時(shí)間和硬件時(shí)鐘:  

  查看當(dāng)前系統(tǒng)時(shí)間(軟件時(shí)鐘):date  查看硬件時(shí)鐘:hwclock  

  

  

  如上圖我的系統(tǒng)時(shí)間和硬件時(shí)鐘基本相同且準(zhǔn)確,如果兩個(gè)當(dāng)中有一個(gè)不準(zhǔn)確則需要參照另一個(gè)時(shí)鐘進(jìn)行同步,用hwclock --help命令查看hwclock常用選項(xiàng)的幫助信息,可以看到--hctosys選項(xiàng)是根據(jù)硬件時(shí)鐘設(shè)置系統(tǒng)時(shí)間,--systohc選項(xiàng)是根據(jù)當(dāng)前系統(tǒng)時(shí)間設(shè)置硬件時(shí)鐘

  

  如果系統(tǒng)時(shí)間和硬件時(shí)鐘都不準(zhǔn)確,我們需要重新設(shè)置,對于系統(tǒng)時(shí)間,我們用man date看看它的幫助文檔,可以看到設(shè)置系統(tǒng)時(shí)間的格式為date 月月日日時(shí)時(shí)分分年年年年.秒秒,例如設(shè)置當(dāng)前系統(tǒng)時(shí)間為2015年04月15日14時(shí)25分30秒的命令為date 041514252015.30

  

  同理我們用man hwclock查看hwclock的幫助文檔可以知道,設(shè)置硬件時(shí)鐘為2015年04月15日14時(shí)25分30秒的命令為hwclock --set --date="4/15/2015 14:25:30",當(dāng)然也可以根據(jù)當(dāng)前系統(tǒng)時(shí)間設(shè)置硬件時(shí)鐘


 

  固件在加電自檢沒有問題之后會讀取位于硬盤0柱面、0磁頭、1扇區(qū)(主引導(dǎo)扇區(qū))的MBR(主引導(dǎo)記錄Master Boot Record)。MBR由三個(gè)部分組成,自舉程序(BootLoader)、硬盤分區(qū)表DPT(Disk Partition table)和分區(qū)有效標(biāo)志(magic number)。在總共512字節(jié)的主引導(dǎo)扇區(qū)里自舉程序(BootLoader)占446個(gè)字節(jié),第二部分是硬盤分區(qū)表DPT,占64個(gè)字節(jié),硬盤中分區(qū)有多少以及每一分區(qū)的大小都記在其中。第三部分是分區(qū)有效標(biāo)志(magic number),占2個(gè)字節(jié),固定為55AA。

  

  GRUB是在Linux中廣泛應(yīng)用的BootLoader,它的配置文件是/etc/grub.conf。(Windows xp/windows server 2003中廣泛應(yīng)用的BootLoader是NT Loader,即ntldr;而Windows Vista/Windows 7/win8(.1)中取而代之的是Boot Manager,即bootmgr)

  輸入命令vi /etc/grub.conf可以編輯GRUB的配置文件。無論哪種系統(tǒng)它的自舉程序最重要的功能就是載入操作系統(tǒng)內(nèi)核,如下圖GRUB配置文件中選中部分kernel /vmlinuz-2.6.18-194.e15就是用來指定內(nèi)核所在的位置,所以如果我們在進(jìn)行內(nèi)核編譯生成新的內(nèi)核后要重新編輯一下GRUB的配置文件。/vmlinuz-2.6.18-194.e15是一個(gè)可執(zhí)行的Linux內(nèi)核文件,z表示他是一個(gè)解壓縮文件,2.6.18是內(nèi)核的版本號,其中2是主版本號,6是次版本號,次版本號若為奇數(shù)表示這是一個(gè)測試版內(nèi)核,這里次版本號為偶數(shù)6表示這是一個(gè)正式版內(nèi)核,18是末版本號。

  

  如下圖編譯好的Linux內(nèi)核位于/boot/vmlinuz-2.6.18-194.e15,他就是一個(gè)二進(jìn)制可執(zhí)行文件;而沒有編譯的Linux內(nèi)核源文件一般默認(rèn)位于/usr/src/linux文件夾下,是一堆源代碼文件

  

  在引導(dǎo)流程里載入內(nèi)核Kernel后內(nèi)核只做兩件事情:

    一是驅(qū)動(dòng)硬件。所有操作系統(tǒng)內(nèi)核中保存最多的就是硬件驅(qū)動(dòng)程序,所以想把一個(gè)操作系統(tǒng)放在一個(gè)小型硬件設(shè)備中裁剪內(nèi)核時(shí)只需要保留這個(gè)小型硬件設(shè)備所需要的驅(qū)動(dòng)。內(nèi)核驅(qū)動(dòng)硬件和固件進(jìn)行加點(diǎn)自檢是不同的,加電自檢是在物理的層面上檢測硬件可不可用,比如硬件有沒有連接好,線有沒有插錯(cuò)等;而內(nèi)核驅(qū)動(dòng)硬件是在操作系統(tǒng)(軟件)的層次上識別和調(diào)用硬件。

    二是啟動(dòng)init進(jìn)程,init進(jìn)程啟動(dòng)后會讀取/etc/inittab配置文件,執(zhí)行缺省運(yùn)行級別,從而繼續(xù)引導(dǎo)過程。在類UNIX系統(tǒng)中,init是第一個(gè)可以存在的進(jìn)程,它的pid(Process Identification)恒為1,但它也必須向一個(gè)更高級的功能負(fù)責(zé):pid為0的內(nèi)核調(diào)度器(Kernel scheduler),用來分配CPU時(shí)間片以及進(jìn)行進(jìn)程間切換。Linux是一個(gè)分時(shí)的多任務(wù)操作系統(tǒng),所謂分時(shí)就是把CPU循環(huán)周期分成小的時(shí)間片讓任務(wù)排隊(duì)處理,在一個(gè)CPU循環(huán)周期里會盡量給每一個(gè)任務(wù)分配一個(gè)時(shí)間片,如果任務(wù)在本次CPU循環(huán)周期中沒有執(zhí)行完,則在下一個(gè)CPU循環(huán)周期中還會給任務(wù)分配時(shí)間片。

    輸入進(jìn)程管理命令ps -le | more查看當(dāng)前進(jìn)程如下圖,可以看到init進(jìn)程的PID為1,PPID(Parent Process Identification)為0。

  

  

  如果父進(jìn)程中止而子進(jìn)程仍然存在,則這個(gè)子進(jìn)程被稱為孤兒進(jìn)程,在Linux系統(tǒng)中不允許有孤兒進(jìn)程的存在,所以當(dāng)系統(tǒng)檢測到孤兒進(jìn)程會自動(dòng)將它的父進(jìn)程指向?yàn)閕nit,所以init進(jìn)程理論上講是系統(tǒng)中所有進(jìn)程的父進(jìn)程。

  如果子進(jìn)程中止而父進(jìn)程不知道,還在嘗試保持與子進(jìn)程之間的聯(lián)系,這個(gè)子進(jìn)程被稱為僵尸進(jìn)程(Z),當(dāng)然在Linux系統(tǒng)中僵尸進(jìn)程也是不允許存在的。

Linux運(yùn)行級別

  輸入命令vi /etc/inittab進(jìn)入配置文件inittab,可以看到下圖選中部分為Linux系統(tǒng)(RedHat系列)默認(rèn)的運(yùn)行級別(runlevel)

  

  0 — halt  關(guān)機(jī),類似于shutdown,括號中警告不要把缺省的運(yùn)行級別設(shè)置成這個(gè)

  1 — Single user mode  單用戶模式,只有Root可以登錄,類似于Windows的安全模式,但它沒有圖形界面

  2 — Multiuser mode  多用戶模式,沒有NFS(Network File System)服務(wù)

  3 — Full multiuser mode  完整的多用戶模式,具有NFS服務(wù),可以進(jìn)行類Unix操作系統(tǒng)之間的文件共享(由于NFS的安全性較差,不推薦使用NFS進(jìn)行文件共享,所以3比2并沒有優(yōu)勢)

2和3都是沒有圖形界面的,是應(yīng)用最多的服務(wù)器運(yùn)行模式

  4 — unused  沒有被使用的運(yùn)行級別,可以由用戶自定義

  5 — X11  系統(tǒng)缺省的運(yùn)行級別,是圖形化的多用戶模式(比3多個(gè)圖形界面)。X即圖形環(huán)境X-window,11是其版本號

  6 — reboot  重啟,同樣不要把缺省的運(yùn)行級別設(shè)置成這個(gè)

關(guān)于運(yùn)行級別的命令:

  輸入runlevel可以查看當(dāng)前的運(yùn)行級別,輸入init 運(yùn)行級別或telinit 運(yùn)行級別可以切換當(dāng)前的運(yùn)行級別(telinit是init的軟鏈接文件,所以這兩個(gè)實(shí)際上是同一命令)

  

inittab文件剖析

  輸入man inittab可以查看配置文件inittab的幫助文檔如下:

  

  從中可以看出,在配置文件inittab中所有條目采取此格式:id:runlevels:action:process

  id:腳本/命令標(biāo)識符,一般由兩位字母或數(shù)字組成

  runlevels:指定腳本/命令的運(yùn)行級別,表示可在此運(yùn)行級別下執(zhí)行,可以指定多個(gè),若不指定則表示在所有運(yùn)行級別下均可執(zhí)行

  action:指定腳本/命令的運(yùn)行狀態(tài)

  process:指定要運(yùn)行的腳本/命令,前面三項(xiàng)皆為此項(xiàng)的修飾

  輸入grep -v "^#" /etc/inittab | more分頁瀏覽配置文件inittab中非注釋內(nèi)容如下:

  

  action常用取值如下:

  initdefault:指定系統(tǒng)啟動(dòng)時(shí)缺省的運(yùn)行級別,如上圖inittab中的第一行id:5:initdefault: 指定系統(tǒng)啟動(dòng)時(shí)缺省的運(yùn)行級別為5

  sysinit:該狀態(tài)下系統(tǒng)啟動(dòng)就會執(zhí)行process中指定的命令,如上圖inittab中的第二行si::sysinit:/etc/rc.d/rc.sysinit只要系統(tǒng)啟動(dòng)就會執(zhí)行一次Shell腳本文件/etc/rc.d/rc.sysinit(不論在哪個(gè)運(yùn)行級別下),完成系統(tǒng)服務(wù)程序啟動(dòng),如系統(tǒng)環(huán)境變量設(shè)置、設(shè)置系統(tǒng)時(shí)鐘、加載字體、檢查加載文件系統(tǒng)、生成系統(tǒng)啟動(dòng)信息日志文件等。

  wait:執(zhí)行process中指定的命令,并等其結(jié)束再運(yùn)行其他命令

  once:執(zhí)行process中指定的命令,不等待其結(jié)束

  ctrlaltdel:按下Ctrl+Alt+Del時(shí)執(zhí)行process指定的命令

  powerfail:當(dāng)出現(xiàn)電源錯(cuò)誤時(shí)執(zhí)行process指定的命令,不等待其結(jié)束

  powerokwait:當(dāng)電源恢復(fù)時(shí)執(zhí)行process指定的命令

  respawn:一旦process指定的命令中止,便重新運(yùn)行該命令

  上圖inittab中的三到九行如下:

l0:0:wait:/etc/rc.d/rc 0l1:1:wait:/etc/rc.d/rc 1l2:2:wait:/etc/rc.d/rc 2l3:3:wait:/etc/rc.d/rc 3l4:4:wait:/etc/rc.d/rc 4l5:5:wait:/etc/rc.d/rc 5l6:6:wait:/etc/rc.d/rc 6

  腳本/etc/rc.d/rc的作用是啟動(dòng)對應(yīng)運(yùn)行級別下的服務(wù),上述七行設(shè)置段分別對應(yīng)了七個(gè)不同的運(yùn)行級別,因?yàn)榈谝恍性O(shè)置的缺省運(yùn)行級別是5,所以會執(zhí)行l(wèi)5:5:wait:/etc/rc.d/rc 5這一行,調(diào)用/etc/rc.d/rc腳本,執(zhí)行運(yùn)行級別5目錄(/etc/rc.d/rc5.d)下的服務(wù)程序,完成運(yùn)行級別5的初始化設(shè)置

  /etc/rc.d/rc[0123456].d目錄下分別存放了對應(yīng)于運(yùn)行級別的服務(wù)程序腳本的符號鏈接(文件名分三部分,第一部分分兩種:S開頭意為Start,表示此運(yùn)行級別下啟動(dòng)這個(gè)服務(wù);K開頭意為Kill,表示此運(yùn)行級別下關(guān)閉這個(gè)服務(wù)。第二部分?jǐn)?shù)字表示腳本的啟動(dòng)順序,理論上數(shù)字越小越優(yōu)先啟動(dòng),數(shù)字相同則按照腳本創(chuàng)建的順序依次啟動(dòng)。第三部分是腳本名稱),鏈接到/etc/rc.d/init.d目錄下的相應(yīng)腳本,缺省運(yùn)行級別5目錄(/etc/rc.d/rc5.d)下服務(wù)程序腳本的符號鏈接如下:

  

  如要取消某運(yùn)行級別下某服務(wù)的開啟與關(guān)閉,只需到該運(yùn)行級別目錄下改變該服務(wù)程序腳本的符號鏈接名,如取消運(yùn)行級別5下sendmail服務(wù)的啟動(dòng)只需到/etc/rc.d/rc5.d目錄下輸入mv S80sendmail s80sendmail把S改成小寫s,則在下次初始化運(yùn)行級別5時(shí)則不啟動(dòng)sendmail服務(wù)(如要恢復(fù)只需把s改回S)

  /etc/rc.d/rc[0123456].d目錄下存放的僅是服務(wù)程序腳本的符號鏈接,所鏈接到的服務(wù)程序腳本位于/etc/rc.d/init.d目錄下,如下圖所示:

  


發(fā)表評論 共有條評論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 富裕县| 宾阳县| 夏邑县| 读书| 巴彦淖尔市| 新宁县| 盘锦市| 荣昌县| 甘德县| 辽阳县| 温宿县| 青河县| 遵化市| 华池县| 麻栗坡县| 荥阳市| 津市市| 调兵山市| 岱山县| 中卫市| 黔东| 郸城县| 客服| 盱眙县| 大竹县| 宣武区| 米泉市| 太白县| 阜新| 杂多县| 武冈市| 安西县| 宝鸡市| 淮北市| 三原县| 临江市| 白玉县| 黄平县| 遵义市| 星座| 正镶白旗|