LinuxSir.cn,穿越时空的Linuxsir!

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

还是关于编译内核的问题

[复制链接]
发表于 2009-2-26 21:14:20 | 显示全部楼层
直接去掉initrd算了,把所有的驱动都编译到vmlinuz里好了,省下麻烦了
回复 支持 反对

使用道具 举报

发表于 2009-2-26 21:17:57 | 显示全部楼层
也不一定要把所有驱动都编进内核,只需把必要的如文件系统及起动时必需辩认的硬件编入就行了
回复 支持 反对

使用道具 举报

 楼主| 发表于 2009-3-1 02:22:27 | 显示全部楼层
Post by d00m3d;1953171
共用 /boot 当然也可以随意指定想起动的系统,俺经常这样做

http://www.linuxsir.cn/bbs/thread335331.html
http://www.linuxsir.cn/bbs/thread343284.html

.config 里并非所有的都需要由 m 改为 y 来去掉 initrd,以前不是叫你看 Debian 版置顶帖里的解说麽?

当时看了不是很明白,呵呵,不过现在常常编译内核,慢慢的,有了感觉出来,也明白了很多东西。。
版主记忆力好好呀,哈哈~~~
.config 里所有 m 改为 y 来去掉 initrd也只是试一下的而已,呵呵,结果也行,不知道是不是走运还是不走运。
回复 支持 反对

使用道具 举报

发表于 2009-3-1 10:26:06 | 显示全部楼层
不知道这些能不能解答老刀的 问题。


==================================================================

在Debian4.3下编译linux-2.6.28内核小结 (2009-02-21 18:52:36)

标签:linux 内核编译 bad gzip magic numbers unpacking initramfs 杂谈          分类:技术天地
从我自己所找到的资料来看,编译linux内核有两种方法。

我先说说新方法,这种方法很简单。反正我是一次成功。当然,这些操作都需要以root用户进行。我首先用光盘安装了Debian-etch4.3的最小系统。在这样的系统下,还需要安装一些工具包后方可进行内核编译。

为完成内核编译,Debian4.3还需要安装的包如下:

# apt-get install gcc
# apt-get install make
# apt-get install libc6-dev
# apt-get install bzip
# apt-get install ncurse-dev
# apt-get install initrd-tools    ##如果要使用mkinitrd命令,就必须安装这个包

有了以上包的,应该可以用传统方法编译内核。

如果想用新方法编译内核,那么还需要下面的包:
# apt-get install kernel-package
# apt-get install apt-get install fakeroot

安装了kernel-package包后,我建议,当编译过程中遇到什么问题的时候,就打开这个文件看看:/usr/share/kernel-package/docs/README

做好了上述的准备工作,我们开始按下面的步骤编译、安装内核

将内核的源文件复制到相关的目录下,然后解压缩。我是将源代码复制到了/usr/src目录下
# tar xvf linux-2.6.28.tar.bz2
# cd /usr/src/linux-2.6.28


作一些清理工作。当然,如果解压缩后第一次编译,可以不做这些
# make clean
# make mrproper


把当前内核的配置作为模板
# cp /boot/config-2.6.18-6-k7 .config


先不要对内核配置文件做任何改动,直接开始编译。如果按config-2.6.18-6-k7的配置编译新内核后能正常启动,再进行内核配置。因为我是在字符界面的菜单模式下进行相关操作的,所以使用下面的命令:

# make menuconfig

出现内核配置的界面后,就可以根据自己的电脑的硬件情况进行相应的选择。

开始编译
# make-dpkg clean
# fakeroot make-kpkg --initrd linux_image

上面的这两条命令正确执行完后,我们会在/usr/src目录下看到这样的一个debian包:
linux-image-2.6.28_2.6.28-10.00.Custom_i386.deb

安装这个包,就能完成新内核的安装。
# dpkg -i linux-image-2.6.28_2.6.28-10.00.Custom_i386.deb

上面的命令自动完成menu.lst文件的修改,在其中加入了如下的内容:

title           Debian GNU/Linux, kernel 2.6.28
root            (hd0,4)
kernel          /boot/vmlinuz-2.6.28 root=/dev/hda5 ro
initrd          /boot/initrd.img-2.6.28
savedefault

title           Debian GNU/Linux, kernel 2.6.28 (single-user mode)
root            (hd0,4)
kernel          /boot/vmlinuz-2.6.28 root=/dev/hda5 ro single
initrd          /boot/initrd.img-2.6.28
savedefault

重新启动电脑,可以看到GRUB的启动界面已经被修改。选择运行kernel 2.6.28的菜单,看看LINUX能否正常启动。


我们再看看传统的方法。我在用这一方法编译内核时,遇到了一些麻烦。实际上,我在debian3.1环境下编译过内核2.4.X,虽然也有一些周折,但最终还是成功的。我还是直接说编译过程中的所需要运行的命令吧。我将linux-2.6.28.tar.bz2复制到了/usr/src目录下。

# tar xvf linux-2.6.28.tar.bz2
# cd /usr/src/linux-2.6.28

# make clean
# make mrproper

# make
# make modules_install

# cp -v /arch/i386/boot/bzImage /boot/vmlinuz-2.6.28
# cd ../../..
# cp System.map /boot/System.map-2.6.28
# mkinitramfs -o /boot/initrd.img-2.6.28 2.6.28
# cp .config /boot/config-2.6.28

当然,还要修改/boot/grub/menu.lst,加入如下的内容:

title           Debian GNU/Linux, kernel 2.6.28
root            (hd0,4)
kernel          /boot/vmlinuz-2.6.28 root=/dev/hda5 ro
initrd          /boot/initrd.img-2.6.28
savedefault

做完这些工作,重新启动电脑,看看是否可以正常进入LINUX系统。


我在编译过程中遇到的几个问题:

1、用传统方法编译内核,启动后显示'Unpacking initramfs ... <o> Kernel panic - not syncing:bad gzip magic numbers' 错误,启动进程就不能进行下去。

经过多次实验,我认为是使用mkinitrd命令制作initrd.img文件带来的问题。我用mkinitramfs命令制作initrd.img文件,就可以使启动正常。操作格式如下:

# mkinitramfs -o /boot/initrd.img-2.6.28 2.6.28

在上述的命令中,-o /boot/initrd.img-2.6.28指明了生成initrd.img-2.6.28文件的输出路径,
其后的空格后的2.6.28指明要将路径/lib/modules/2.6.28下的驱动模块加入initrd.img-2.6.28文件中。如果没有这一参数,加入initrd.img-2.6.28文件中的则是当前版本的驱动模块。例如,如果当前正在运行的linux操作系统的内核版本是 2.6.18,那么,/lib/modules下就会有2.6.18子目录,下面的命令虽然是想生成2.6.28版本的initrd.img文件,但实际上是将/lib/modules/2.6.18下的驱动模块加入:
# mkinitramfs -o /boot/initrd.img-2.6.28

就我目前的理解,我认为用传统方法生成initrd.img文件产生错误的原因在于,现在网上流传的编译内核的方法是基于非常低的内核版本,在这些版本中,启动压缩文件为initrd格式,所以那些资料都教大家用mkinit生成initrd.img。而在较高版本的内核的编译选项中,用 initramfs代替了原先的initrd,用mkinitrd命令生成initrd.img文件自然就会产生格式错误,所以必须用 mkinitramfs命令代替mkinitrd命令生成initrd.img。initramfs的选项在内核编译选项菜单下的位置(linux- 2.6.28)是:

General Setup
|---[M] Initial RAM filesytem and RAM disk (initramfs/initrd) support


2、让内核识别USB设备
要使编译选项中的下列选项被选中:
     Device Drivers
     |-SCSI device support
{M}   |-SCSI device support
     *** SCSI support type (disk, tape, CD-ROM) ***
<M>   |-SCSI disk support
  • |-USB support
    <*>   |-Support for Host-side USB
         *** Miscellaneous USB options ***  
  •      |-USB device filesystem
  •      |-USB device class-devices (DEPRECATED)
         *** USB Host Controller Drivers ***
  •      |-EHCI HCD (USB 2.0) support
  •      |-OHCI HCD support
  •      |-UHCI HCD support
         *** NOTE: USB_STORAGE depends on SCSI but BLK_DEV_SD may al
         *** see USB_STORAGE Help for more information ***
  •      |-USB Mass Storage support

    3、让内核识别SATA硬盘
    在菜单模式下配置内核选项进,选中下面的内容:
         Device Drivers
         |-SCSI device support
    {M}  |-SCSI device support
         *** SCSI support type (disk, tape, CD-ROM) ***
    <M>  |-SCSI disk support

    <M>  Serial ATA (prod) and Parallel ATA (experimental) drivers
  •   |-ATA ACPI Support
  •   |-SATA Port Multiplier support
    <M>  |-AHCI SATA support
    [M]  |-ATA SFF support

    =================================================================================
    俺也是新手,其实对LINUX的理解非常浅薄,在这篇博文中讲了一点儿自己在编译内核时的体会,有错误的地方,请前辈们多指教。
  • 回复 支持 反对

    使用道具 举报

    发表于 2009-3-1 11:43:23 | 显示全部楼层
    这个 Debian 置顶都有了,老李的问题是何以 LFS 下没有 initrd 而 Debian 却非用不可,於是我告诉他 Debian 为何要用及如何可以不用
    回复 支持 反对

    使用道具 举报

     楼主| 发表于 2009-3-1 12:09:59 | 显示全部楼层
    首先非谢感谢各位的热心帮助。
    其实大体上也算了明白了。
    很多东西也是知其然,不知其所以然。
    可能也是本身自己的知识面不广,基础不稳。
    很多东西,就算资料写得清清楚楚,但看了也是好像明白了,但又好像一点都不知所云,哈哈。
    我用LINUX最重要的原因是为她的“神秘”所吸引,有点进入了一个异次元空间的感觉。
    还有一个原因就是一个很好的高中同学在M$上班,天天被他说不能用D版,就顺他的意,格掉。
    其实我的专业跟工作跟计算机这个东西搭不上一点关系,有时我还想,如果所有人都像我,都用LINUX,那中国软件无论开源不开源的秩序都马上好起来,哈哈:)
    但毕竟不是这个专业的,理解起很多东西,不是马上就可以成功,只能反复把玩,
    菩提本无根,
    明镜亦非苔,
    本来无一物,
    何处若尘埃
    科学本身就是要脚踏实地,反复实践才能出真知,只是个人时有浪漫主义之情结,所以问出这样的后现代主义印象派问题,有时搞得自己都不知道自己在问些什么,致使各位热心的朋友也无从回答。
    罪过罪过也。
    回复 支持 反对

    使用道具 举报

    发表于 2009-3-1 12:18:05 | 显示全部楼层
    Post by 老李飞刀;1954468

    菩提本无根,
    明镜亦非苔,
    本来无一物,
    何处若尘埃
    菩提本无[color="Red"]树,明镜亦非[color="Red"]台,本来无一物,何处惹尘埃 。

    PS:小弟曾在佛教小学就读。。。
    回复 支持 反对

    使用道具 举报

     楼主| 发表于 2009-3-1 12:22:31 | 显示全部楼层
    Post by d00m3d;1954475
    菩提本无[color="Red"]树,明镜亦非[color="Red"]台,本来无一物,何处惹尘埃 。

    PS:小弟曾在佛教小学就读。。。


    更是罪过也,当时大学毕业还想去应聘当住持呢,连六祖的名句都说错了。
    哎,他朝我若为青帝,报以桃花一处开!
    回复 支持 反对

    使用道具 举报

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

    本版积分规则

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