linux kernel 為什麼需要initrd

2021-09-23 14:50:22 字數 1342 閱讀 7909

今天看了一本書, linux核心技術手冊, 很多東西豁然開朗, 裡面有一些東西寫點總結給大家看一下

其實大家關於linux的知識都是遇到什麼問題, 網上看什麼問題, 都比較零碎. 對於老手來說, 零碎的東西一看就知道了, 但是對於初學者來說, 零碎的東西還是比較難以理解.

看完之後, 把多年的一些問題想明白了.

之前一直不是很明白為什麼需要initrd, 原來是為了驅動root fs, 那為了驅動root fs, 把對應的驅動編譯進vmlinux裡面也沒什麼問題, 根本的問題是在編譯vmlinux的時候, 不知道root fs是什麼驅動, 那不是要把所有的驅動都編譯進vmlinux, 那這樣核心就會變得很大, 但是對於乙個確定的硬體, 可以只把需要的驅動編譯進vmlinux, 就不存在核心太大的問題了.

在一般用qemu來啟動系統的情況下, 如果使用initrd的情況下, 要先編譯bzimage, 然後要編譯modules, 然後modules_install, 然後install生成initrd, 耗時太久, 如果bzimage包含了root fs的驅動的話, 只需要bzimage, qemu就可以直接啟動了, 省去了很多步驟和時間

比如說我都是這樣啟動vm的

想啟動什麼核心就啟動什麼核心, 如果每次都要把bzimage都拷進vm disk裡面的話, 很容易搞錯版本, 因為中間增加了乙個資訊傳遞的過程

下面就是如何把rootfs的驅動編譯進核心裡面

首先檢視是什麼檔案系統, 這個很容易理解

/dev/root / ext4 rw,relatime,data=ordered 0 0

檔案系統是ext4, 所以先把ext4編譯進核心

config_ext4_fs=y

然後再看磁碟驅動

cd /sys/block/vda/device/

ls -l

lrwxrwxrwx 1 root root 0 jun 17 09:42 driver -> ../../../../bus/virtio/drivers/virtio_blk

可以看到驅動是virtio_blk和virtio

config_virtio_blk=y

config_virtio_pci=y

為什麼是這2個我就不贅述了, 可以看書裡面有很詳細的描述

這樣編譯出來的bzimage就可以用qemu直接啟動了, 啟動命令還是和上面一樣

可能大家會說, 一開始傳遞的就是 -drive file=centos7.vhd,if=virtio, 當然知道是virtio了, 那一開始不知道是virtio, 系統都啟動不了, 怎麼進入系統找驅動, 其實這個問題可以先用發行版的bzimage和initrd先啟動系統來找出驅動是什麼, qemu的引數就是-kernel *** -initrd ***

為什麼要安裝python軟體 為什麼軟體需要安裝?

主要是為了方便使用者操作,畢竟安裝程式是使用者接觸這個應用程式之前的第乙個應用程式,自然是希望操作越簡單越好,最好是可以不停地下一步或者繼續就可以安裝成功 這也給了那些惡意軟體操作的空間,如 安裝 在安裝期間,最常見的就是設定安裝路徑,還有的呢會進行修改 windows 設定,如一些環境 node,...

HTTPS埠443保護什麼,為什麼我們需要它

https為在瀏覽器和伺服器之間共享的資料或敏感資訊提供安全性。它通過加密交換和授予隱私來確保您的isp 或網路上的任何其他人 不會閱讀或干擾會話。但是請不要誤解此安全鎖定功能。它確實可以加密通訊通道,但是不能保證攻擊者不會管理您連線的 此外,如果您的站點上存在薄弱環節,黑客將利用它們並破壞您的資料...

為什麼企業需關心DDoS攻擊? Vecloud微雲

有人會問,什麼ddos?ddos 分布式拒絕服務,這是被精心策劃的惡意攻擊的技術術語,該惡意攻擊將非法流量淹沒網路或 最終導致過載和崩潰。那為什麼要關心ddos?全球網路安全公司kaspersky lab進行的一項調查發現,平均而言,企業ddos攻擊造成損失為200萬美元,中小企業ddos攻擊造成損...