原貼:http://www.ownlinux.cn/2008/11/20/from-grub-to-kernel-to-rootfiesystem/
登雲梯 於 2008-11-20,01:50 瀏覽(161)
按下電源,咔一下,電腦啟動啦,接著bios的畫面出來啦,不一會,grub的介面出來,然後就是一行接一行的字元在黑屏上閃動,不時地有ok的字樣出現.呵呵,不要走神哈,該輸入使用者名稱和密碼啦,….成功地進入了系統,這算是系統啟動完成啦。那麼這個過程到底有什麼事情發生啦,哪些值得我們學習呢?本文就以linux 開機為線索,講述引導器,核心,根檔案系統的關係。
1)引導器
這個是大家所熟知的吧,linux下常用的就有:grub,這是當今主流啦;lilo,這啊,曾經風光過,現在讓grub接了重任;syslinux這是個輕量級的引導器,一般在光碟,usb上做引導器,做個liveusb的應該很清楚哦,無盤啟動的應用中也能找到它的身影.
引導器的主要功能就是找到核心(vmlunuz),然後把它載入記憶體,當然還有initrd啦,以grub為例,在我的系統(centos5.2)裡是這麼寫的
#/boot/grub/menu.lst
title centos 5.2 kernel-2.6.18-92.1.17.el5
root (hd0,7)
kernel /vmlinuz-2.6.18-92.1.17.el5 root=/dev/volgroup00/logvol00
initrd /initrd-2.6.18-92.1.17.el5.img
boot
在這明確了核心的位置,並向核心傳遞了一些引數。initrd扮了乙個很重要的角色 ,負責在核心訪問根檔案系統前載入驅動。
2)核心
乙個完整的核心就是由核心原始碼產生的,在這kernel.org 能找到原始碼,壓縮後有50m左右,解開後有好幾百m呢,我們可以重新編譯原始碼來更新我們已有的核心,以提高效能和相容能力。那麼這個原始碼經編譯後產出了哪些東東呢,出以我的機子為例:
a)核心部分,在/boot分割槽下
/boot/initrd-2.6.18-92.1.17.el5.img
/boot/system.map-2.6.18-92.1.17.el5…………….這是符號表,函式與位址的對映關係
/boot/vmlinuz-2.6.18-92.1.17.el5
/boot/config-2.6.18-92.1.17.el5………………………..核心的配置檔案,由make xconfig命令產生的
b) 核心模組部分,在/lib/modules/2.6.18-92.1.17.el5目錄下 ,2.6.18-92.1.17.el5這是版本號,每乙個人的機子上可能會不同。所有模組都在這,還有它們之間的依賴關係
[root@xx 2.6.18-92.1.17.el5]# pwd
/lib/modules/2.6.18-92.1.17.el5
[root@xx 2.6.18-92.1.17.el5]# ls -l
總計 1128
lrwxrwxrwx 1 root root 48 11-11 20:14 build -> ../../../usr/src/kernels/2.6.18-92.1.17.el5-i686
drwxr-xr-x 2 root root 4096 11-05 03:09 extra
drwxr-xr-x 10 root root 4096 11-11 20:28 kernel ……………………………核心模組就中此目錄
drwxr-xr-x 2 root root 4096 11-13 14:50 misc
-rw-r–r– 1 root root 252332 11-13 14:50 modules.alias
-rw-r–r– 1 root root 69 11-13 14:50 modules.ccwmap
-rw-r–r– 1 root root 209702 11-13 14:50 modules.dep…………………….模組間的依賴關係
-rw-r–r– 1 root root 147 11-13 14:50 modules.ieee1394map
-rw-r–r– 1 root root 375 11-13 14:50 modules.inputmap
-rw-r–r– 1 root root 2314 11-13 14:50 modules.isapnpmap
-rw-r–r– 1 root root 74 11-13 14:50 modules.ofmap
-rw-r–r– 1 root root 191108 11-13 14:50 modules.pcimap……………….物理裝置與核心模組的對應關係
-rw-r–r– 1 root root 589 11-13 14:50 modules.seriomap
-rw-r–r– 1 root root 105259 11-13 14:50 modules.symbols
-rw-r–r– 1 root root 322731 11-13 14:50 modules.usbmap
lrwxrwxrwx 1 root root 5 11-11 20:14 source -> build
drwxr-xr-x 2 root root 4096 11-05 03:09 updates
drwxr-xr-x 4 root root 4096 11-11 20:14 weak-updates
注意source,build這兩個目錄,在裝顯示卡驅動時就認識它們倆了吧,
c)標頭檔案及相關的核心配置檔案
/usr/src/kernels/2.6.18-92.1.17.el5-i686,在構造或者是編譯相關核心模組就要用到這個地方的檔案,在安裝顯示卡驅動的時候就是這個目錄下的東東,有沒有什麼映象啊,為什麼呢?當然是想看看3d桌面啦,是不是啊。。。。
[root@xx 2.6.18-92.1.17.el5-i686]# pwd
/usr/src/kernels/2.6.18-92.1.17.el5-i686
[root@xx 2.6.18-92.1.17.el5-i686]# ls
arch drivers init kernel mm net sound
block fs ipc lib module.kabi scripts symsets-2.6.18-92.1.17.el5.tar.gz
crypto include kabi_whitelist makefile module.symvers security usr
標頭檔案在include目錄下
3)根檔案系統
根檔案系統很熟悉撒,開機後進入的系統就在根檔案系統裡,有/boot,/usr,/bin,/var等等
引導器,核心,根檔案系統 ,有了乙個大概的映象了,現在就說說它們之事有一些事兒。
引導器找核心,如grub它自代了一點驅動可以讀核心所處的檔案系統,如syslinux它是通過扇區位址找到的核心,initrd內有個名叫linuxrc或init的可執行檔案(shell指令碼也可以),提供乙個虛根環境,載入硬碟驅動,讀取根檔案系統,為核心換根(從虛根環境到根檔案系統)做個物質準備。核心換到根檔案系統後,以前的虛根環境被umount掉啦,至此核心就可載入它所需要的核心模組啦,然後系統就啟動啦
歸類於:
新手上路
標籤:
grub
, initrd
, linux.
核心模組編寫從入門到放棄
我是第一次接到寫核心模組的作業,基本是從零開始。該文章適合什麼都不會的小白圍觀,有錯誤希望指正。以我做的ip包加密任務為例,學習核心模組的編寫。使用的環境是ubuntu和c語言環境。核心模組的編寫和核心版本息息相關,不同的版本的核心函式名和資料結構名都不同,由於網上的教程一般比較老,因此在初學的時候...
從邊緣到核心,PCIe Switch需要貴人相助!
快閃儲存器市場上,nvme發展速度可以用出乎意料來形容,總之普及速度超快。在我看來,原因也很簡單,當ssd解決了磁碟低i o 效能的問題,這個瓶頸消失後,iscsi儲存傳輸協議的瓶頸,特別是時延的問題就會凸顯出來。從技術上,nvme專門針對ssd的特點而設計,解決了儲存傳輸協議,nvme ssd成為...
核心 從Linux核心原始碼結構縱覽核心
從linux核心原始碼結構縱覽核心 architecture的子目錄是各個cpu的架構的名字,為各種不同的cpu架構服務。雖然總體量很大,但對於關注x86和arm來說,也只佔很小一部分 driver目錄分類為各種不同的裝置驅動,而雖然裝置驅動五花八門,但是他們的結構是高度相似的,讀者可以根據工作需要...