来自ChinaUnix的对Linux rc.sysinit, rc, functions脚本的分析和Linux启动分析
生活随笔
收集整理的這篇文章主要介紹了
来自ChinaUnix的对Linux rc.sysinit, rc, functions脚本的分析和Linux启动分析
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
很不錯的參考資料,摘自chinaunix?
首先貼上Linux的啟動過程:?
系統啟動?
1、系統加電?
2、BIOS 自檢 → 本地設備枚舉和初始化?
3、POST 代碼從內存中清除,但運行時服務(runtime service)仍然留在內存。?
4、BIOS 從 CMOS 的設置中找出第1/2/3 啟動設備(可能有第4個),然后逐個嘗試,?
并在第一個 ”active“狀態的硬盤上讀入其 MBR?
第一階段引導加載程序?
1、MBR 實際上是由3個部分組成 :主引導加載程序(master bootloader code,446 字節)、主分區表 (ppt)、magic nubmer (0xAA55)組成?
主分區表有4個記錄,對應主分區1-主分區4,共64 字節。最后的 magic number 是 2 字節?
2、主引導加載程序搜索主分區表,掃描全部4個分區記錄,確保只有1個是被標為”active“ 的(用 fdisk 可以設置某個分區為 active 分區)。?
然后讀入該分區的引導扇區(前512 字節)。active 分區一般是 C 盤或者 linux 的第一個分區?
3、主引導加載程序的作用就是讀入第2階段的引導加載程序?
第二階段引導加載程序?
1、第2階段引導加載程序的目的是加載內核和 initrd 。GRUB 和 LILO 都是把 boot loader 程序分成兩部分,一部分在 MBR ,一部分在”active" 分區的引導扇區?
2、第2階段引導加載程序被讀入內存后,它讀取 root() 命令給出的分區下的 grub/grub.conf ,顯示一個菜單,供用戶選擇?
3、GRUB 可以細分為3個階段,中間的一個是 stage1.5 ,它跟在 stage1 的后面,目的是讓 grub 能夠識別文件系統的類型?
內核?
1、內核自解壓?
2、按照 bootloader 向它提供的 initrd 在內存中的地址,把 /dev/initrd 的內容拷貝到 /dev/ram ,并釋放 /dev/initrd 所占用的內存?
3、把 /dev/ram 按 rw 的模式掛載為初始根文件系統?
4、執行其上面的 /linuxrc 或者 /init 腳本,目的是加載驅動模塊?
5、在 /linuxrc 和 /init 腳本中,會有 pivot_root ()或者 switchroot 把 /sysroot 下的真正根文件系統設備掛載到 / ,把初始根文件系統掛載到 /initrd 下?
6、/linuxrc 和 /init 腳本的后面會 umount /initrd 下的初始根文件系統(即使沒有完全卸載,也會在 /etc/rc.d/rc.sysinit 中把它們全部卸載)?
7、接下來是啟動 init 進程。在 2.4 內核中,這個步驟是由內核完成的。但在 2.6 內核中,這個步驟是由 /init 腳本完成的。?
Init?
1、init 首先執行 /etc/rc.d/rc.sysinit 進行系統的初始化?
2、而 rc.sysint 會先執行 /etc/rc.d/init.d/functions ,獲得一些有用的函數,例如 daemon()、action ()、success()、failure()等?
3、按照默認運行級別或者 grub 啟動時的 kernel 行給出的運行級別運行 /etc/rcN.d/ 下的腳本,先執行 K 開頭的(按從低到高),再執行S開頭的(從低到高)?
這個過程“有可能”是通過執行 /etc/rc.d/rc 腳本實現的。因為 rc 腳本是為改變 runlevel 而做的,那么從關機(level 0)到 正常(level3/5)應該也算是?
一種特殊的改變 runlevel 的情況吧?
4、按照 /etc/inittab 的要求在指定的虛擬控制臺上創建 mingetty 進程,提示輸入用戶名和密碼?
5、執行 login 命令,login 命令會做如下工作 :?
a)如果存在 ~/.hashlogin ,則以 "quiet" 的方式登錄,不顯示郵件、不打印 motd?
如果存在 /var/log/lastlog ,則打印最后登錄時時間?
b)設置環境變量,包括 HOME、MAIL、PATH 、SHELL、TERM 等?
PATH 值默認是 /usr/local/bin:/bin:/usr/bin (對于普通用戶而言),?
對于 root 而言,則是 /usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin 。?
c)如果不是 quiet login ,則打印用戶的郵件數量和 /etc/motd 文件)?
d)啟動 login shell (默認是 /bin/sh),并執行 ~/.bashprofile?
e)~/.bashprofile 會自動執行 ~/.bashrc ,而 ~/.bashrc 又調用 /etc/bashrc
首先貼上Linux的啟動過程:?
系統啟動?
1、系統加電?
2、BIOS 自檢 → 本地設備枚舉和初始化?
3、POST 代碼從內存中清除,但運行時服務(runtime service)仍然留在內存。?
4、BIOS 從 CMOS 的設置中找出第1/2/3 啟動設備(可能有第4個),然后逐個嘗試,?
并在第一個 ”active“狀態的硬盤上讀入其 MBR?
第一階段引導加載程序?
1、MBR 實際上是由3個部分組成 :主引導加載程序(master bootloader code,446 字節)、主分區表 (ppt)、magic nubmer (0xAA55)組成?
主分區表有4個記錄,對應主分區1-主分區4,共64 字節。最后的 magic number 是 2 字節?
2、主引導加載程序搜索主分區表,掃描全部4個分區記錄,確保只有1個是被標為”active“ 的(用 fdisk 可以設置某個分區為 active 分區)。?
然后讀入該分區的引導扇區(前512 字節)。active 分區一般是 C 盤或者 linux 的第一個分區?
3、主引導加載程序的作用就是讀入第2階段的引導加載程序?
第二階段引導加載程序?
1、第2階段引導加載程序的目的是加載內核和 initrd 。GRUB 和 LILO 都是把 boot loader 程序分成兩部分,一部分在 MBR ,一部分在”active" 分區的引導扇區?
2、第2階段引導加載程序被讀入內存后,它讀取 root() 命令給出的分區下的 grub/grub.conf ,顯示一個菜單,供用戶選擇?
3、GRUB 可以細分為3個階段,中間的一個是 stage1.5 ,它跟在 stage1 的后面,目的是讓 grub 能夠識別文件系統的類型?
內核?
1、內核自解壓?
2、按照 bootloader 向它提供的 initrd 在內存中的地址,把 /dev/initrd 的內容拷貝到 /dev/ram ,并釋放 /dev/initrd 所占用的內存?
3、把 /dev/ram 按 rw 的模式掛載為初始根文件系統?
4、執行其上面的 /linuxrc 或者 /init 腳本,目的是加載驅動模塊?
5、在 /linuxrc 和 /init 腳本中,會有 pivot_root ()或者 switchroot 把 /sysroot 下的真正根文件系統設備掛載到 / ,把初始根文件系統掛載到 /initrd 下?
6、/linuxrc 和 /init 腳本的后面會 umount /initrd 下的初始根文件系統(即使沒有完全卸載,也會在 /etc/rc.d/rc.sysinit 中把它們全部卸載)?
7、接下來是啟動 init 進程。在 2.4 內核中,這個步驟是由內核完成的。但在 2.6 內核中,這個步驟是由 /init 腳本完成的。?
Init?
1、init 首先執行 /etc/rc.d/rc.sysinit 進行系統的初始化?
2、而 rc.sysint 會先執行 /etc/rc.d/init.d/functions ,獲得一些有用的函數,例如 daemon()、action ()、success()、failure()等?
3、按照默認運行級別或者 grub 啟動時的 kernel 行給出的運行級別運行 /etc/rcN.d/ 下的腳本,先執行 K 開頭的(按從低到高),再執行S開頭的(從低到高)?
這個過程“有可能”是通過執行 /etc/rc.d/rc 腳本實現的。因為 rc 腳本是為改變 runlevel 而做的,那么從關機(level 0)到 正常(level3/5)應該也算是?
一種特殊的改變 runlevel 的情況吧?
4、按照 /etc/inittab 的要求在指定的虛擬控制臺上創建 mingetty 進程,提示輸入用戶名和密碼?
5、執行 login 命令,login 命令會做如下工作 :?
a)如果存在 ~/.hashlogin ,則以 "quiet" 的方式登錄,不顯示郵件、不打印 motd?
如果存在 /var/log/lastlog ,則打印最后登錄時時間?
b)設置環境變量,包括 HOME、MAIL、PATH 、SHELL、TERM 等?
PATH 值默認是 /usr/local/bin:/bin:/usr/bin (對于普通用戶而言),?
對于 root 而言,則是 /usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin 。?
c)如果不是 quiet login ,則打印用戶的郵件數量和 /etc/motd 文件)?
d)啟動 login shell (默認是 /bin/sh),并執行 ~/.bashprofile?
e)~/.bashprofile 會自動執行 ~/.bashrc ,而 ~/.bashrc 又調用 /etc/bashrc
?
然后就是強人的對Linux /etc/rc.sysinit, /etc/rc.d/rc, /etc/rc.d/functions這些腳本的分析,很到位。文章中標注為紅色的是未分析的部分。??
/Files/super119/Linux_startup_scripts_hack.rar?
?
轉載于:https://www.cnblogs.com/super119/archive/2010/12/18/1909951.html
總結
以上是生活随笔為你收集整理的来自ChinaUnix的对Linux rc.sysinit, rc, functions脚本的分析和Linux启动分析的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: C#接口注意事项
- 下一篇: linux 其他常用命令