在Debian4.3下编译linux内核小结

本文介绍了两种编译Linux内核的方法:传统方法和新方法。文章详细列出了所需的软件包,并提供了具体的编译步骤,包括如何解决编译过程中可能遇到的问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

从我自己所找到的资料来看,编译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 ... 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) *** |-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) *** |-SCSI disk support Serial ATA (prod) and Parallel ATA (experimental) drivers [*] |-ATA ACPI Support [*] |-SATA Port Multiplier support |-AHCI SATA support [M] |-ATA SFF support
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值