LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 953|回复: 9

成功摆脱initrd

[复制链接]
发表于 2009-10-25 23:37:23 | 显示全部楼层 |阅读模式
编译内核完成后安装生成的deb包,用mkinitrd.yaird 制作initrd.img文件不成功,报错:

  1. yaird error: bad device link in /sys/block/hda (fatal)
复制代码

改用mkinitramfs做成一个,无奈启动的时候到了usbcore之类的加载好之后就卡住了,等了很久冒出下面的提示:

  1. Gave up waiting for root device.
  2. Common problems: -Boot args(cat /proc/cmdline)
  3. -check rootdelay=(did the system wait long enough)
  4. -check root=(did the system wait for the right device)
  5. -Missing modules (cat /proc/modules;ls /dev)
  6. Alert /dev/hdb3 doesn\'t exist
复制代码

有人说是rootdelay设置的时间太短 导致系统还没有正常加载完设备驱动就已经开始寻找root分区,而导致找不到/root分区。我在引导语句里加上rootdelay=10,只不过是停了10s左右,错误如约而至。
我用源里安装的内核配置文件不加任何改动编译一遍,做个initrd.img引导居然跟上边的提示一样就卡住了。
之前看过相关帖子知道initrd并不是必须的,那我试试摆脱它。

不敢再蛮干,体恤一下电脑。找了找资料:
http://www.linuxsir.cn/bbs/thread143253.html

d00m3d说

  1. 想去掉 initd,重点是要确保内核启动时能辨认根分区的文件系统格式然後加载根分区,所以相关的支援要直接编入内核,不要编成模块
  2. 其次是硬件支援,这关乎 SATA、SCSI、IDE 之类的,有了这些,基本上行矣
复制代码

chaisave说

  1. 一般来说,把 IDE 驱动(或者 SATA,SCSI 驱动) 和芯片组驱动、/ 和 /boot 的文件系统驱动,编进内核就行了。其它的诸如网络相关和声卡等驱动编译成模块也无妨。
复制代码

我重新修改内核配置,凡是看到IDE、PCI、SCSI相关的选项,“高度重视”,把一些打上*(built-in)。
我的/boot文件系统是ext3,这里有个问题,就是我在grub命令行下输root (hd0,2) 回车得到的结果是:

  1. File system type is ext2fs,partition type 0x83。
复制代码

我又用df -T查看:

  1. Filesystem    Type   1K-blocks      Used Available Use% Mounted on
  2. /dev/hdb3     ext3      264443    117024    133764  47% /
  3. ………………………………………………………………
复制代码

算了,为了保险,就把ext2,ext3都编进去吧。编译完一启动,报出以下错误:

  1. kernel panic-not syncing VFS:unable to mount root fs on unknown-block(0,0)
复制代码

估计问题出在IDE或者芯片组上
lspci -v

  1. ……………………………………………………………………
  2. 00:1f.1 IDE interface: Intel Corporation 82801G (ICH7 Family) IDE Controller (rev 01) (prog-if 8a [Master SecP PriP])
  3. ……………………………………………………………………
  4.         Kernel driver in use: PIIX_IDE

  5. 00:1f.2 IDE interface: Intel Corporation 82801GB/GR/GH (ICH7 Family) SATA IDE Controller (rev 01) (prog-if 8f [Master SecP SecO PriP PriO])
  6. ……………………………………………………………………
  7.         Kernel driver in use: ata_piix
  8. ……………………………………………………………………
复制代码

对照一下自己的config:
CONFIG_BLK_DEV_PIIX is not set,赶紧改过来,编译好,终于能够成功引导了。
目前的vmlinuz是2M,有待继续精简,请问有什么方法能查看被编译进内核的模块占用情况吗?就像lsmod那样。
发表于 2009-10-26 10:13:08 | 显示全部楼层
我做 LFS 时的原则,都编译进内核,呵呵。
回复 支持 反对

使用道具 举报

发表于 2009-10-26 12:57:47 | 显示全部楼层
不错,很欣赏楼主这种求知精神。

补充一点,一般情况下应该无需使用 rootdelay,除非根分区在启动挂载时遇上困难,比如在移动设备上启动 Linux:

http://www.linuxsir.cn/bbs/thread236435.html
回复 支持 反对

使用道具 举报

 楼主| 发表于 2009-10-26 19:35:57 | 显示全部楼层
嗯,多谢,什么时候我也做个USB启动盘。
回复 支持 反对

使用道具 举报

发表于 2009-10-26 20:11:47 | 显示全部楼层
ext3同时支持ext2的。蛮的boot区是ext2,内核只编译ext3,不用ext2,连模块都用不着。
其他的精简就要看自己的硬件了。蛮的内核也有1.6M,另外还有模块。
回复 支持 反对

使用道具 举报

发表于 2009-10-27 03:10:46 | 显示全部楼层
为啥不要initrd呢?
这个东西对加速启动速度很有帮助的。。。。
lfs上不弄这个是因为太麻烦了吧。。。-,-
回复 支持 反对

使用道具 举报

发表于 2009-10-27 05:45:23 | 显示全部楼层
Post by mikeandmore;2040200
为啥不要initrd呢?
这个东西对加速启动速度很有帮助的。。。。
lfs上不弄这个是因为太麻烦了吧。。。-,-


加速启动速度?

明显是加长了启动时间,减速才对!

LFS 不弄这个是因为这个多此一举。
回复 支持 反对

使用道具 举报

发表于 2009-10-27 11:48:28 | 显示全部楼层
那些模块是按需加载的,和都编译进内核应该很不同。
initramfs是通用内核才使用的,为了减小内核体积,专用内核没必要使用。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2009-10-28 10:39:26 | 显示全部楼层
Post by waq;2040131
ext3同时支持ext2的。蛮的boot区是ext2,内核只编译ext3,不用ext2,连模块都用不着。
其他的精简就要看自己的硬件了。蛮的内核也有1.6M,另外还有模块。


呵呵,我也不知道grub为什么会给出这样的提示,后来重新编译的时候把ext2剔除掉也成功启动的。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2009-10-28 10:41:21 | 显示全部楼层
呵呵,defrag,你的ID是win下面磁盘碎片整理工具吗?
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表