當前位置:首頁 » 操作系統 » linux內核啟動流程

linux內核啟動流程

發布時間: 2022-06-29 06:09:17

1. 嵌入式linux的bootloader的啟動流程是怎樣的

嵌入式 Linux 系統從軟體角度看可以分為四個部分:引導載入程序(Bootloader), Linux 內核,文件系統,應用程序。

當系統首次引導時,或系統被重置時,處理器會執行一個位於Flash/ROM中的已知位置處的代碼,Bootloader就是這第一段代碼。它主要用來初始化處理器及外設,然後調用 Linux 內核。Linux 內核在完成系統的初始化之後需要掛載某個文件系統作為根文件系統(Root Filesystem),然後載入必要的內核模塊,啟動應用程序。這就是嵌入式Linux系統啟動過程 Linux 引導的整個過程。

Bootloader 的啟動方式:

  1. 網路啟動方式。這種方式的開發板不需要較大的存儲介質,跟無盤工作站有點類似,但是使用這種啟動方式之前,需要把Bootloader安裝到板上的EPROM或者Flash中。Bootloader通過乙太網介面遠程下載Linux內核映像或者文件系統。Bootloader下載文件一般都使用TFTP網路協議,還可以通過DHCP的方式動態配置IP地址。

  2. 硬碟啟動方式
    傳統的Linux系統運行在台式機或者伺服器上,這些計算機一般都使用BIOS引導,並使用磁碟作為存儲介質。Linux傳統上是LILO (Linux Loader) 引導,後來又出現了GUN的軟體 (Grand Unified Bootloader) 。 這兩種Bootloader廣泛應用在X86的Linux系統上。

  3. Flash啟動方式。大多數嵌入式系統上都使用Flash存儲介質。Flash有很多類型,包括NOR Flash、NAND Flash和其它半導體盤。它們之間的不同在於: NOR Flash 支持晶元內執行(XIP, eXecute In Place),這樣代碼可以在Flash上直接執行而不必拷貝到RAM中去執行。而NAND Flash並不支持XIP,所以要想執行 NAND Flash 上的代碼,必須先將其拷貝到 RAM中去,然後跳到 RAM 中去執行。NOR Flash 使用最為普遍。Bootloader一般放在Flash的底端或者頂端,這需要根據處理器的復位向量來進行設置。可以配置成MTD設備來訪問Flash分區。

2. Linux系統開機時啟動內核步驟是什麼

實模式,並開始執行位於地址0xFFFF0處
的代碼,也就是ROM-BIOS起始位置的代碼。BIOS先進行一系列的系統自檢,然後初始化位
於地址0的中斷向量表。最後BIOS將啟動盤的第一個扇區裝入到0x7C00,並開始執行此處
的代碼。這就是對內核初始化過程的一個最簡單的描述。
最初,linux核心的最開始部分是用8086匯編語言編寫的。當開始運行時,核心將自
己裝入到絕對地址0x90000,再將其後的2k位元組裝入到地址0x90200處,最後將核心的其餘
部分裝入到0x10000。
當系統裝入時,會顯示Loading...信息。裝入完成後,控制轉向另一個實模式下的匯
編語言代碼boot/Setup.S。Setup部分首先設置一些系統的硬體設備,然後將核心從
0x10000處移至0x1000處。這時系統轉入保護模式,開始執行位於0x1000處的代碼。
接下來是內核的解壓縮。0x1000處的代碼來自於文件Boot/head.S,它用來初始化寄
存器和調用decompress_kernel( )程序。decompress_kernel( )程序由Boot/inflate.c,
Boot/unzip.c和Boot../misc.c組成。解壓縮後的數據被裝入到了0x100000處,這也是
linux不能在內存小於2M的環境下運行的主要原因。
解壓後的代碼在0x1010000處開始執行,緊接著所有的32位的設置都將完成: IDT、
GDT和LDT將被裝入,處理器初始化完畢,設置好內存頁面,最終調用start_kernel過程。
這大概是整個內核中最為復雜的部分。
[系統開始運行]
linux kernel 最早的C代碼從匯編標記startup_32開始執行
startup_32:
start_kernel
lock_kernel
trap_init
init_IRQ
sched_init
softirq_init
time_init
console_init
#ifdef CONFIG_MODULES
init_moles
#endif
kmem_cache_init
sti
calibrate_delay
mem_init
kmem_cache_sizes_init
pgtable_cache_init
fork_init
proc_caches_init
vfs_caches_init
buffer_init
page_cache_init
signals_init
#ifdef CONFIG_PROC_FS
proc_root_init
#endif
#if defined(CONFIG_SYSVIPC)
ipc_init
#endif
check_bugs
smp_init
rest_init
kernel_thread
unlock_kernel
cpu_idle
・startup_32 [arch/i386/kernel/head.S]
・start_kernel [init/main.c]
・lock_kernel [include/asm/smplock.h]
・trap_init [arch/i386/kernel/traps.c]
・init_IRQ [arch/i386/kernel/i8259.c]
・sched_init [kernel/sched.c]
・softirq_init [kernel/softirq.c]
・time_init [arch/i386/kernel/time.c]
・console_init [drivers/char/tty_io.c]
・init_moles [kernel/mole.c]
・kmem_cache_init [mm/slab.c]
・sti [include/asm/system.h]
・calibrate_delay [init/main.c]
・mem_init [arch/i386/mm/init.c]
・kmem_cache_sizes_init [mm/slab.c]
・pgtable_cache_init [arch/i386/mm/init.c]
・fork_init [kernel/fork.c]
・proc_caches_init
・vfs_caches_init [fs/dcache.c]
・buffer_init [fs/buffer.c]
・page_cache_init [mm/filemap.c]
・signals_init [kernel/signal.c]
・proc_root_init [fs/proc/root.c]
・ipc_init [ipc/util.c]
・check_bugs [include/asm/bugs.h]
・smp_init [init/main.c]
・rest_init
・kernel_thread [arch/i386/kernel/process.c]
・unlock_kernel [include/asm/smplock.h]
・cpu_idle [arch/i386/kernel/process.c]
start_kernel( )程序用於初始化系統內核的各個部分,包括:
*設置內存邊界,調用paging_init( )初始化內存頁面。
*初始化陷阱,中斷通道和調度。
*對命令行進行語法分析。
*初始化設備驅動程序和磁碟緩沖區。
*校對延遲循環。
最後的function'rest_init' 作了以下工作:
・開辟內核線程'init'
・調用unlock_kernel
・建立內核運行的cpu_idle環, 如果沒有調度,就一直死循環
實際上start_kernel永遠不能終止.它會無窮地循環執行cpu_idle.
最後,系統核心轉向move_to_user_mode( ),以便創建初始化進程(init)。此後,進程0開始進入無限循環。
初始化進程開始執行/etc/init、/bin/init 或/sbin /init中的一個之後,系統內核就不再對程序進行直接控制了。之後系統內核的作用主要是給進程提供系統調用,以及提供非同步中斷事件的處理。多任務機制已經建立起來,並開始處理多個用戶的登錄和fork( )創建的進程。
[init]
init是第一個進程,或者說內核線程
init
lock_kernel
do_basic_setup
mtrr_init
sysctl_init
pci_init
sock_init
start_context_thread
do_init_calls
(*call())-> kswapd_init
prepare_namespace
free_initmem
unlock_kernel
execve
[目錄]
--------------------------------------------------------------------------------
啟動步驟
系統引導:
涉及的文件
./arch/$ARCH/boot/bootsect.s
./arch/$ARCH/boot/setup.s
bootsect.S
這個程序是linux kernel的第一個程序,包括了linux自己的bootstrap程序,
但是在說明這個程序前,必須先說明一般IBM PC開機時的動作(此處的開機是指
"打開PC的電源"):
一般PC在電源一開時,是由內存中地址FFFF:0000開始執行(這個地址一定
在ROM BIOS中,ROM BIOS一般是在FEOOOh到FFFFFh中),而此處的內容則是一個
jump指令,jump到另一個位於ROM BIOS中的位置,開始執行一系列的動作,包
括了檢查RAM,keyboard,顯示器,軟硬磁碟等等,這些動作是由系統測試代碼
(system test code)來執行的,隨著製作BIOS廠商的不同而會有些許差異,但都
是大同小異,讀者可自行觀察自家機器開機時,螢幕上所顯示的檢查訊息。
緊接著系統測試碼之後,控制權會轉移給ROM中的啟動程序
(ROM bootstrap routine),這個程序會將磁碟上的第零軌第零扇區讀入
內存中(這就是一般所謂的boot sector,如果你曾接觸過電腦病
毒,就大概聽過它的大名),至於被讀到內存的哪裡呢? --絕對
位置07C0:0000(即07C00h處),這是IBM系列PC的特性。而位在linux開機
磁碟的boot sector上的正是linux的bootsect程序,也就是說,bootsect是
第一個被讀入內存中並執行的程序。現在,我們可以開始來
看看到底bootsect做了什麼。
第一步
首先,bootsect將它"自己"從被ROM BIOS載入的絕對地址0x7C00處搬到
0x90000處,然後利用一個jmpi(jump indirectly)的指令,跳到新位置的
jmpi的下一行去執行,
第二步
接著,將其他segment registers包括DS,ES,SS都指向0x9000這個位置,
與CS看齊。另外將SP及DX指向一任意位移地址( offset ),這個地址等一下
會用來存放磁碟參數表(disk para- meter table )
第三步
接著利用BIOS中斷服務int 13h的第0號功能,重置磁碟控制器,使得剛才
的設定發揮功能。
第四步
完成重置磁碟控制器之後,bootsect就從磁碟上讀入緊鄰著bootsect的setup
程序,也就是setup.S,此讀入動作是利用BIOS中斷服務int 13h的第2號功能。
setup的image將會讀入至程序所指定的內存絕對地址0x90200處,也就是在內存
中緊鄰著bootsect 所在的位置。待setup的image讀入內存後,利用BIOS中斷服
務int 13h的第8號功能讀取目前磁碟的參數。
第五步
再來,就要讀入真正linux的kernel了,也就是你可以在linux的根目錄下看
到的"vmlinuz" 。在讀入前,將會先呼叫BIOS中斷服務int 10h 的第3號功能,
讀取游標位置,之後再呼叫BIOS 中斷服務int 10h的第13h號功能,在螢幕上輸
出字串"Loading",這個字串在boot linux時都會首先被看到,相信大家應該覺
得很眼熟吧。
第六步
接下來做的事是檢查root device,之後就仿照一開始的方法,利用indirect
jump 跳至剛剛已讀入的setup部份
第七步
setup.S完成在實模式下版本檢查,並將硬碟,滑鼠,內存參數寫入到 INITSEG
中,並負責進入保護模式。
第八步
操作系統的初始化。

3. linux內核啟動需要哪些

很復雜,大概說說吧。

1:IA-32系統上與體系結構相關的設置

arch/x86/boot/header

1檢查內核是否載入到正確位置

2確定系統內存的大小

3初始化顯卡

4將內核映像移動到內存的某個位置。

5將cpu切換到保護模式

arch/x86/boot/compressed/head_32.S

1創建一個臨時內核棧

2用0位元組填充內核為初始化的數據

3調用arch/x86/boot/compressed/misc_32.c中的c常式decompress_kernel

2:高層初始化(start_kernel)

  1. 子系統初始化

1顯示版本信息

2特定與體系結構的,內存管理的高層設置

3計算命令行參數

4初始化核心數據結構

5確定處理器和系統錯誤

6啟動idle進程init進程

細節不展開了,自己研究吧!

4. 請簡述armlinux內核啟動流程

能流動過程,正應該是會有一個專門的流動,這樣的話才能更好今年取得,所以這個還是要注意的。

5. 嵌入式linux系統的啟動流程是什麼樣的

1)
初始化
RAM
因為
Linux
內核一般都會在
RAM
中運行,所以在調用
Linux
內核之前
Bootloader
必須設置和初始化
RAM,為調用
Linux內核
做好准備。初始化
RAM
的任務包括設置
CPU
的控制寄存器參數,以便能正常使用
RAM
以及檢測RAM
大小等。
2)
初始化串口埠

Linux
的啟動過程中有著非常重要的作用,它是
Linux內核和用戶交互的方式之一。Linux
在啟動過程中可以將信息通過串口輸出,這樣便可清楚的了解
Linux
的啟動過程。雖然它並不是
Bootloader
必須要完成的工作,但是通過串口輸出信息是調試
Bootloader
和Linux
內核的強有力的工具,所以一般的
Bootloader
都會在執行過程中初始化一個串口作為調試埠。
3)
檢測
處理器類型
Bootloader在調用
Linux內核前必須檢測系統的處理器類型,並將其保存到某個常量中提供給
Linux
內核。Linux
內核在啟動過程中會根據該處理器類型調用相應的初始化程序。
4)
設置
Linux啟動參數
Bootloader在執行過程中必須設置和初始化
Linux
的內核啟動參數。
5)
調用
Linux內核映像
Bootloader完成的最後一項工作便是調用
Linux內核。如果
Linux
內核存放在
Flash
中,並且可直接在上面運行(這里的
Flash

Nor
Flash),那麼可直接跳轉到內核中去執行。但由於在
Flash
中執行代碼會有種種限制,而且速度也遠不及
RAM
快,所以一般的
嵌入式系統
都是將
Linux內核拷貝到
RAM
中,然後跳轉到
RAM
中去執行。

6. LINUX操作系統的啟動過程

一、啟動內核
首先介紹啟動內核部分。電腦啟動時,BIOS裝載MBR,然後從當前活動分區啟動,LILO獲得引
導過程的控制權後,會顯示LILO提示符。此時如果用戶不進行任何操作,LILO將在等待制定
時間後自動引導默認的操作系統,而如果在此期間按下TAB鍵,則可以看到一個可引導的操作
系統列表,選擇相應的操作系統名稱就能進入相應的操作系統。
當用戶選擇啟動LINUX操作系統時,LILO就會根據事先設置好的信息從ROOT文件系統所在的分
區讀取LINUX映象,然後裝入內核映象並將控制權交給LINUX內核。LINUX內核獲得控制權後,
以如下步驟繼續引導系統:
1. LINUX內核一般是壓縮保存的,因此,它首先要進行自身的解壓縮。內核映象前面的一些
代碼完成解壓縮。
2. 如果系統中安裝有可支持特殊文本模式的、且LINUX可識別的SVGA卡,LINUX會提示用戶
選擇適當的文本顯示模式。但如果在內核的編譯過程中預先設置了文本模式,則不會提示選
擇顯示模式。該顯示模式可通過LILO或RDEV工具程序設置。
3. 內核接下來檢測其他的硬體設備,例如硬碟、軟盤和網卡等,並對相應的設備驅動程序
進行配置。這時,顯示器上出現內核運行輸出的一些硬體信息。
4. 接下來,內核裝載ROOT文件系統。ROOT文件系統的位置可在編譯內核時指定,也可通過
LILO或RDEV指定。文件系統的類型可自動檢測。如果由於某些原因裝載失敗,則內核啟動
失敗,最終會終止系統。

二、執行init程序
其次介紹init程序,利用init程序可以方便地定製啟動其間裝入哪些程序。init的任務是
啟動新進程和退出時重新啟動其它進程。例如,在大多數Linux系統中,啟動時最初裝入
六個虛擬的控制台進程,退出控制台窗口時,進程死亡,然後init啟動新的虛擬登錄控制台,
因而總是提供六個虛擬登陸控控制台進程。
控制init程序操作的規則存放在文件/etc/inittab中。Red Hat Linux預設的inittab文
件如下:
#
#inittab This file describes how the INIT process should set up the system in a certain
#run-level.
#
#
#Default runlevel.The runlevels used by RHS are:
#0-halt(Do NOT set initdefault to this)
#1-Single user mode
#2-Multiuser,without NFS(the same as 3,if you do not have networking)
#3-Full multiuser mode
#4-unused
#5-X11
#6-reboot(Do NOT set initdefault to this)
#
id:3:initdefault:

#system initialization
si::sysinit:/etc/rc.d/rc.sysinit
10:0:wait:/etc/rc.d/rc 0
11:1:wait:/etc/rc.d/rc 1
12:2:wait:/etc/rc.d/rc 2
13:3:wait:/etc/rc.d/rc 3
14:4:wait:/etc/rc.d/rc 4
15:5:wait:/etc/rc.d/rc 5
16:6:wait:/etc/rc.d/rc 6
#Things to run in every runlevel
ud:once:/sbin/update

#Trap CTRL-ALT-DELETE
ca::ctrlaltdel:/sbin/shutdown -t3 -r now

#When our UPS tells us power has failed,assume we have a few minutes of
power left.Schele a
#shutdown for 2 minutes from now.
#This does,of course,assume you have powered installed and your UPS
connected and working
#correctly.
pf::powerfail:/sbin/shutdown -f -h +2 "Power Restored;Shutdown Cancelled"

#Run gettys in standard runlevels
1:12345:respawn:/sbin/minggetty tty1
2:2345:respawn:/sbin/minggetty tty2
3:2345:respawn:/sbin/minggetty tty3
4:2345:respawn:/sbin/minggetty tty4
5:2345:respawn:/sbin/minggetty tty5
6:2345:respawn:/sbin/minggetty tty6
#Run xdm in runlevel 5

x:5:respawn:/usr/bin/X11/xdm -nodaemon
Linux有個運行級系統,運行級是表示系統當前狀態和init應運行哪個進程並保持在這種
系統狀態中運行的數字。在inittab文件中,第一個項目指定啟動時裝入的預設運行級。
上例中是個多用戶控制台方式,運行級為3。然後,inittab文件中每個項目指定第二個
欄位的項目用哪種運行級(每個欄位用冒號分開)。因此,對運行級3,下列行是相關的:
13:3:wait:/etc/rc.d/rc 3
1:12345:respawn:/sbin/minggetty tty1
2:2345:respawn:/sbin/minggetty tty2
3:2345:respawn:/sbin/minggetty tty3
4:2345:respawn:/sbin/minggetty tty4
5:2345:respawn:/sbin/minggetty tty5
6:2345:respawn:/sbin/minggetty tty6
最後六行建立Linux提供的六個虛擬控制台。第一行運行啟動腳本/etc/rc.d/ rc 3;
這將運行目錄/etc/
rc.d/rc3.d中包含的所有腳本,這些腳本表示系統初始化時要啟動的程序。一般來說,
這些腳本不需要編輯或改變,是系統預設的。

7. Linux 內核啟動

那麼linux內核和android什麼關系?linux內核是怎樣引導起android呢?本文進行簡單的描述。
android雖然建立在linux內核之上,但是他對內核進行了一些擴展,增加了一些驅動。比如binder,loger等等驅動。可以拿android內核代碼和其baseline版本進行對比。可以看到android對linux內核的所有擴展。
熟悉linux啟動的朋友知道,首先linux引導完成之後,會啟動用戶態的init進程(pid為0),這個進程在整個系統運行過程中起著非常重要的作用,如果你對init進程不了解請查相關資料。init完成系統的初始化工作,然後進入shell,接收用戶的輸入。
android啟動也沒有什麼神秘的,就是用自己的init進程替換了linux內核的init進程,完成自己初始化工作(設備,文件系統等等初始化)。然後啟動自己的虛擬機,程序等等的東西。android的init進程的代碼位於system/core/init/init.c下面,可以去查看其源碼,來了解android啟動詳細流程。android啟動流程的資料網上已經比較多,這里就不贅述了。
可以看到移植android過程中,調試init非常重要。因為所有和硬體平台相關的東西都這里初始化,所以init進程有可能需要移植或者配置。其他的進程都是和硬體無關的,理論上不需要修改就應該能夠運行起來。
經過上面的描述可以看出,android的init進程起著一個承上啟下的作用。

8. linux內核模塊如何開始和結束

GRLB 載入了內核之後,內核首先會再進行二次系統的自檢,而不一定使用 BIOS 檢測的硬體信息。這時內核終於開始替代 BIOS 接管Linux的啟動過程了。

內核完成再次系統自檢之後,開始採用動態的方式載入每個硬體的模塊,這個動態模塊大家可以想像成硬體的驅動(默認 Linux 硬體的驅動是不需要手工安裝的,如果是重要的功能,則會直接編譯到內核當中;如果是非重要的功能,比如硬體驅動會編譯為模塊,則在需要時由內核調用。不過,如果沒有被內核硬體,要想驅動,就需要手工安裝個硬體的硬塊了。具體的安裝方法會在後續章節中介紹)。

那麼,Linux 的內核到底放在了哪裡呢?當然是 /boot 的啟動目錄中了,我們來看看這個目錄下的內容吧。

[root@localhost ~]#ls /boot/
config-2.6.32-279.el6.i686
#內核的配置文件,內核編譯時選擇的功能與模塊
efi
#可擴展固件介面,為英特爾為全新PC固件的體系結構、介面和服務提出的建議標准
grub
#啟動引導程GTUB的數據目錄
initramfe-2.6.32-279.el6.i686.img
#虛擬文件系統(CentOS 6.x 中用initramfs替代了initrd,但功能是一樣的)
lost+found
故boot分區的備份目錄
symvers-2_6.32-279.el6.i686.gz
#模塊符號信息
System.map-2.6.32-279.el6.i686
#內核功能和內存地址的對應列表
vmlinuz-2.6.32-279.el6.i686
#用於啟動的Linux內核。這個文件是一個壓縮的內核鏡像


我們已經知道,Linux 會把不重要的功能編譯成內核模塊,在需要時再調用,從而保證了內核不會過大。在多數 Linux 中,都會把硬體的驅動程序編譯為模塊, 這些模塊保存在 /lib/moles/ 目錄中。常見的 USB、SATA 和 SCSI 等硬碟設備的驅動,還有一些特殊的文件系統(如 LVM、RAID 等)的驅動,都是以模塊的方式來保存的。

如果 Linux 安裝在 IDE 硬碟之上,並且採用的是默認的 ext3/4 文件系統,那麼內核啟動後載入根分區和模塊的載入都沒有什麼問題,系統會順利啟動。但是如果 Linux 安裝在 SCSI 硬碟之上,或者採用的是 LVM 文件系統,那麼內核(內核載入入內存是啟動引導程序 GRUB 調用的,並不存在硬碟驅動不識別的問題)在載入根目錄之前是需要載入 SCSI 硬碟或 LVM 文件系統的驅動的。

SCSI 硬碟和 LVM 文件系統的驅動都放在硬碟的 /lib/moles/ 目錄中,既然內核沒有辦法識別 SCSI 硬碟或 LVM 文件系統,那怎麼可能讀取 /lib/moles/ 目錄中的驅動呢?Linux 給出的解決辦法是使用 initramfs 這個虛擬文件系統來處理這個問題。

initramfe虛擬文件系統

CentOS 6.x 中使用 initramfs 虛擬文件系統取代了 CentOS 5.x 中的 initrd RAM Disk。它們的作用類似,可以通過啟動引導程序載入到內存中,然後會解壓縮並在內存中模擬成一個根目錄,並且這個模擬的文件系統能夠提供一個可執行程序,通過該程序來載入啟動過程中所需的內核模塊,比如 USB、SATA. SCSI 硬碟的驅動和 LVM、RAID 文件系統的驅動。

也就是說,通過 initramfs 虛擬文件系統在內存中模擬出一個根目錄,然後在這個模擬根目錄中載入 SCSI 等硬體的驅動,就可以載入真正的根目錄了,之後才能調用 Linux 的第一個進程 /sbin/init。

Initramfs 虛擬文件系統主要有以下優點:

  • initramfs 隨著其中數據的増減自動増減容量。

  • 在 initramfs 和頁面緩存之間沒有重復數據。

  • initramfs 重復利用了 Linux caching 的代碼,因此幾乎沒有増加內核尺寸,而 caching 的代碼已經經過良好測試,所以 initramfs 的代碼質量也有保證。

  • 不需要額外的文件系統驅動。


  • 其實大家只需要知道 initramfs 是為了在內核中建立一個模擬根目錄,這個模擬根目錄是為了可以調用 USB、SATA、SCSI、LVM、RAID 等硬碟介面或文件系統的驅動模塊,載入了驅動模塊後才可以載入真正的系統根目錄。我們可以通過示意圖 1 來表示這個過程。


  • [root@localhost~]#mkdir/tmp/initramfs
    #建立測試目錄
    [root@localhost~]#cp/boot/
    initramfs-2.6.32-279.el6.i686.img/tmp/initramfs/
    #復制initramfs文件
    [root@localhost~]#cd/tmp/initramfs/
    [root@localhostinitramfs]#file
    initramfs-2.6.32-279.el6.i686.img
    initramfe-2.6.32-279.el6.i686.img:gzipcompressed
    data,fromUnix,lastmodified:
    WedApr1021:49:342013,maxcompression
    #查看文件類型,發現這個文件是一個使用gzip命令打包的壓縮包
    [root@localhostinitramfs]#mvinitramfs-2.6.32-279.el6.i686.imginitramfs-2.6.32-279.el6.i686.img.gz
    #修改文件的擴展名為.gz
    [root@localhostinitramfs]#gunzip
    initramfs-2.6.32-279.el6.i686.img.gz
    #解壓縮
    [root@localhostinitramfs]#ls
    initramfs-2.6.32-279.el6.i686.img
    [root@localhostinitramfs]#file
    initramfs-2.6.32-279.el6.i686.img
    initramfe-2.6.32-279.el6.i686.img:ASCIIcpioarchive(SVR4withnoCRC)
    #查看文件類型,使用cpio命令的壓縮文件
    [root@localhostinitramfs]#cpio-ivc<initramfs-2.6.32-279.el6.i686.img
    #解壓縮
    [root@localhostinitramfs]#ll
    總用量34512
    drwxr-xr-x.2rootroot40964月2412:10bin
    drwxr-xr-x.2rootroot40964月2412:10cmdline
    drwxr-xr-x.3rootroot40964月2412:10dev
    -rw-r--r--.1rootroot194月2412:10dracut-004-283.el6
    drwxr-xr-x.2rootroot40964月2412:10emergency
    drwxr-xr-x.7rootroot40964月2412:10etc
    -rwxr-xr-x.1rootroot89624月2412:10init
    drwxr-xr-x.2rootroot40964月2412:10initqueue
    drwxr-xr-x.2rootroot40964月2412:10initqueue-finished
    drwxr-xr-x.2rootroot40964月2412:10initqueue-settled
    drwxr-xr-x.2rootroot40964月2412:10
    initqueue-timeout
    -rw-r--r--.1rootroot352353284月2412:09initramfs-2.6.32-279.el6.i686.img
    drwxr-xr-x.9rootroot40964月2412:10lib
    …省略部分輸出…


    #這就是initramfs虛擬文件系統中的內容,和根目錄是不是很像

關機或者某些進程停止,對應的內核模塊就會結束。更多知識請網路《Linux就該這么學》

9. 求詳細的linux內核啟動順序,和各個模塊的載入順序,優先順序等。

1. 載入 BIOS 的硬體信息不迚行自我測試,開依據謳定取得第一個可開機的裝置;
2. 讀取開執行第一個開機裝置內 MBR 的 boot Loader (亦即是 grub, spfdisk 等程序);
3. 依據 boot loader 的謳定載入 Kernel ,Kernel 會開始偵測硬體不載入驅勱程序;
4. 在硬體驅勱成功後,Kernel 會主勱呼叨 init 程序,而 init 會取得 run-level 信息;
5. init 執行 /etc/rc.d/rc.sysinit 檔案來准備軟體執行的作業環境 (如網路、時區等);
6. init 執行 run-level 的各個朋務乊吪勱 (script 方弅);
7. init 執行 /etc/rc.d/rc.local 檔案;
8. init 執行終端機仺真程序 mingetty 來吪勱 login 程序,最後就等待用戶登入啦;

10. 典型intel架構的Linux系統啟動過程

8 執行init;
4 內核初始化;
1 加電啟動,BIOS自檢;
10 顯示Login提示符;
3 載入啟動磁碟的引導程序;
9 進入保護模式;
5 載入initrd;
2 執行BootLoader;
7 啟動各種服務;
6 載入磁碟驅動器,掛載root分區

不是很准確的樣子 試試 呵呵

熱點內容
短租系統源碼 發布:2024-05-01 18:59:11 瀏覽:635
深度優先演算法廣度優先演算法 發布:2024-05-01 18:47:02 瀏覽:436
pythonlist索引獲取 發布:2024-05-01 18:43:20 瀏覽:152
上網提示找不到伺服器的ip地址 發布:2024-05-01 18:12:01 瀏覽:169
正版我的世界怎麼開一個伺服器 發布:2024-05-01 18:11:50 瀏覽:738
七日殺伺服器被封ip怎麼辦 發布:2024-05-01 18:01:57 瀏覽:235
c語言的雙引號 發布:2024-05-01 17:52:39 瀏覽:449
我的世界伺服器開服包 發布:2024-05-01 17:18:30 瀏覽:900
收費下載站源碼 發布:2024-05-01 16:49:01 瀏覽:975
壓縮下載啥 發布:2024-05-01 16:42:32 瀏覽:725