亚洲免费在线-亚洲免费在线播放-亚洲免费在线观看-亚洲免费在线观看视频-亚洲免费在线看-亚洲免费在线视频

鳥哥的linux私房菜——第20章 啟動流程、模塊管

系統 1802 0

20.1 Linux啟動流程分析

Linux啟動過程:

按下開機電源后計算機硬件主動讀取BIOS來加載硬件信息以及硬件系統的自我測試,之后系統會主動讀取第一個可啟動的設備(由BIOS設置),此時就可以讀入引導加載程序(boot loader)了,引導加載程序指定使用那個內核文件來啟動,并實際加載內核到內存中解壓縮與執行,此時內核就能夠在內存中活動,并檢測所有硬件信息與加載適當的驅動程序來使主機運行,等內核檢測硬件與加載驅動程序完畢后,就可以登錄了。

1)加載BIOS的硬件信息與進行自我測試,并依據設置取得第一個可啟動的設備

2)讀取并執行第一個啟動設備內MBR的boot Loader(即grub,spfdisk等程序)

3)依據boot loader的設置加載內核,內核開始檢測硬件和加載驅動程序

4)在硬件驅動成功后,Kernel會主動調用init進程,而init會取得run-level信息

5)init執行/etc/rc.d/rc.sysinit文件來準備軟件執行的操作環境

6)init執行run-level的各個服務的啟動

7)init執行/etc/rc.d/rc.local文件

8)init執行終端機模擬程序mingetty來啟動login進程,最后等待用戶登錄

?

Boot Loader的主要功能:

提供菜單:用戶可以選擇不同的啟動選項,也是多重引導的重要功能

加載內核文件:直接指向可啟動的程序區段來開始操作系統

轉交其他loader:將引導裝載功能轉交給其他loader負責

?

問題1):每種操作系統都有自己的boot loader,對于多操作系統,每個操作系統必須使用自己的loader才能加載自己的操作系統內核,而系統的MBR只有一個,怎么能同時在一部主機上安裝windows和linux呢

答案:由于boot loader具有菜單功能,因此可以選擇不同的內核來啟動。由于具有控制權轉交的功能,因此可以加載其他boot sector內的loader,(windows的loader默認布局有控制權轉交功能,因此不能用windows的loader加載linux的loader)

?

問題2):假設linuux安裝在SATA硬盤上,可以通過BIOS的INT13取得boot loader與kenerl文件來啟動,然后kernel會開始接管系統并且檢測硬件及嘗試掛載根目錄來取得額外的驅動程序。但是內核根本不認識SATA磁盤,所以需要加載SATA磁盤的驅動程序,否則根本無法掛載根目錄,但是SATA的驅動程序在/lib/modules內,根本無法掛載根目錄,又怎么能讀取到/lib/modules內的驅動程序呢?

答案:通過虛擬文件系統解決,一般使用的文件名是/boot/initrd。該文件能夠通過boot loader加載到內存中,文件被解壓縮并在內存中仿真成一個根目錄,且此仿真在內存中的文件系統能夠提供一個可執行程序,通過該程序來加載啟動過程中所需要的內核模塊,通常是USB,RAID,LVM,SCSI等文件系統與硬盤接口的驅動程序。等載入完成后,會幫助內核重新調用/sbin/init來開始后續的正常流程

(如果linux安裝在IDE接口的磁盤上,且默認使用ext2/ext3文件系統,那么不需要initrd也能順利啟動linux)

?

內核加載完畢進行完硬件檢測與驅動程序加載后,主機硬件就已經準備就緒來,此時內核會主動調用第一個進程,就是/sbin/init (init的PID為1),/sbin/init的主要功能就是準備軟件執行的環境,包括系統主機名、網絡設置、語系處理、文件系統格式及其他服務的啟動。而所有的操作都會通過init的配置文件/etc/inittab來規劃

inittab一個很重要的設置選項就是run level

0——halt (系統直接關機)

1——single user mode(單用戶維護模式,用在系統出問題時維護)

2——Multi-user,without NFS(類似run level3,但無NFS服務)

3——Full multi-user mode(完整含有網絡功能的純文本模式)

4——unused (系統保留功能)

5——X11(與run level3 類似,但加載使用X Windows)

6——reboot (重新啟動)

?

在/etc/inittab里有一句:"si::sysint:/etc/rc.d/rc.sysinit"表示:開始加載各項系統服務之前,得先設置好整個系統環境,主要利用/etc/rc.d/rc.sysinit這個shell script 來設置好系統環境的

?

啟動系統服務與相關啟動配置文件(/etc/rc.d/rc N & /etc/sysconfig)

/etc/rc.d/rc5的意義是這樣的:

通過外部第一號參數($1)來取得想要執行的腳本目錄,即由/etc/rc.d/rc 5可以取得/etc/rc5.d/這個目錄來準備處理相關的腳本程序

找到/etc/rc5.d/K??*開頭的文件,并進行/etc/rc5.d/K??* stop 的操作

找到/etc/rc5.d/S??*開頭的文件,并進行/etc/rc5.d/S??* start的操作

(/etc/rc5.d下的文件全部是鏈接文件,鏈接到stand alone服務啟動的目錄/etc/init.d中)

如/etc/rc5.d/K91capistop-->/etc/init.d/capistop

/etc/rc5.d/S10networkstart--> /etc/init.d/networdkstart?

S和K后的數字表示文件執行的順序,S99local就是/etc/rc.d/rc.local是最后執行

?

用戶自定義開機啟動程序(/etc/rc.d/rc.local)

如果用戶有任何想要在啟動時進行的工作,直接將它寫入/etc/rc.d/local,那個該工作就會在啟動的時候自動加載

?

啟動過程會用到的主要配置文件:

1)模塊:/etc/modprobe.conf (這個文件大多在于指定系統內的硬件所使用的模塊,如果系統檢測到錯誤的驅動程序,或者你想要使用更新的驅動程序來對應相關的硬件配備時,就得要手動處理該文件)

2)/etc/sysconfig/*下的幾個文件:

authconfig 這個文件主要設置用戶的身份認證的機制,包括是否使用本地/etc/passwd,/etc/shadow等

clock 該文件用于設置linux主機的失去,可以使用格林威治時間,也可以使用本地時間

i18n 用于設置一些語系的使用方面

keyboard&mouse 設置鍵盤與鼠標的形式

network 可以設置是否啟動網絡,以及設置主機名還有網關信息

network-scripts 主要用于設置網卡

?

切換run level: init N

顯示當前的run level :runlevel   (輸出結果左邊代表前一個runlevel,右邊代表目前的runlevel)

init 0 關機

init 6 重啟

?

?

20.2 內核與內核模塊

內核和內核模塊存放位置:

內核:/boot/vmlinuz或/boot/vmlinuz-version

內核解壓所需RAMDisk:/boot/initrd (/boot/initrd-version)

內核模塊:/lib/modules/version/kernel或 /lib/modules/$(uname -r)/kernel

內核源碼:/usr/src/linux 或/usr/src/kernels(要安裝才會有,默認不安裝)

內核版本:/proc/version

系統內核功能:/proc/sys/kernel

?

內核模塊與依賴性:

/lib/modules/$(uname -r)/modules.dep文件記錄了在內核支持的模塊的各項依賴性

例如,做好的網卡驅動程序,文件名為a.ko,如何更新內核依賴性?

使用depmod命令就可以實現(depmod [-Ane])

cp a.ko /lib/module/$(uname -r)/kernel/driver/net

depmod

?

內核模塊的查看:

lsmod

使用lsmod后,系統會顯示出目前已存在與內核中的模塊,顯示包括:模塊名稱module、模塊的大小size、此模塊是否被其他模塊所使用Used by

modinfo [-adln] [module_name|filename]

如:modinfo wmi

?

內核模塊的加載與刪除:

如果想要自行手動加載模塊,最簡單也建議使用modprobe命令來加載模塊,因為modprobe會主動查找modules.dep的內容,先克服了模塊的依賴性后,菜決定需要加載的模塊有哪些。insmod則完全有用戶加載一個完整文件名的模塊,并不會主動分析模塊依賴性

modprobe [-lcfr] module_name

insmod [/full/path/module_name] [parameters]

例如:嘗試載入cifs.ko這個文件系統模塊

insmod /lib/module/$(uname -r)/kernel/fs/cifs/cifs.ko

lsmod | grep cifs

刪除模塊:rmmod [-fw] module_name

?

?

20.3 Boot Loader:Grub

boot loader的程序代碼執行與設置值加載分為兩個階段來執行

stage1:執行boot loader主程序(這個主程序必須要安裝在啟動區,即MBR或者boot sector,因為MBR實在太小來,所以MBR或boot sector通常僅安裝boot loader最小主程序,并沒有安裝loader的相關配置文件)

stage2:通過boot loader加載所有配置文件與相關的環境參數文件(包括文件系統定義與主要配置文件menu.lst),一般來說,配置文件都在/boot下

?

安裝在MBR的grub主程序最終要的任務之一就是從磁盤中加載內核文件,以讓內核能夠順利驅動整個系統的硬件

grub的硬盤代號如hd(0,0)表示第一塊查找到的硬盤代號為(hd0),該硬盤的第一號分區為(hd0,0)

?

/boot/grub/menu.lst (grub.cfg)

default=0  默認的啟動選項,使用第一個啟動菜單

timeout=5?  若5秒內未動鍵盤,使用默認菜單啟動

hiddenmenu 讀秒期間是否顯示完整的菜單界面

?

需要initrd時刻為:

根目錄所在磁盤為SATA、USB或SCSI等連接接口

跟母所在文件系統為LVM、RAID等特殊格式

根目錄所在文件系統為非傳統Linux“認識”的文件系統

其他必須要在內核加載時提供的模塊

?

可以使用mkinitrd命令來重制initrd文件

mkinitrd [-v] [--with=模塊名稱] initrd文件名 內核版本

例1:以mkinitrd的默認功能創建一個initrd虛擬硬盤文件

mkinitrd -v initrd_$(uanem -r) ?$(uname -r)

例2:增加8139too這個模塊的initrd文件

mkinitrd -v --with=8139too initrd_vbirdtest ?$(uname -r)

?

安裝grub(grub-install是安裝grub相關的文件到設備上去等待在啟動時被讀取,但還需要設置好配置文件menu.lst后,再以grub shell來安裝grub主程序到MBR或者boot sector上面去)

grub-install [--root-directory=DIR] ?INSTALL_DEVICE

例1:將grub安裝到目前系統的MBR下面,我的系統為/dev/had

grub-install /dev/hda

例2:我的/home為獨立的/dev/sda3,如何安裝grub到/dev/sda3

grub-install --root-directory=/home /dev/sda3

?

內核功能中的vga設置

解決tty1~tty6的分辨率問題

首先產看是否支持FRAMEBUFFER_CONSOLE這個內核功能參數

grep 'FRAMEBUFFER_CONSOLE' ?/boot/config-3.2.0-23-generic-pae (如果出現CONFIG FRAMEBUFFER CONSOLE=y表示有支持)

修改分辨率 vi /boot/grub/menu.lst (或者是grub.cfg文件 添加紅色部分)

menuentry 'Ubuntu,Linux 3.2.0-67-generic-pae' --class ubuntu --class gnu-linux --class gnu --class os {
recordfail
gfxmode $linux_gfx_mode
insmod gzio
insmod part_msdos
insmod ext2
set root='(hd0,msdos1)'
search --no-floppy --fs-uuid --set=root c6008246-e4ee-490f-bec6-3f72108424dd
linux /boot/vmlinuz-3.2.0-67-generic-pae root=UUID=c6008246-e4ee-490f-bec6-3f72108424dd ro quiet splash $vt_handoff vga=790
initrd /boot/initrd.img-3.2.0-67-generic-pae
}

790對應著1024*768的分辨率,還有其他參數,如784~795,769,771,773,775

?

20.4啟動過程的問題解決

1)忘記密碼

a.重新啟動

b.啟動進入grub菜單后,在要進入的菜單上按“e” 進入菜單設置

grub edit>kernel /vmlinuz-2.6.18-92.e15 ro root=LABEL=/ rhgb quiet single

(我的ubuntu下應該是linux /boot/vmlinuz-3.2.0-67-generic-pae root=UUID=c6008246-e4ee-490f-bec6-3f72108424dd ro quiet splash $vt_handoff single

按下enter在按b就能夠啟動進入單用戶維護模式

c.進入單用戶模式后,就可以執行shell,輸入passwd就能夠重新root密碼,在執行init 5可以切換成X窗口界面

?

2)init配置文件錯誤

a.同樣啟動進入grub后

grub edit>kernel /vmlinuz-2.6.18-92.e15 ro root=LABEL=/ rhgb quiet? init=/bin/bash

將內核調用的第一個進程init變成/bin/bash

b.在shell中輸入mount -o remount,rw /(將根目錄重新掛載成可讀寫)

mount -a(參考/etc/fstab的內容重新掛載文件系統)

c.然后進行救援工作,完畢后,重啟一次就可以了

?

鳥哥的linux私房菜——第20章 啟動流程、模塊管理與loader


更多文章、技術交流、商務合作、聯系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯系: 360901061

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對您有幫助就好】

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦!!!

發表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 免费看欧美毛片大片免费看 | 99精品欧美一区二区三区美图 | 一级国产视频 | 精品一区二区三区色花堂 | 欧美天天综合 | 一级毛片aa | 国产乱在线观看视频 | 国产在线2021 | 四虎影视在线影院www | 99在线小视频 | 日韩欧美国产一区二区三区四区 | 国产在线91精品入口首页 | 欧美啪啪网站 | 亚洲伦理中文字幕一区 | 精品亚洲欧美中文字幕在线看 | 欧美极品福利视频在线播放 | 亚洲国产福利精品一区二区 | 欧美毛片 | 久久99影院网久久久久久 | 中文字幕第一页国产 | 一区二区三区在线 | 欧美日韩一区二区三 | 亚洲综合专区 | 久久伊人成人 | 色久激情 | 九九视频精品全部免费播放 | 亚洲精品美女久久777777 | 伊人狼人综合网 | 精彩视频一区二区三区 | 香蕉尹人 | 能在线观看的一区二区三区 | 福利院肉动漫视频在线观看 | 国产香蕉精品视频在 | 久热精品视频在线 | 成人一区二区免费中文字幕 | 成人影院vs一区二区 | 九草在线免费观看 | 午夜综合 | 国内精品一区二区三区最新 | 中国国产一级毛片 | 久久成人18 |