青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

posts - 297,  comments - 15,  trackbacks - 0
簡介: 引導 Linux® 系統的過程包括很多階段。不管您是引導一個標準的 x86 桌面系統,還是引導一臺嵌入式的 PowerPC® 機器,很多流程都驚人地相似。本文將探索 Linux 的引導過程,從最初的引導到啟動第一個用戶空間應用程序。在本文介紹的過程中,您將學習到各種與引導有關的主題,例如引導加載程序、內核解壓、初始 RAM 磁盤以及 Linux 引導的其他一些元素。

早期時,啟動一臺計算機意味著要給計算機喂一條包含引導程序的紙帶,或者手工使用前端面板地址/數據/控制開關來加載引導程序。盡管目前的計算機已經裝備了很多工具來簡化引導過程,但是這一切并沒有對整個過程進行必要的簡化。

讓我們先從高級的視角來查看 Linux 引導過程,這樣就可以看到整個過程的全貌了。然后將回顧一下在各個步驟到底發生了什么。在整個過程中,參考一下內核源代碼可以幫助我們更好地了解內核源代碼樹,并在以后對其進行深入分析。

概述

圖 1 是我們在 20,000 英尺的高度看到的視圖。


圖 1. Linux 引導過程在 20,000 英尺處的視圖
Linux 引導過程在 20,000 英尺處的視圖 

當系統首次引導時,或系統被重置時,處理器會執行一個位于已知位置處的代碼。在個人計算機(PC)中,這個位置在基本輸入/輸出系統(BIOS)中,它保存在主板上的閃存中。嵌入式系統中的中央處理單元(CPU)會調用這個重置向量來啟動一個位于閃存/ROM 中的已知地址處的程序。在這兩種情況下,結果都是相同的。因為 PC 提供了很多靈活性,BIOS 必須確定要使用哪個設備來引導系統。稍后我們將詳細介紹這個過程。

當找到一個引導設備之后,第一階段的引導加載程序就被裝入 RAM 并執行。這個引導加載程序在大小上小于 512 字節(一個扇區),其作用是加載第二階段的引導加載程序。

當第二階段的引導加載程序被裝入 RAM 并執行時,通常會顯示一個動畫屏幕,并將 Linux 和一個可選的初始 RAM 磁盤(臨時根文件系統)加載到內存中。在加載映像時,第二階段的引導加載程序就會將控制權交給內核映像,然后內核就可以進行解壓和初始化了。在這個階段中,第二階段的引導加載程序會檢測系統硬件、枚舉系統鏈接的硬件設備、掛載根設備,然后加載必要的內核模塊。完成這些操作之后啟動第一個用戶空間程序(init),并執行高級系統初始化工作。

這就是 Linux 引導的整個過程。現在讓我們深入挖掘一下這個過程,并深入研究一下 Linux 引導過程的一些詳細信息。

系統啟動

系統啟動階段依賴于引導 Linux 系統上的硬件。在嵌入式平臺中,當系統加電或重置時,會使用一個啟動環境。這方面的例子包括 U-Boot、RedBoot 和 Lucent 的 MicroMonitor。嵌入式平臺通常都是與引導監視器搭配銷售的。這些程序位于目標硬件上的閃存中的某一段特殊區域,它們提供了將 Linux 內核映像下載到閃存并繼續執行的方法。除了可以存儲并引導 Linux 映像之外,這些引導監視器還執行一定級別的系統測試和硬件初始化過程。在嵌入式平臺中,這些引導監視器通常會涉及第一階段和第二階段的引導加載程序。

提取 MBR 的信息

要查看 MBR 的內容,請使用下面的命令:

dd if=/dev/hda of=mbr.bin bs=512 count=1 #od -xa mbr.bin

這個 dd 命令需要以 root 用戶的身份運行,它從 /dev/hda(第一個 IDE 盤) 上讀取前 512 個字節的內容,并將其寫入 mbr.bin 文件中。od 命令會以十六進制和 ASCII 碼格式打印這個二進制文件的內容。

在 PC 中,引導 Linux 是從 BIOS 中的地址 0xFFFF0 處開始的。BIOS 的第一個步驟是加電自檢(POST)。POST 的工作是對硬件進行檢測。BIOS 的第二個步驟是進行本地設備的枚舉和初始化。

給定 BIOS 功能的不同用法之后,BIOS 由兩部分組成:POST 代碼和運行時服務。當 POST 完成之后,它被從內存中清理了出來,但是 BIOS 運行時服務依然保留在內存中,目標操作系統可以使用這些服務。

要引導一個操作系統,BIOS 運行時會按照 CMOS 的設置定義的順序來搜索處于活動狀態并且可以引導的設備。引導設備可以是軟盤、CD-ROM、硬盤上的某個分區、網絡上的某個設備,甚至是 USB 閃存。

通常,Linux 都是從硬盤上引導的,其中主引導記錄(MBR)中包含主引導加載程序。MBR 是一個 512 字節大小的扇區,位于磁盤上的第一個扇區中(0 道 0 柱面 1 扇區)。當 MBR 被加載到 RAM 中之后,BIOS 就會將控制權交給 MBR。

 

第一階段引導加載程序

MBR 中的主引導加載程序是一個 512 字節大小的映像,其中包含程序代碼和一個小分區表(參見圖 2)。前 446 個字節是主引導加載程序,其中包含可執行代碼和錯誤消息文本。接下來的 64 個字節是分區表,其中包含 4 個分區的記錄(每個記錄的大小是 16 個字節)。MBR 以兩個特殊數字的字節(0xAA55)結束。這個數字會用來進行 MBR 的有效性檢查。


圖 2. MBR 剖析
MBR 剖析 

主引導加載程序的工作是查找并加載次引導加載程序(第二階段)。它是通過在分區表中查找一個活動分區來實現這種功能的。當找到一個活動分區時,它會掃描分區表中的其他分區,以確保它們都不是活動的。當這個過程驗證完成之后,就將活動分區的引導記錄從這個設備中讀入 RAM 中并執行它。

 

第二階段引導加載程序

次引導加載程序(第二階段引導加載程序)可以更形象地稱為內核加載程序。這個階段的任務是加載 Linux 內核和可選的初始 RAM 磁盤。

GRUB 階段引導加載程序

/boot/grub 目錄中包含了 stage1stage1.5 和 stage2 引導加載程序,以及很多其他加載程序(例如,CR-ROM 使用的是 iso9660_stage_1_5)。

在 x86 PC 環境中,第一階段和第二階段的引導加載程序一起稱為 Linux Loader(LILO)或 GRand Unified Bootloader(GRUB)。由于 LILO 有一些缺點,而 GRUB 克服了這些缺點,因此下面讓我們就來看一下 GRUB。(有關 GRUB、LILO 和相關主題的更多內容,請參閱本文后面的 參考資料 部分的內容。)

關于 GRUB,很好的一件事情是它包含了有關 Linux 文件系統的知識。GRUB 不像 LILO 一樣使用裸扇區,而是可以從 ext2 或 ext3 文件系統中加載 Linux 內核。它是通過將兩階段的引導加載程序轉換成三階段的引導加載程序來實現這項功能的。階段 1 (MBR)引導了一個階段 1.5 的引導加載程序,它可以理解包含 Linux 內核映像的特殊文件系統。這方面的例子包括 reiserfs_stage1_5(要從 Reiser 日志文件系統上進行加載)或 e2fs_stage1_5(要從 ext2 或 ext3 文件系統上進行加載)。當階段 1.5 的引導加載程序被加載并運行時,階段 2 的引導加載程序就可以進行加載了。

當階段 2 加載之后,GRUB 就可以在請求時顯示可用內核列表(在 /etc/grub.conf 中進行定義,同時還有幾個軟符號鏈接/etc/grub/menu.lst 和 /etc/grub.conf)。我們可以選擇內核甚至修改附加內核參數。另外,我們也可以使用一個命令行的 shell 對引導過程進行高級手工控制。

將第二階段的引導加載程序加載到內存中之后,就可以對文件系統進行查詢了,并將默認的內核映像和 initrd 映像加載到內存中。當這些映像文件準備好之后,階段 2 的引導加載程序就可以調用內核映像了。

內核

GRUB 中的手工引導

在 GRUB 命令行中,我們可以使用 initrd 映像引導一個特定的內核,方法如下:

grub> kernel /bzImage-2.6.14.2
[Linux-bzImage, setup=0x1400, size=0x29672e]
grub> initrd /initrd-2.6.14.2.img
[Linux-initrd @ 0x5f13000, 0xcc199 bytes]
grub> boot
Uncompressing Linux... Ok, booting the kernel.

如果您不知道要引導的內核的名稱,只需使用斜線(/)然后按下 Tab 鍵即可。GRUB 會顯示內核和 initrd 映像列表。

當內核映像被加載到內存中,并且階段 2 的引導加載程序釋放控制權之后,內核階段就開始了。內核映像并不是一個可執行的內核,而是一個壓縮過的內核映像。通常它是一個 zImage(壓縮映像,小于 512KB)或一個 bzImage(較大的壓縮映像,大于 512KB),它是提前使用 zlib 進行壓縮過的。在這個內核映像前面是一個例程,它實現少量硬件設置,并對內核映像中包含的內核進行解壓,然后將其放入高端內存中,如果有初始 RAM 磁盤映像,就會將它移動到內存中,并標明以后使用。然后該例程會調用內核,并開始啟動內核引導的過程。

當 bzImage(用于 i386 映像)被調用時,我們從./arch/i386/boot/head.S 的 start 匯編例程開始執行(主要流程圖請參看圖 3)。這個例程會執行一些基本的硬件設置,并調用./arch/i386/boot/compressed/head.S 中的 startup_32 例程。此例程會設置一個基本的環境(堆棧等),并清除 Block Started by Symbol(BSS)。然后調用一個叫做 decompress_kernel 的 C 函數(在./arch/i386/boot/compressed/misc.c 中)來解壓內核。當內核被解壓到內存中之后,就可以調用它了。這是另外一個 startup_32 函數,但是這個函數在 ./arch/i386/kernel/head.S 中。

 vi arch/x86/{boot/{header.S,compressed/{head_{32,64}.S,misc.c},kernel/head.S}} init/main.c

在這個新的 startup_32 函數(也稱為清除程序或進程 0)中,會對頁表進行初始化,并啟用內存分頁功能。然后會為任何可選的浮點單元(FPU)檢測 CPU 的類型,并將其存儲起來供以后使用。然后調用 start_kernel 函數(在 init/main.c 中),它會將您帶入與體系結構無關的 Linux 內核部分。實際上,這就是 Linux 內核的 main 函數。


圖 3. Linux 內核 i386 引導的主要函數流程 
Linux 內核 i386 引導的主要函數流程  

通過調用 start_kernel,會調用一系列初始化函數來設置中斷,執行進一步的內存配置,并加載初始 RAM 磁盤。最后,要調用kernel_thread(在 arch/i386/kernel/process.c 中)來啟動 init 函數,這是第一個用戶空間進程(user-space process)。最后,啟動空任務,現在調度器就可以接管控制權了(在調用 cpu_idle 之后)。通過啟用中斷,搶占式的調度器就可以周期性地接管控制權,從而提供多任務處理能力。

在內核引導過程中,初始 RAM 磁盤(initrd)是由階段 2 引導加載程序加載到內存中的,它會被復制到 RAM 中并掛載到系統上。這個 initrd 會作為 RAM 中的臨時根文件系統使用,并允許內核在沒有掛載任何物理磁盤的情況下完整地實現引導。由于與外圍設備進行交互所需要的模塊可能是 initrd 的一部分,因此內核可以非常小,但是仍然需要支持大量可能的硬件配置。在內核引導之后,就可以正式裝備根文件系統了(通過 pivot_root):此時會將 initrd 根文件系統卸載掉,并掛載真正的根文件系統。

decompress_kernel 輸出

函數 decompress_kernel 就是顯示我們通常看到的解壓消息的地方:

Uncompressing Linux... Ok, booting the kernel.

initrd 函數讓我們可以創建一個小型的 Linux 內核,其中包括作為可加載模塊編譯的驅動程序。這些可加載的模塊為內核提供了訪問磁盤和磁盤上的文件系統的方法,并為其他硬件提供了驅動程序。由于根文件系統是磁盤上的一個文件系統,因此 initrd 函數會提供一種啟動方法來獲得對磁盤的訪問,并掛載真正的根文件系統。在一個沒有硬盤的嵌入式環境中,initrd 可以是最終的根文件系統,或者也可以通過網絡文件系統(NFS)來掛載最終的根文件系統。

 

Init

當內核被引導并進行初始化之后,內核就可以啟動自己的第一個用戶空間應用程序了。這是第一個調用的使用標準 C 庫編譯的程序。在此之前,還沒有執行任何標準的 C 應用程序。

在桌面 Linux 系統上,第一個啟動的程序通常是 /sbin/init。但是這不是一定的。很少有嵌入式系統會需要使用 init 所提供的豐富初始化功能(這是通過 /etc/inittab 進行配置的)。在很多情況下,我們可以調用一個簡單的 shell 腳本來啟動必需的嵌入式應用程序。

 

結束語

與 Linux 本身非常類似,Linux 的引導過程也非常靈活,可以支持眾多的處理器和硬件平臺。最初,加載引導加載程序提供了一種簡單的方法,不用任何花架子就可以引導 Linux。LILO 引導加載程序對引導能力進行了擴充,但是它卻缺少文件系統的感知能力。最新一代的引導加載程序,例如 GRUB,允許 Linux 從一些文件系統(從 Minix 到 Reise)上進行引導。


參考資料

學習

  • 您可以參閱本文在 developerWorks 全球站點上的 英文原文 。

  • Boot Records Revealed 是有關 MBR 和各種引導加載程序很好的資源。這個資源不僅僅是有關 MBR 的資料的匯編,還討論了 GRUB、LILO 和各種 Windows® 引導加載程序的問題。 

  • 請查看 Disk Geometry 頁面來理解磁盤及其結構。您會發現有關磁盤的有用屬性。 

  • live CD 是一個可以從 CD 或 DVD 上引導的操作系統,它不需要使用硬盤。 

  • 引導加載程序之爭:了解 LILO 和 GRUB”(developerWorks,2005 年 8 月)詳細介紹了 LILO 和 GRUB 引導加載程序。 

  • 在 developerWorks 上的 LPI 考試準備 系列教程中,我們可以學習有關引導 Linux 系統的詳細介紹,以及在準備參加系統管理員認證考試時需要準備的 Linux 基礎知識。 

  • LILO 是 GRUB 的先驅,但是我們可能發現它依然可以引導 Linux。 

  • mkintrd 命令用來創建初始的 RAM 磁盤映像。這個命令可以用來構建初始的根文件系統,它可以用來引導允許提前加載訪問真正根文件系統所需要的塊設備的配置。 

  • 在 Debian Linux Kernel Project 中,我們可以找到更多有關 Linux 內核、引導和嵌入式開發的信息。 

  • 在 developerWorks Linux 專區 中可以找到為 Linux 開發人員準備的更多資源。 

  • 隨時關注 developerWorks 技術事件和網絡廣播。 

獲得產品和技術

  • MicroMonitor 為各種小型的目標設備提供了引導環境。我們可以使用這個監視器在嵌入式環境中引導 Linux。它已經移植到 ARM、 XScale、MIPS、PowerPC、Coldfire 和 Hitachi 的 Super-H 上了。 

  • GNU GRUB 是一個具有眾多選項和靈活性的引導 shell。 

  • LinuxBIOS 是 BIOS 的一個替代品。LinuxBIOS 不但可以引導 Linux,而且它本身就是一個壓縮的 Linux 內核。 

  • OpenBIOS 是另一個可移植的 BIOS 項目,可以在很多體系結構上進行操作,例如 x86、Alpha 和 AMD64。 

  • 在 kernel.org 上可以找到最新的內核樹。 

  • 使用 IBM 試用版軟件 改進您的下一個開發項目,從 developerWorks 上可以直接下載這些軟件。 

 


from:

http://www.ibm.com/developerworks/cn/linux/l-linuxboot/



 

posted on 2010-11-08 19:58 chatler 閱讀(420) 評論(0)  編輯 收藏 引用 所屬分類: Linux_Coding
<2025年11月>
2627282930311
2345678
9101112131415
16171819202122
23242526272829
30123456

常用鏈接

留言簿(10)

隨筆分類(307)

隨筆檔案(297)

algorithm

Books_Free_Online

C++

database

Linux

Linux shell

linux socket

misce

  • cloudward
  • 感覺這個博客還是不錯,雖然做的東西和我不大相關,覺得看看還是有好處的

network

OSS

  • Google Android
  • Android is a software stack for mobile devices that includes an operating system, middleware and key applications. This early look at the Android SDK provides the tools and APIs necessary to begin developing applications on the Android platform using the Java programming language.
  • os161 file list

overall

搜索

  •  

最新評論

閱讀排行榜

評論排行榜

青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            在线不卡欧美| 国产亚洲va综合人人澡精品| 亚洲黄色av| 欧美国产亚洲精品久久久8v| 亚洲裸体俱乐部裸体舞表演av| 欧美高清在线一区| 亚洲在线成人| 亚洲国产成人久久综合| 老**午夜毛片一区二区三区| 亚洲乱亚洲高清| 性色av一区二区三区红粉影视| 激情综合在线| 欧美日韩在线精品| 久久综合电影一区| 欧美护士18xxxxhd| 国产精品久久久久久av福利软件| 久久亚洲视频| 久久国产手机看片| 亚洲一二三区视频在线观看| 91久久黄色| 蜜臀99久久精品久久久久久软件| 亚洲欧美国产不卡| 一区二区三区视频观看| 亚洲高清影视| 亚洲国产成人一区| 99精品国产热久久91蜜凸| 国产综合久久久久影院| 欧美日韩一区二区三区四区在线观看 | 亚洲国产精品小视频| 久久久久国产精品麻豆ai换脸| 一区二区三区高清不卡| 亚洲一区尤物| 亚洲欧美日韩网| 鲁大师影院一区二区三区| 欧美一区二区三区喷汁尤物| 亚洲欧美激情视频在线观看一区二区三区| 亚洲中字黄色| 亚洲日本电影| 亚洲精品国偷自产在线99热| 亚洲欧美日韩精品久久久| 亚洲丝袜av一区| 欧美韩日一区| 亚洲国产日韩欧美一区二区三区| 亚洲欧美国内爽妇网| 亚洲全部视频| 欧美成人资源| 国产精品免费看片| 国产主播精品在线| 亚洲欧美色婷婷| 久久一区国产| 亚洲精品一区二区三区不| 美女国产精品| 国产精品高清在线观看| 亚洲精品日日夜夜| 亚洲一区三区视频在线观看| 女仆av观看一区| 亚洲国产婷婷| 欧美freesex8一10精品| 欧美性感一类影片在线播放 | 一区二区三区日韩精品| 亚洲视频欧美在线| 久久美女艺术照精彩视频福利播放| 欧美视频一区二区三区| 国内精品久久久久国产盗摄免费观看完整版 | 亚洲国产裸拍裸体视频在线观看乱了中文| 欧美中文字幕在线视频| 欧美成va人片在线观看| 久久国产视频网| 精品91视频| 欧美成人一区二区| 亚洲欧美日韩高清| 国产亚洲欧洲一区高清在线观看| 在线免费精品视频| 午夜精品福利视频| 国产精品日韩欧美综合 | 欧美一区二区在线播放| 久久全球大尺度高清视频| 欧美在线视频一区二区| 亚洲欧洲视频| 美女网站在线免费欧美精品| 国产亚洲精品高潮| 六月婷婷久久| 欧美人妖在线观看| 国产视频亚洲精品| 久久久久久电影| 久久综合九色综合欧美就去吻| 亚洲黄色片网站| 99视频超级精品| 国产日韩免费| 欧美激情视频一区二区三区不卡| 欧美激情第一页xxx| 欧美亚洲视频| 欧美福利影院| 小处雏高清一区二区三区| 欧美在线高清视频| 国产精品国产a级| 久久另类ts人妖一区二区| 免费观看亚洲视频大全| 亚洲欧美日韩电影| 麻豆精品精华液| 亚洲男人的天堂在线aⅴ视频| 欧美在线关看| 亚洲制服av| 免费一级欧美片在线播放| 亚洲欧美日本国产专区一区| 美国成人直播| 久久国产精品毛片| 亚洲欧美国内爽妇网| 国产精品久久久久高潮| 麻豆成人在线播放| 欧美日韩亚洲另类| 欧美69视频| 国产亚洲第一区| 亚洲人成网站影音先锋播放| 国产欧美一区二区三区久久 | 欧美日韩不卡| 一级日韩一区在线观看| 久久精品成人一区二区三区蜜臀 | 在线视频免费在线观看一区二区| 亚洲综合日韩在线| 99国内精品久久| 亚洲精品视频在线观看免费| 国产精品视频99| 亚洲电影免费观看高清完整版在线观看 | 久久久一本精品99久久精品66| 国产乱人伦精品一区二区| 欧美在线亚洲在线| 国产精品成人v| 亚洲裸体俱乐部裸体舞表演av| 亚洲国产精品久久久久婷婷884 | 六月婷婷久久| 国产在线不卡精品| 午夜精品一区二区三区电影天堂| 国产一区二区高清不卡| 中文在线资源观看网站视频免费不卡| 欧美成人一区二区| 亚洲高清中文字幕| 免费亚洲一区| 亚洲精品一区在线| 亚洲香蕉成视频在线观看| 欧美一级专区免费大片| 国内外成人在线视频| 欧美激情精品久久久久| 国产一区久久久| 久久精品视频一| 亚洲欧美日韩视频二区| 欧美日韩一区二区视频在线观看| 亚洲激情av| 亚洲午夜电影在线观看| 国产精品成人免费精品自在线观看 | 一区二区免费在线播放| 欧美日韩的一区二区| 亚洲精品欧美激情| 亚洲女人小视频在线观看| 国产婷婷色一区二区三区在线| 欧美在线资源| 欧美国产精品v| 亚洲午夜久久久| 国产日韩欧美精品一区| 久久精彩视频| 亚洲国产成人av在线| 亚洲自拍偷拍一区| 黑人极品videos精品欧美裸| 久久综合五月天婷婷伊人| 亚洲日本va午夜在线电影| 亚洲午夜精品视频| 国产一区二区三区四区在线观看 | 亚洲一区二区三区视频| 欧美一区二区| 亚洲高清视频一区| 欧美三级网页| 亚洲自拍偷拍视频| 亚洲自拍16p| 欧美肥婆在线| 在线精品视频一区二区三四| 欧美福利电影网| 亚洲一级一区| 免费国产自线拍一欧美视频| 99人久久精品视频最新地址| 午夜精品久久久久久久99热浪潮| 久久精品国产欧美激情| 亚洲精品一区二区三区av| 欧美日韩在线播放三区四区| 久久精品麻豆| 亚洲一区综合| 99re热这里只有精品免费视频| 亚洲黄色大片| 国产精品影视天天线| 欧美激情第五页| 久久久国产91| 亚洲主播在线播放| 亚洲理伦电影| 亚洲电影下载| 老巨人导航500精品| 一区二区三区精密机械公司| 国外成人在线| 国产亚洲精品福利| 国产精品一国产精品k频道56| 麻豆成人精品| 狂野欧美性猛交xxxx巴西|