linux內(nèi)核解析慧知文庫(kù)

linux內(nèi)核解析慧知文庫(kù)

ID:17585805

大?。?84.00 KB

頁(yè)數(shù):65頁(yè)

時(shí)間:2018-09-03

linux內(nèi)核解析慧知文庫(kù)_第1頁(yè)
linux內(nèi)核解析慧知文庫(kù)_第2頁(yè)
linux內(nèi)核解析慧知文庫(kù)_第3頁(yè)
linux內(nèi)核解析慧知文庫(kù)_第4頁(yè)
linux內(nèi)核解析慧知文庫(kù)_第5頁(yè)
資源描述:

《linux內(nèi)核解析慧知文庫(kù)》由會(huì)員上傳分享,免費(fèi)在線閱讀,更多相關(guān)內(nèi)容在教育資源-天天文庫(kù)

1、Linux內(nèi)核解析0.6原文地址:http://www.jactc.com/view/2812481901a421483d7f76ba1c2c01b4.htmlLinux內(nèi)核解析IBootstrap1匯編代碼分析2start_kernel函數(shù)3準(zhǔn)備進(jìn)入用戶態(tài)3.1Initrd初始化3.1.0準(zhǔn)備知識(shí)在講述如何釋放initrd到rootfs之前,有比較講述一下什么是rootfs,rootfs的初始化相關(guān)的函數(shù);以及rootfs的初始化函數(shù)是如何被調(diào)用的。這里所說(shuō)的rootfs指的是VFS的根節(jié)點(diǎn)/,以及在內(nèi)存中創(chuàng)建的根目錄/下的文

2、件和目錄節(jié)點(diǎn),這個(gè)文件系統(tǒng)僅僅存在于內(nèi)存之中,由內(nèi)核初始化的時(shí)候負(fù)責(zé)創(chuàng)建,該文件系統(tǒng)不會(huì)存儲(chǔ)到其它非易失性介質(zhì)上。該rootfs文件系統(tǒng)mnt_init函數(shù)調(diào)用init_rootfs和init_mount_tree兩個(gè)函數(shù)來(lái)負(fù)責(zé)創(chuàng)建和初始化:void__initmnt_init(void){......//這個(gè)函數(shù)很簡(jiǎn)單,就是注冊(cè)了rootfs的文件系統(tǒng)。init_rootfs();//在這里,將rootfs文件系統(tǒng)掛載,它的掛載點(diǎn)默認(rèn)為”/”。//最后切換進(jìn)程的根目錄和當(dāng)前目錄為”/”,這也就是根目錄的由來(lái)。//不過(guò)這里只是初

3、始化,等掛載完具體的文件系統(tǒng)之后,//一般都會(huì)將根目錄切換到具體的文件系統(tǒng),所以在系統(tǒng)啟動(dòng)之后,//用mount命令是看不到rootfs的掛載信息的。init_mount_tree();}有了rootfs后,就可以將initrd的image釋放到rootfs中了,至于哪個(gè)函數(shù)完成這項(xiàng)工作?在講述該函數(shù)之前,我們首先看看該函數(shù)是如何被調(diào)用的。首先看kernel_init函數(shù)中的do_basic_setup函數(shù):staticint__initkernel_init(void*unused){......do_basic_setup(

4、);}do_basic_setup()是一個(gè)很關(guān)鍵的函數(shù),所有直接編譯在kernel中的模塊都是由它啟動(dòng)的。/**Ok,themachineisnowinitialized.Noneofthedevices*havebeentouchedyet,buttheCPUsubsystemisupand*running,andmemoryandprocessmanagementworks.**Nowwecanfinallystartdoingsomerealwork..*///注意上面的關(guān)于該函數(shù)的注釋:CPU和進(jìn)程管理模塊已經(jīng)正常工作

5、,但是外設(shè)還沒(méi)初始化。staticvoid__initdo_basic_setup(void){cpuset_init_smp();usermodehelper_init();init_tmpfs();driver_init();init_irq_proc();do_ctors();//啟動(dòng)所有在__initcall_start和__initcall_end段的函數(shù),//而靜態(tài)編譯進(jìn)內(nèi)核的modules也會(huì)將其入口放置在這段區(qū)間里。do_initcalls();}將initrd的image釋放到rootfs中的工作是由popul

6、ate_rootfs函數(shù)完成,該函數(shù)由rootfs_initcall()所引用。注意到有以下初始化函數(shù):rootfs_initcall(populate_rootfs);如此:也就是說(shuō)會(huì)在系統(tǒng)初始化的時(shí)候,也就是do_initcalls被調(diào)用的時(shí)候,會(huì)調(diào)用populate_rootfs進(jìn)行初始化。3.1.1釋放initrd總的來(lái)說(shuō),rootfs分為兩種:虛擬rootfs和真實(shí)rootfs?,F(xiàn)在kernel的發(fā)展趨勢(shì)是將更多的功能放到用戶空間完成,以保持內(nèi)核的精簡(jiǎn)。虛擬rootfs也是各linux發(fā)行廠商普遍采用的一種方式,可以將

7、一部份的初始化工作放在虛擬的rootfs里完成,然后切換到真實(shí)的文件系統(tǒng)。在虛擬rootfs的發(fā)展過(guò)程中,又有以下幾個(gè)版本:Initramfs:Initramfs是在kernel2.5中引入的技術(shù),實(shí)際上它的含義就是:在內(nèi)核鏡像中附加一個(gè)cpio包,這個(gè)cpio包中包含了一個(gè)小型的文件系統(tǒng),當(dāng)內(nèi)核啟動(dòng)時(shí),內(nèi)核將這個(gè)cpio包解開,并且將其中包含的文件系統(tǒng)釋放到rootfs中,內(nèi)核中的一部分初始化代碼會(huì)放到這個(gè)文件系統(tǒng)中,作為用戶層進(jìn)程來(lái)執(zhí)行。這樣帶來(lái)的明顯的好處是精簡(jiǎn)了內(nèi)核的初始化代碼,而且使得內(nèi)核的初始化過(guò)程更容易定制。這種這

8、種方式的rootfs是包含在kernelimage之中的。cpio-initrd:cpio格式的rootfsimage-initrd:傳統(tǒng)格式的rootfs將在下文具體講述這兩種initrd。populate_rootfs代碼如下:/**處理Initramfs/

當(dāng)前文檔最多預(yù)覽五頁(yè),下載文檔查看全文

此文檔下載收益歸作者所有

當(dāng)前文檔最多預(yù)覽五頁(yè),下載文檔查看全文
溫馨提示:
1. 部分包含數(shù)學(xué)公式或PPT動(dòng)畫的文件,查看預(yù)覽時(shí)可能會(huì)顯示錯(cuò)亂或異常,文件下載后無(wú)此問(wèn)題,請(qǐng)放心下載。
2. 本文檔由用戶上傳,版權(quán)歸屬用戶,天天文庫(kù)負(fù)責(zé)整理代發(fā)布。如果您對(duì)本文檔版權(quán)有爭(zhēng)議請(qǐng)及時(shí)聯(lián)系客服。
3. 下載前請(qǐng)仔細(xì)閱讀文檔內(nèi)容,確認(rèn)文檔內(nèi)容符合您的需求后進(jìn)行下載,若出現(xiàn)內(nèi)容與標(biāo)題不符可向本站投訴處理。
4. 下載文檔時(shí)可能由于網(wǎng)絡(luò)波動(dòng)等原因無(wú)法下載或下載錯(cuò)誤,付費(fèi)完成后未能成功下載的用戶請(qǐng)聯(lián)系客服處理。