LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
12
返回列表 发新帖
楼主: liutanyu

如何用lilo引导新编译的内核?(急呀)

[复制链接]
发表于 2009-5-31 14:38:58 | 显示全部楼层
Post by liutanyu;1992354
我编译玩内核,安装后,修改了lilo.conf,添加了第二个image,其他的没有改动。如下

image=/boot/vmlinuz
        label=linuxO
        root=/dev/hda3
        read-only
image=/boot/linux2.6.29
        label=linuxN
        root=/dev/hda3
        read-only

保存后运行了lilo命令

可重启时两个选项都进不去了。到一半就停止了.键盘上的大写提示灯和一个叫Scroll LK的灯闪烁不停。

我用的是slackware12。2

启动显示的最后一行有 unable to mount root fs on unknowm-block(8,3)字样。

能知道是哪错了吗?

内核编译错了?为何原来的那个也不能用了呢?


你是不是替换了原来的image啊,这样子是有问题~~
是不是硬盘的一些支持,或者主板芯片支持没有编译进去啊!
回复 支持 反对

使用道具 举报

发表于 2009-5-31 16:30:05 | 显示全部楼层
咳咳,斗胆在这里放言几句,如有不对,请指出哈~;)

系统的启动第一步是 bootloader 把内核镜像装载到内存里然后运行,内核一开始会自动进行硬件检测和配置,然后要找到根分区,运行上面的启动脚本和一些应用程序,整个系统才能启动起来。而现在内核是可以模块化的,也就是并不编译到内核镜像里,而是放到硬盘上按需调入。这就会遇到几个问题:在找到硬盘和根分区之前,内核并不能访问到那些模块和启动程序,也就无从加载和启动。尤其是,那些文件是写在分区上,“隐藏”在文件系统结构之后的(ext3,ext4...)内核必须要“理解”那些文件系统结构才能读取那些文件。

一个解决方案是把设备驱动和文件系统驱动统统编译进内核里面(这大概就是 huge),不过会造成内核的庞大臃肿;另一个方法就是用 initrd,在 initrd 里放上设备驱动和文件系统驱动模块,启动时由 bootloader 加载到内存,然后当作"根分区"挂载给内核,内核需要什么模块先往那里找,等一切就绪了再把硬盘分区挂上。这样做的好处是内核镜像可以小,不过需要做 initrd。

如果是自己编译内核的话,自己知道自己的机器是什么设备,什么分区,直接编译到内核里面就好了,就不用 initrd 了~ 如果不知道,那还是用官版的吧…… ;)
回复 支持 反对

使用道具 举报

发表于 2009-5-31 16:37:02 | 显示全部楼层
我以前编译过内核,
曾经写过一篇帖子,关于slackware内核编译的。比较详细。
感兴趣的话,找出来看看。

内核编译不难的
回复 支持 反对

使用道具 举报

发表于 2009-5-31 16:40:19 | 显示全部楼层
grissiom 大哥总是很谦虚。
我觉得应该就是这样吧。
回复 支持 反对

使用道具 举报

发表于 2009-6-1 04:53:14 | 显示全部楼层
Post by wangjunhuashuo;1992587
不要是也,非也!先听一课,问个问题:经常见这个initrd,但它是什么东西呢,有什么用?
请看看这里:

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

使用道具 举报

发表于 2009-6-1 05:06:08 | 显示全部楼层
Post by grissiom;1992657
咳咳,斗胆在这里放言几句,如有不对,请指出哈~;)

系统的启动第一步是 bootloader 把内核镜像装载到内存里然后运行,内核一开始会自动进行硬件检测和配置,然后要找到根分区,运行上面的启动脚本和一些应用程序,整个系统才能启动起来。而现在内核是可以模块化的,也就是并不编译到内核镜像里,而是放到硬盘上按需调入。这就会遇到几个问题:在找到硬盘和根分区之前,内核并不能访问到那些模块和启动程序,也就无从加载和启动。尤其是,那些文件是写在分区上,“隐藏”在文件系统结构之后的(ext3,ext4...)内核必须要“理解”那些文件系统结构才能读取那些文件。

一个解决方案是把设备驱动和文件系统驱动统统编译进内核里面(这大概就是 huge),不过会造成内核的庞大臃肿;另一个方法就是用 initrd,在 initrd 里放上设备驱动和文件系统驱动模块,启动时由 bootloader 加载到内存,然后当作"根分区"挂载给内核,内核需要什么模块先往那里找,等一切就绪了再把硬盘分区挂上。这样做的好处是内核镜像可以小,不过需要做 initrd。

如果是自己编译内核的话,自己知道自己的机器是什么设备,什么分区,直接编译到内核里面就好了,就不用 initrd 了~ 如果不知道,那还是用官版的吧…… ;)


50/50,想去掉 initrd,也并不一定要将驱动统统编译进内核里面而令它臃肿,只要将在启动时必要的编入就行,其他非必要的依然可以是模块

所谓必要的,就是要令系统启动时能确保系统能够挂载根分区的,所以文件系统支援一定少不了,不能用模块。另外相关的硬件支援如 IDE/SATA 或 SCSI 之类亦如是,如果是移动设备,USB 支援当然也少不了。
回复 支持 反对

使用道具 举报

发表于 2009-6-17 16:06:03 | 显示全部楼层
我也是刚刚完成内核编译,没办法。因为必须要打个补丁的……
你可以完全参考这个:
http://wiki.archlinux.org/index. ... 3%E4%B8%AD%E6%96%87)
你就这个做就好了
记得要注意看那个“注意”
回复 支持 反对

使用道具 举报

发表于 2009-6-24 17:26:11 | 显示全部楼层
我也是打了youbest的中文补丁,但是我把ext3那个选项设为*(我的分区格式就是ext3),没有mkinitrd,一样可以启动。
回复 支持 反对

使用道具 举报

发表于 2009-6-25 15:26:18 | 显示全部楼层
我觉得你的内核里的文件系统的配置有问题。
很大程度上可能你新内核不支持你现有的文件系统类型
我前几天也自己编译内核了,因为要打补丁。呵呵~~
你可以参考下这个
这是我经过测试的:
http://student.csdn.net/space.ph ... do=blog&id=5160
呵呵~~希望对你有帮助!
回复 支持 反对

使用道具 举报

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

本版积分规则

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