学习啦 > 学习电脑 > 操作系统 > Linux教程 > linux重新编译方法

linux重新编译方法

时间: 若木635 分享

linux重新编译方法

  linux重新编译方法

  配制内核config

  首先,清理以前编译时留下的临时文件。如果是刚刚解开的包,不需要执行这步。如果是第二次或者是第n次编译,那么一定要执行。

  相关命令如下:

  $ sudo make mrproper

  网上很多教程上说把现在使用的内核的config拷贝过来参考,据实验,是不需要的,ubuntu还有debian会自动做这步。不过这条命令倒是可以学习一下。当然你可以将以前的配置拷贝过来。

  命令:

  cp /boot/config-`uname -r` ./.config

  ./.config的意思是拷贝到当前目录并以.config重命名。

  注意:在配制内核时,修改的文件为linux-2.6.25.10文件夹中的.config文件。这是个隐藏文件,更改查看方式可以看到。是make mrproper时自动拷贝过来的,下载的源包中没有。

  相关命令

  #make config:基于文本的最为传统的配置界面,不推荐使用

  #make menuconfig:基于文本选单的配置界面,字符终端下推荐使用

  #make xconfig:基于图形窗口模式的配置界面,Xwindow下推荐使用

  #make oldconfig:如果只想在原来内核配置的基础上修改一些小地方,会省去不少麻烦

  #make defconfig :按默认选项对内核进行配置(386的默认配置是Linus做的)

  #make allnoconfig : 除必须的选项外, 其它选项一律不选. (常用于嵌入式系统)

  配置2.6.0内核时如果你的主板是Intel芯片的话,你用默认配制也许就可以得到一个满意的内核哦。做法是make menuconfig后离开时选择保存。

  这里的难点是pci,如果你硬盘是IDE的那一定要选择好你主板上南桥芯片。SCSI的话就是要选择上你的SCSI卡型号。

  还有就是网卡,声卡芯片的型号了,他们的型号你都可以用lspci 查找到比如我的是。

  # lspci

  00:00.0 Host bridge: Intel Corp. 440BX/ZX/DX - 82443BX/ZX/DX Host bridge (rev 01)

  00:01.0 PCI bridge: Intel Corp. 440BX/ZX/DX - 82443BX/ZX/DX AGP bridge (rev 01)

  00:07.0 ISA bridge: Intel Corp. 82371AB/EB/MB PIIX4 ISA (rev 08)

  00:07.1 IDE interface: Intel Corp. 82371AB/EB/MB PIIX4 IDE (rev 01)

  00:07.2 USB Controller: Intel Corp. 82371AB/EB/MB PIIX4 USB

  00:07.3 Bridge: Intel Corp. 82371AB/EB/MB PIIX4 ACPI (rev 08)

  00:0f.0 VGA compatible controller: VMware Inc [VMware SVGA II] PCI Display Adapter

  00:10.0 SCSI storage controller: LSI Logic / Symbios Logic 53c1030 PCI-X Fusion-MPT Dual Ultra320 SCSI (rev 01)

  00:11.0 Ethernet controller: Advanced Micro Devices [AMD] 79c970 [PCnet32 LANCE] (rev 10)

  00:12.0 Multimedia audio controller: Ensoniq ES1371 [AudioPCI-97] (rev 02)

  编译配置

  1)文件系统

  请务必要选中ext3文件系统,

  File systems--->

  [*] Ext3 journalling file system support

  [*] Ext3 Security Labels

  [*] JBD (ext3) debugging support

  以上三项一定要选上,而且要内建(即标*). 这个非常重要,在配置完后一定要检查一下.config文件有没有"CONFIG_EXT3_FS=y"这一项.

  如果不是"CONFIG_EXT3_FS=y"而是"CONFIG_EXT3_FS=m",你在运行内核时就会遇上以下错误: pivotroot: pivot_root(/sysroot,/sysroot/initrd) failed

  2)网卡驱动

  务必把自己网卡对应的驱动编译进内核,比较普遍的网卡是realtek 8139,以下就是这种网卡的配置,以供参考

  Device Drivers--->

  Networking support--->

  Ethernet (10 or 100Mbit) --->

  <*> RealTek RTL-8139 C+ PCI Fast Ethernet Adapter support (EXPERIMENTAL)

  <*> RealTek RTL-8139 PCI Fast Ethernet Adapter support

  3)声卡驱动

  也要选择自己声卡对应的驱动编译进内核,比较普遍的声卡是i810_audio,以下就是这种声卡的配置,以供参考

  Device Drivers --->

  Sound --->

  <*> Sound card support

  Advanced Linux Sound Architecture --->

  <*> Advanced Linux Sound Architecture

  <*> Sequencer support

  < > Sequencer dummy client

  <*> OSS Mixer API

  <*> OSS PCM (digital audio) API[*] OSS Sequencer API

  <*> RTC Timer support

  PCI devices --->

  <*> Intel i8x0/MX440, SiS 7012; Ali 5455; NForce Audio; AMD768/8111

  Open Sound System --->

  < > Open Sound System (DEPRECATED)

  以上三项配置关系到新内核能否正常运行,请备加注意.其他的配置如果不是很了解,大可以按默认的选择.

  生成镜像

  #make dep

  (确保关键文件在正确的位置) 2.5.*-2.6.0都不需要了。其实2.4.*某些内核也不需要了。

  #make clean

  (确保所有有关文件都处于最新版本状态)

  #make zImage

  (编译压缩形式的内核)

  在需要内核支持较多的外设和功能时,内核可能变得很大,此时可以编译大内核:

  #make bzImage

  编译的时间与机器的硬件条件及内核的配置等因素有关,所获得的内核的位置在/usr/src/linux/arch/i386/boot目录下,当然这里假设用户的CPU是x86型的。

  生成可加载模块

  #make modules

  编译选择的模块

  #make module_install

  将编译后的模块转移到系统标准位置

  模块在系统中的标准目录位于/lib/modules/x.y.z,后面的x.y.z是版本号,为安全起见,在运行#make modules_install之前最好对/lib/modules进行备份。模块通常是带有扩展名.o的文件,使用命令#lsmod可以对当前内核的模块进行列表。

  #make INSTALL_MOD_PATH=[dir] modules_install

  将编译后的模块转移到指定位置

  安装内核到linux

  # make install

  上面的命令"make install"将:

  (1)把压缩内核映象拷贝到/boot目录下, 并创建相应的System.map符号链接;

  (2)修改bootloader的配置文件;

  (3)调用mkinitrd程序创建内核的initrd映象.

  (4)对于GRUB而言, 将在/boot/grub/grub.conf配置文件增加如下类似的配置行:

  title Red Hat Linux (2.***)

  root(hd0, 1)

  kernel /boot/vmlinuz-2.*** ro root=LABEL=/

  initrd /boot/initrd-2.***.img

75334