`
骑猪逛街666
  • 浏览: 144241 次
  • 性别: Icon_minigender_2
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

linux kernel 为什么需要initrd

 
阅读更多

阅读原文请点击

摘要: 今天看了一本书, linux内核技术手册, 很多东西豁然开朗, 里面有一些东西写点总结给大家看一下 其实我还挺喜欢看手册之类的书, 因为看完之后, 可以对某个工具的所有功能有个大概的了解, 比如Makefile手册, vim手册, gcc手册. 虽然所有的用法不会都去尝试一遍, 但是知道了有这个东西, 哪天用得时候就会想起来, 不然的话, 需要解决一个问题的时候, 都不知道有这个东西的存在,

今天看了一本书, linux内核技术手册, 很多东西豁然开朗, 里面有一些东西写点总结给大家看一下

其实我还挺喜欢看手册之类的书, 因为看完之后, 可以对某个工具的所有功能有个大概的了解, 比如Makefile手册, vim手册, gcc手册. 虽然所有的用法不会都去尝试一遍, 但是知道了有这个东西, 哪天用得时候就会想起来, 不然的话, 需要解决一个问题的时候, 都不知道有这个东西的存在, 然后就是漫天满地的找

其实大家关于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的

sudo qemu-system-x86_64 -vnc :11 -enable-kvm -drive file=centos7.vhd,if=virtio -serial mon:stdio -smp 1 -m 10240 -redir tcp:1011::22 -s -append "root=/dev/vda1 console=ttyS0" -kernel /home/shidao.ytt/alikernel/7u/arch/x86/boot/bzImage

想启动什么内核就启动什么内核, 如果每次都要把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 xxx -initrd xxx

阅读原文请点击

分享到:
评论

相关推荐

    linux-kernel如何编译总结-fedora

    首先,你需要下载Linux内核的源代码安装包。在Fedora的情况下,可以从`http://download.fedora.redhat.com/pub/`获取,例如,作者下载的是`kernel-2.6.25-14.fc9.src.rpm`。如果你选择下载`.tar.gz`格式的源码包,...

    Linux2.6 内核的 Initrd 机制解析

    在Linux2.6内核中,Initrd文件格式由原来的文件系统镜像文件变更为CPIO格式,这不仅仅是文件格式的变化,还涉及到内核处理机制的根本改变。 **2. 处理流程概述:** - **加载与解压:**Bootloader将内核和Initrd...

    Linux Kernel 2.4 Internals

    ### Linux Kernel 2.4 Internals #### Booting **1.1 Building the Linux Kernel Image** 构建Linux内核镜像涉及多个步骤。首先,需要获取Linux内核源代码,这通常通过git或tarball的形式获得。之后,配置过程至...

    ubuntu下编译linux kernel 2.6.38

    在Ubuntu 10.10环境下编译Linux内核2.6.38涉及一系列步骤,需要对操作系统、内核版本、编译工具和配置选项有深入理解。以下是详细的编译流程和注意事项: 首先,确保你的环境是Pentium 4架构的Ubuntu 10.10(内核...

    vmlinuz.txt与initrd 用于windows中安装linux

    1. 下载vmlinuz和initrd.gz:首先,你需要访问Linux发行版的官方网站,找到对应版本的vmlinuz和initrd.gz文件,下载到本地。 2. 创建引导媒体:将这两个文件复制到一个USB驱动器或光盘,这将成为安装Linux的引导...

    可以用于qemu启动的aarch64 linux kernel Image

    《QEMU启动的Aarch64 Linux Kernel Image详解》 在深入探讨QEMU启动的Aarch64架构Linux内核Image之前,我们首先要理解几个关键术语。QEMU是一款强大的开源模拟器,它允许用户在一台计算机上运行多种操作系统,而...

    initrd.img文件分析

    kernel 的启动分成两个阶段:在 kernel 中保留最少最基本的启动代码,然后把对各种各样硬件设备的支持以模块的方式放在 initrd 中,这样就在启动过程中可以从 initrd 所mount 的根文件系统中装载需要的模块。...

    linux kernel编译指导.docx

    9. **生成initrd.img文件**:为了支持启动过程中加载必要的驱动,需要创建初始化ramdisk (initrd) 图像。进入`/lib/modules/<new_kernel_version>`目录,执行`update-initramfs -c -k <new_kernel_version>`。 10. ...

    linux 2.6 kernel移植到QEMU Mips的源代码文档。

    ### Linux 2.6 Kernel 移植到 QEMU MIPS 的源代码文档 #### 知识点一:Linux 2.6 内核移植至 QEMU MIPS 的准备工作与环境配置 在进行 Linux 2.6 内核移植到 QEMU MIPS 的过程中,首先需要准备合适的开发环境。根据...

    搭建PXE远程安装linux服务器

    ### 搭建PXE远程安装Linux服务器 #### 一、引言 PXE(Preboot Execution Environment)是一种网络引导技术,它允许计算机通过网络启动操作系统。本文将详细介绍如何搭建一个PXE远程安装Linux服务器的过程,使用户...

    debian update kernel

    然后,我们可以使用 fakeroot 命令来编译内核,命令如下:`# fakeroot make-kpkg --revision=mykernel2.6.16 --initrd --stem linuxkernel_image modules_image`。 安装新编译的内核 编译完成后,在 /usr/src 目录...

    bzImage+initrd.gz

    `bzImage`是Linux内核的一种特定的二进制格式,全称为“Compressed Binary Image for Big Kernel”(大内核的压缩二进制映像)。它包含了用于启动Linux操作系统的代码和数据,特别是对于x86架构,它是加载到内存中并...

    linux内核启动地址修改

    例如,若需要在DDR的开始位置为DSP镜像分配16MB的内存空间,就需要更改SDRAM、ZRELADDR、PARAMS_PHYS以及INITRD_PHYS这几个配置项的值,使其分别对应为0x1000000、0x***等值。 值得注意的是,当前Linux内核要求内核...

    kernel_options__Linux_2.6.19.x_内核编译配置

    Linux内核编译是一项将内核源码编译为可以运行在特定硬件上的内核映像的过程。内核映像包含了操作系统的核心功能,包括硬件设备的驱动程序、系统调用接口等。Linux 2.6.19.x版本是一个较为老旧的Linux内核版本,但是...

    linux 2.6 kernel移植到QEMU Mips的源代码文档. (更新版本)

    ### Linux 2.6 Kernel 移植到 QEMU Mips 的源代码文档 #### 概述 本文档详细介绍了如何将 Linux 2.6 内核移植到 QEMU MIPS 平台上,使得开发者可以在没有实际 MIPS 硬件的情况下进行内核的调试与研究。通过本文档...

    start_kernel.xmind

    start_kernel流程图 linux2.6 内核支持两种格式的 initrd,一种是 image-initrd,其核心文件就是 /linuxrc。另外一种是cpio-initrd,使用 cpio 工具生成,其核心文件不再是 /linuxrc,而是 /init。尽管 linux2.6...

    ARM+Linux的启动分析(zImage)

    3. **bootpImage - 结合zImage和初始RAM磁盘(initrd)**:此方案将zImage与initrd合并成一个映像文件,允许通过网络等方式加载内核及必要的启动文件。 #### 2. zImage启动方案详解 ##### 2.1 zImage的生成过程 1...

    initrd vmlinuz

    在Linux系统启动过程中,如果根文件系统位于非标准设备上(如LVM、软件RAID或加密分区),或者需要特定的驱动程序才能挂载,那么就需要使用initrd。`initrd.gz`就是这个初始化RAM磁盘的压缩版本,通常在引导加载器...

    kernel启动过程和kernel核心结构.rar

    1. **内核模块**:Linux内核由许多可加载模块组成,这些模块可以根据需要加载或卸载,增强了系统的灵活性。 2. **进程管理**:内核管理所有进程的调度、同步、互斥以及信号等,包括进程创建、销毁、上下文切换等。 ...

Global site tag (gtag.js) - Google Analytics