Linux 筆記 2

tags: Linux 讀書會

Bootstrap (開機載入)

完整的linux系統需要以下部分

  • Bootloader
    • Device tree blob
    • boot.img
  • Linux Kernel (Linux核心)
  • Root Filesystem (根目錄檔案系統)

常見的Bootloader

  • Grub
    一個來自GNU專案的啟動載入程式。允許用戶可以在電腦內同時擁有多個作業系統,並在電腦啟動時選擇希望執行的作業系統。
  • Uboot
    桌機開機時先執行BIOS,先初始化電腦周邊裝置,再從硬碟或其他儲存裝置將作業系統載入到記憶體執行。
    然而在Embedded system則稱為Bootload,較為普遍使用的Bootload為u-boot。
    開機時u-boot協助將Linux的Image搬到記憶體,但Image在產生時沒有提供u-boot足夠的資訊執行搬移動作與啟動核心,因此u-boot提供了mkimage工具,來將Liinux kernel的Image或zImage轉成u-boot可以識別的格式,產生的檔案稱之為uImage。

Linux開機啟動過程詳解(bootstrap)

  1. 開機時計算機會透過BIOS讀取存儲設備

  2. 從存儲設備讀取起始的512 bytes,這512 bytes叫做主引導記錄MBR (master boot record)
    MBR會告訴電腦從該設備的某一個分區(partition)來裝載引導加載程序(boot loader),Boot loader儲存有作業系統(OS)的相關信息,比如作業系統名稱,作業系統核心 (kernel)所在位置等。

  3. boot loader會加載kernel
    kernel實際上是一個用來操作計算機的程式,它是計算機作業系統的核心,主要的任務是管理計算機的硬體資源,充當軟體和硬體的接口。作業系統上的任何操作都要通過kernel傳達給硬體。Windows和Linux各自有自己kernel。狹義的作業系統就是指kernel,廣義的作業系統包括kernel以及kernel之上的各種應用。

  4. 如果載入的是Linux kernel,kernel會首先預留自己運行所需的儲存空間,然後通過驅動程序(driver)檢測計算機硬體,如此作業系統就可以知道自己有哪些硬體可用
    kernel會啟動一個init進程。它是Linux系統中的1號進程(Linux系統沒有0號進程)。

  5. Init process(初始化程序)會運行一系列的初始腳本(startup scripts),這些腳本是Linux中常見的shell scripts。執行如下功能

    • 設置計算機名稱
    • 時區
    • 檢測文件系統
    • 掛載硬碟
    • 清空臨時文件(/tmp)
    • 設置網路
    • …等
  6. 最後init會給出登錄(login)對話框,或者是圖形化的登錄介面

總結 BIOS -> MBR -> boot loader -> kernel -> init process -> login


Linux Kernel

電腦真正在工作的東西其實是『硬體』, 例如數值運算要使用到 CPU、資料儲存要使用到硬碟、圖形顯示會用到顯示卡、 音樂發聲要有音效晶片、連接 Internet 可能需要網路卡等等。那麼如何控制這些硬體呢? 那就是核心的工作了!也就是說,你所希望電腦幫你達成的各項工作, 都需要透過『核心』的幫助才行。

Root Filesystem

Root filesystem的建置,即是在建立1個基本的Linux系統(base system),讓kernel在完成開機後,進入user mode執行使用者程式。
嵌入式Linux的root filesystem是依照需求加入套件,當root filesystem缺少必要的library時,程式當然無法執行,甚至系統也會無法順利啟動。


本章節練習與反思

  • 一般計算機都是從 0 開始數,那為什麼文中提到的 init 的 pid 為 1 呢?那 pid 0 的行程又是什麼呢?
    PID為0者為idle process,沒有其他process時就會調用idle()

資料來源

linux process(三)——idle process

https://blog.csdn.net/u013686805/article/details/19905941