linux系统如何配置可以不用 initrd ,grub中该如何修改对应启动项

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了linux系统如何配置可以不用 initrd ,grub中该如何修改对应启动项相关的知识,希望对你有一定的参考价值。

按照这个方式做的,但是不行

1.硬盘和文件系统驱动是系统启动加载rootfs所必需,所以必须编译进KERNEL。
文件系统选项配置比较简单,选择1.File systems->Ext3 journalling file system support(支持EXT3),
2.File systems->Dnotify support,3.File systems->Inotify file change notification support,
2,3选项如果不选,重启后键盘不能使用。是否可以修改启动脚本来加载键盘驱动,有待验证。
硬盘驱动的选择理由如下:
X86的南桥连接相对低速设备(SATA/USB设备,PCI声卡等),北桥连接相对高速设备(RAM,AGP/PCI显卡),
南桥和北桥以前使用PCI总线相连(现在有所变化),PCI位于SATA/USB设备的上方,所以必须将Bus options->PCI support
编译进kernel.
SCSI接口被linux硬盘驱动(包含SATA硬盘)所采用,所以必须将SCSI device support->SCSI disk support编译进kernel.
硬盘接口是SATA ICH9 ,所以将Serial ATA...->Intel ESB,ICH..., SATA support编译进kernel.
2.Packet socket,Unix domain sockets, PF_KEY sockets必须编译进kernel,因为进程间通信需要使用socket,否则会kernel panic
3.根据我的硬件环境,Processor family当然选Core 2/newer Xeon
4.Linux可执行文件格式是ELF,所以选kernel support for ELF binaries
5.启动时,我们不要initrd,所以不选Initial RAM filesystem and RAM disk (.../initrd)...
6.启动后,键盘是必须的,因为没有initrd,所以将键盘驱动相关选项编译进kernel.
HID Devices->Generic HID support;keyboards->XT keyboard.
是否可以将键盘相关选项编译进MODULES,在启动脚本加载键盘驱动,需要以后实验。
7.启动后,希望动态加载/卸载USB设备,所以将USB下的UHCI,EHCI选项选为编译进MODULE
希望有做个的朋友,说下具体步骤,谢谢了

Linux(Fedora/Ubuntu/RetHat)双/多系统后,设置GRUB默认启动windows或linux系统及Menu.lst参数就显得尤为重要了,因为通过设置我们可以选择默认启动哪个系统、出现选择界面时的停留时间、调整系统默认启动顺序等。
一、首先介绍如何设置GRUB默认启动哪个系统
由于Ubuntu/Fedora等Linux系统采用都是Linux文件结构,这里就不分开讲,下面提到的文件都在同一个位置。
1.打开终端,输入“su”(不包含引号),接着输入root密码。
2.登录root以后,输入
vi /boot/grub.conf 3.我们会看到GRUB的文件信息找到下面的文字出现的地方。
#boot=/dev/sda
default=0
timeout=0
在下面timeout=0(timeout默认为0)会列出你所有的系统,因人而异。看看我的:
splashimage=(hd0,0)/grub/splash.xpm.gz

hiddenmenu

title Red Hat Enterprise Linux AS (2.6.27.29-170.2.78.fc10.i686)

root (hd0,0)

kernel /vmlinuz-2.6.27.29-170.2.78.fc10.i686 ro root=/dev/VolGroup00/LogVol00 rhgb quiet

initrd /initrd-2.6.27.29-170.2.78.fc10.i686.img

title Red Hat Enterprise Linux AS (2.6.27.25-170.2.72.fc10.i686)

root (hd0,0)

kernel /vmlinuz-2.6.27.25-170.2.72.fc10.i686 ro root=/dev/VolGroup00/LogVol00 rhgb quiet

initrd /initrd-2.6.27.25-170.2.72.fc10.i686.img

title Fedora (2.6.27.24-170.2.68.fc10.i686)

root (hd0,0)

kernel /vmlinuz-2.6.27.24-170.2.68.fc10.i686 ro root=/dev/VolGroup00/LogVol00 rhgb quiet

initrd /initrd-2.6.27.24-170.2.68.fc10.i686.img
每一个title后面就时一个系统名称。
我这里有三个系统,比如我想启动第三个系统“Fedora”,我只要
按键盘上的“i”键,将光标移动到“default=0”的后面,将0改为2(记住这里第一个系统代号为0,第二个系统代号为1,顺序加下去)。
如果你想开机的时候可以留下一定的时间给自己选择启动哪个系统,只要修改timeout后面的值就可以了,一般改成3或5就可以了。
改好以后,按‘ESC’,再按“:”(就是‘shift+“;”,不包含引号),输入’wq‘,你的修改就保存好了,重启以后就可以了。
如果你想默认启动Windows系统也时一样的方法,找到Windows系统看看排在第几,修改default为对应的值就可以了
参考技术A 配置kernel source的.config文件时, 需要内建很多驱动程序。
我对那些不熟悉, 不过你可以参考slackware的 kernel-huge的.config文件, 它那个内核在一定条件下是不需要initrd.gz包的。
参考技术B 关注

[转] initrd详解

转自:http://www.cnblogs.com/leaven/archive/2010/01/07/1641324.html

在Linux操作系统中,有一项特殊的功能——初始化内存盘INITRD(INITial Ram Disk)技术,而且内核支持压缩的文件系统映像。有了这两项功能,我们可以让Linux系统从小的初始化内存盘启动,并把系统内存的一部分作为根文件系统挂载。

  Ramdisk就是将内存的一部分分配为一个分区并作为硬盘来使用。对于系统运行时不断使用的程序,将它们放在Ramdisk中将加快计算机的操作,如大数据量的网络服务器、无盘工作站等。为了能够使用Ramdisk,我们在编译内核时须将block device中的Ramdisk支持选上,它下面还有两个选项,一个是设定Ramdisk的大小,默认是4096k;另一个是设定默认个数。如果要使用initrd,还得选上的支持。它既可以直接编译进内核,也可以编译成模块,在需要的时候加载。我们由于在启动时就用它,所以必须将它直接编译进内核。

  下面是2.6内核对模块选择路径:

  Linux Kernel Configuration
      -> Device Drivers
        ->Block devices
          ->RAM block device support
            ->Default number of RAM disks  (设定Ramdisk的个数,默认是16)
            ->Default RAM disk size (kbytes) (设定Ramdisk的大小,默认是4096k)


  Linux Kernel Configuration
      ->General setup
        ->Inital RAM filesystem and RAM disk(initramfs/initrd) support

  如果对Ramdisk的支持已经编译进内核,我们就可以使用它了。首先在/mnt目录下创建目录ram,运行mkdir /mnt/ram;然后对/dev/ram0创建文件系统,运行mke2fs /dev/ram0;最后挂载上/dev/ram,运行mount /dev/ram0 /mnt/ram,就可以象对普通硬盘一样对它进行操作了。值得注意的是,在创建文件系统的时候,在屏幕上输出1024 inodes ,4096 blocks,即ramdisk大小为4M=4096个块,但是我们挂载上之后,用命令df –k /dev/ram查看时,显示出来ramdisk大小只有3963K,这是由于文件系统本身占用了一些空间。(这个空间是在编译核心时就由Default RAM disk size (kbytes)确定下来)

  我们能根据需要改变ramdisk的大小。如我们要把默认的4M增大到8M,当ramdisk是直接编译进内核的情况下,可在grub配置文件 grub.conf中加入ramdisk=8192 ,运行grub后,重启计算机后,ramdisk大小变为8M。

  例如要设置Ramdisk的大小为8M,在grub中可以用:

  # grub.conf -
  default=0
  timeout=10
  splashimage=(hd0,0)/grub/splash.xpm.gz
  title Redice Linux
        root (hd0,0)
        kernel /vmlinuz ro root=LABEL=/ hdc=ide-scsi ramdisk=8192
        initrd /initrd

  这样Ramdisk的大小就变成16M了。这个参数是Ramdisk直接编译到核心时才能使用的,如果Ramdisk编译为模块,则应该使用模块参数来设置Ramdisk的大小:

  a、在模块加载配置文件 /etc/modules.conf中加入一行:

  options rd rd_size=8192,

  b、在加载rd模块是在后面加上说明,即insmod rd rd_size=8192。

  # insmod rd rd_size=8192
 
  编译到核心时,可以通过下面的一些核心命令行参数来配置Ramdisk:

  ramdisk_size - ramdisk的大小(Kbytes);
  ramdisk - 与ramdisk_size的作用相同;
  ramdisk_blocksize - ramdisk的块大小,默认情况为1024;

  当以模块的形式译时,模块支持以下几个加载参数:

  rd_size - 同上面的ramdisk_size或ramdisk参数;
  rd_blocksize - 同上面的ramdisk_blocksize;
 
  或者在启动是作为启动行参数ramdisk=8192;

  创建initrd ramdisk 映像

  上面已经提到,Ramdisk需要先格式化然后才能使用。那么,如果核心希望使用ramdisk该如何做呢?于是initrd产生了,initrd全称是 initial RAM disk ,它提供一种让核心可以简单使用Ramdisk的能力,简单的说,这些能力包括:

  格式化一个 Ramdisk;
  加载文件系统内容到Ramdisk;
  将Ramdisk作为根文件系统;

  我们可以将initrd形像的比作Norton Ghost备份的硬盘分区,而Linux启动阶段的Ramdisk相当于一个未格式化的硬盘分区,核心可以直接将initrd的内容释放到一个未初始化的Ramdisk里,这个过程与Ghost恢复一个分区的过程十分相似。于是,相应的内容被加载到相应的Ramdisk中,同时,这个Ramdisk也被格式化成某种由initrd格式所表达的分区格式。

  initrd与Ghost备份的分区有许多相似之处,例如,它有一定的大小,包含分区上的文件系统格式等。initrd支持的格式包括:Ext2文件系统、Romfs文件系统、cramfs文件系统、minix文件系统、如果核心选择了Gzip支持(通常这是默认的,在init/do_mounts_rd.c中定义的BUILD_CRAMDISK宏)还可以使用Gzip压缩的initrd。相关的代码可以在核心源码 drivers/block/rd.c:identify_ramdisk_image中找到。

  制作initrd
 
  initrd 主要有两种格式:传统的ramdisk和cpio格式(这种格式的好处是内核原生不需要额外的文件系统支持)

  制作initrd传统的作法是通过软盘(显然过时了,不介绍了)、ramdisk或loop设备(/dev/loop)。通过ramdisk来制作的方法比较简单(以ext2文件系统为例):

  通过ramdisk

  # mkfs.ext2 /dev/ram0
  # mount /dev/ram0 /mnt/rd
  # cp _what_you_like_  /mnt/rd    # 把需要的文件复制过去 
  # dd if=/dev/ram0 of=/tmp/initrd
  # gzip -9 /tmp/initrd

  这个过程也最能够解释initrd的本质,对于Linux来说,Ramdisk的一个块设备,而initrd是这个块设备上所有内容的“克隆”(由命令dd来完成)而生成的文件。核心中加载initrd相关的代码则用于完成将相反的过程,即将这一个文件恢复到Ramdisk中去。

  通过loop设备来制作initrd的过程:

  dd if=/dev/zero of=/tmp/initrd bs=1024 count=4096 # 制作一个4M的空白文件
  losetup /dev/loop0 /tmp/initrd                    # 映射到loop设备上;
  mkfs.ext2 /dev/loop0                              # 创建文件系统;
  mount /dev/loop0 /mnt/rd
  cp _what_you_like_ /mnt/rd                        # 复制需要的文件;
  umount /mnt/rd
  losetup -d /dev/loop0
  gzip -9 /tmp/initrd

  通过cpio来制作initrd的过程:

  cd /path/to                    # 到需要复制的文件的目录
  find . |cpio -o -H newc |gzip -c > ../initrd.gz

  不过,现在已经有了一些更好的工具来完成这些工作,包括genromfs(uClinux里常用的工具),genext2fs,mkcramfs、mkinitrd等。这些工具提供了一些方便开发的新特性,例如,不需要上面烦索的过程,只要将文件复制到某个目录中,将其作为根目录,即可生成initrd;另一个重要的改进是,这些工具都可以以普通用户的身份来生成initrd。







































以上是关于linux系统如何配置可以不用 initrd ,grub中该如何修改对应启动项的主要内容,如果未能解决你的问题,请参考以下文章

系统引导

linux下如何制作initrd镜像?

下载的Linux系统要怎样安装?

Linux系统启动流程

linux中常用文件系统介绍——cramfs JFFS2 NFS initrd yaffs2 Ext4 squashfs

linux文件系统 - 初始化