导读:
详细讲解:编译Linux操作系统内核的步骤
很多朋友一听到说编译内核,就觉得很高深莫测,非常头大。其实,通常其它操作系统的内核编译是比较繁琐的。然而,由于Debian强大的dpkg软件包管理系统,使得内核的升级、编译也变得容易很多。如果下面的步骤都注意并执行了,编译内核不是很复杂的事情,我在基于debian的ubuntu系统上第一次编译就成功了。编译过程如下,与各位分享: 修改ubuntu 6.10上的/bin/sh 在ubuntu6.10上,/bin/sh默认是链接到/bin/dash的,当你从源代码编译软件的时候,dash可能会导致一些错误,至少我遇到过 类似问题,因此,我把/bin/sh的连接改为了/bin/bash。(估计中国绝大部分使用者都是用的bash吧) 如果你使用的就是6.10,那么应该这样做: $ rm -f /bin/sh $ ln -s /bin/bash /bin/sh 安装相关的软件,包括 a、Ubuntu Dapper Drake 6.06 LTS 首选“软件”,自己想办法安装吧 b、build-essential,里面有gcc,make等东西要用到。 c. kernel-package,里面有make-kpkg要用。 d. qt库,主要是为了用make xconfig图形界面配置,你要安装libqt3-headers,libqt3-mt-dev等 e. libncurses5-dev,主要是用make menuconfig,我就用这个。 f. gtk库,用于make gconfig。安装gtk2.0,相关lib。 下载源码 到www.kernel.org下载当前最新版的源代码。下载的分类有p,f等区别,要下f类型的连接,不要下补丁。下好的源代码应该有40多M。然后解压缩源代码。 # tar xjvf linux-2.6.20.tar.bz2 -C /usr/src/linux-2.6.20 # cd /usr/src/linux-2.6.20 补丁 如果需要给内核源代码打补丁,首先下载相对应的补丁,在这里我们以patch.bz2代替。将其放到/usr/src目录下,然后用下来的命令来使其生效: # bzip2 -dc /usr/src/patch.bz2 | patch -p1 –dry-run # bzip2 -dc /usr/src/patch.bz2 | patch -p1 注意!此时,你应该一直处于/usr/src/linux-2.6.20目录下。 第一个命令仅仅是试验性质的,它并不会对你的源代码产生什么变动。如果没有产生什么错误信息,你才能用第二个命令来对源代码产生真正的修补动作,如果第一条指令就出错了,请别继续执行下去,看看错误出在哪里。 同样,你也可以向你的内核提供预补丁,例如,一旦你发现有一个自己需要的特性在2.6.19 rc4中提供,但这个版本的内核并没有发行所有的完整源代码,只有patch-2.6.19-rc4.bz2是可选的。于是,你就可以提供这个patch 到2.6.18的内核中,但不是2.6.8.1,或者2.6.8.2。 创建链接 创建一个指向新内核代码的符号 sudo ln -s /usr/src/linux-2.6.16ck12 linux 然后进入这个目录: cd /usr/src/linux 清理 运行命令make mrproper 来清一下包。 配置 可以用现有的配置文件作为新内核配置文件的基础,先复制已经存在的配置文件到/usr/src/linux目录中 cp /boot/config-`uname -r` ./.config 然后运行 sudo make menuconfig 或者 sudo make xconfig 如果希望自己配置,那么就在这里面详细选。对选项如何选择不熟悉的,请参考这篇文章。看不懂中文?参考这里。 下面补充一些内容,只说几个这篇文章中没有提到的。 Bus options (PCI, PCMCIA, EISA, MCA, ISA) PCI support PCI Express support 老式机器没有PCI-E设备的可以选N ISA support 较新的新机器没有ISA设备,可以选N MCA support 一般选N NatSemi SCx200 support 一般选N PCI Hotplug Support Support for PCI Hotplug (EXPERIMENTAL) 如果没有PCI热插拔设备,选N 这里的选项都要全部编译进内核,而不是以模块形式存在。 Device Drivers Block devices Packet writing on CD/DVD media Enable write caching (EXPERIMENTAL) 如果你有刻录机,想启用写缓存功能,选Y ATA/ATAPI/MFM/RLL support Include IDE/ATA-2 DISK support 如果你的/boot是放在IDE硬盘上,那么这里一定要选Y,选M都不行。否则启动时会出现“waiting for root file system”的提示而停滞不前。 SCSI device support 如果有SATA硬盘,就选Y SCSI disk support 如果你的/boot放在SATA硬盘上,一定要选Y。 Character devices I2C support 一般可以选Y或者M Graphics support 不建议把显卡驱动编译进内核。,选M,编译成模块方便日后升级驱动。 File systems CD-ROM/DVD Filesystems ISO 9660 CDROM file system support 一般选Y DOS/FAT/NT Filesystems VFAT (Windows-95) fs support 有FAT32分区就选Y吧 NTFS file system support 有NTFS分区就选Y吧 NTFS write support 如果想对 NTFS分区进行写操作,选Y Native Language Support Simplified Chinese charset (CP936, GB2312) 选Y或者M使读取FAT分区不会遇到中文乱码现象 必须将启动盘的文件系统编译进内核,默认是编译成模块,这样无法启动系统。最好是把硬盘上所有用到的分区文件系统全部编译进内核。 然后再谈几个常见的问题解决方法: 1、编译内核失败,不能进入系统,提示如下: audit(1129243020.326:0):initialized kernel panic – not syncing: VFS:Unable to mount root fs on unknown-block(0,0) 或是: VFS:Cannot open root device “hdxy” or unknow-block(0,0) Please append a correct “root=” boot option kernel panic-not syncing: VFS:Unable to mount root fs on unknow-block(0,0) 解决方法:把 08.05.11、<*> RAM disk support 09.27.07、<*> Compressed ROM file system support (cramfs) 这两项都要选上!!!!!!否则,呵呵! 2、不能挂载ISO文件。 解决方法:把 08.05.06、<*> Loopback device support 08.05.07、<*> Cryptoloop Support 这两项都要选上便可! 3、用SATA硬盘,原来内核中硬盘的设备号是/dev/sda,编译新内核后的硬盘设备号由/dev/sda变成/dev/hde,硬盘声音很吵。 解决方法:把 08.07、SCSI device support —> 08.07.01、<*> SCSI device support # 08.07.02、 legacy /proc/scsi/ support 08.07.03、<*> SCSI disk support 这些选项都选上便可! 4、用上新版本内核后,无法安装显示卡的NVIDIA-Linux-x86-1.0-7676-pkg1.run驱动,系统提示如下: 很多朋友一听
详细讲解:编译Linux操作系统内核的步骤
很多朋友一听到说编译内核,就觉得很高深莫测,非常头大。其实,通常其它操作系统的内核编译是比较繁琐的。然而,由于Debian强大的dpkg软件包管理系统,使得内核的升级、编译也变得容易很多。如果下面的步骤都注意并执行了,编译内核不是很复杂的事情,我在基于debian的ubuntu系统上第一次编译就成功了。编译过程如下,与各位分享: 修改ubuntu 6.10上的/bin/sh 在ubuntu6.10上,/bin/sh默认是链接到/bin/dash的,当你从源代码编译软件的时候,dash可能会导致一些错误,至少我遇到过 类似问题,因此,我把/bin/sh的连接改为了/bin/bash。(估计中国绝大部分使用者都是用的bash吧) 如果你使用的就是6.10,那么应该这样做: $ rm -f /bin/sh $ ln -s /bin/bash /bin/sh 安装相关的软件,包括 a、Ubuntu Dapper Drake 6.06 LTS 首选“软件”,自己想办法安装吧 b、build-essential,里面有gcc,make等东西要用到。 c. kernel-package,里面有make-kpkg要用。 d. qt库,主要是为了用make xconfig图形界面配置,你要安装libqt3-headers,libqt3-mt-dev等 e. libncurses5-dev,主要是用make menuconfig,我就用这个。 f. gtk库,用于make gconfig。安装gtk2.0,相关lib。 下载源码 到www.kernel.org下载当前最新版的源代码。下载的分类有p,f等区别,要下f类型的连接,不要下补丁。下好的源代码应该有40多M。然后解压缩源代码。 # tar xjvf linux-2.6.20.tar.bz2 -C /usr/src/linux-2.6.20 # cd /usr/src/linux-2.6.20 补丁 如果需要给内核源代码打补丁,首先下载相对应的补丁,在这里我们以patch.bz2代替。将其放到/usr/src目录下,然后用下来的命令来使其生效: # bzip2 -dc /usr/src/patch.bz2 | patch -p1 –dry-run # bzip2 -dc /usr/src/patch.bz2 | patch -p1 注意!此时,你应该一直处于/usr/src/linux-2.6.20目录下。 第一个命令仅仅是试验性质的,它并不会对你的源代码产生什么变动。如果没有产生什么错误信息,你才能用第二个命令来对源代码产生真正的修补动作,如果第一条指令就出错了,请别继续执行下去,看看错误出在哪里。 同样,你也可以向你的内核提供预补丁,例如,一旦你发现有一个自己需要的特性在2.6.19 rc4中提供,但这个版本的内核并没有发行所有的完整源代码,只有patch-2.6.19-rc4.bz2是可选的。于是,你就可以提供这个patch 到2.6.18的内核中,但不是2.6.8.1,或者2.6.8.2。 创建链接 创建一个指向新内核代码的符号 sudo ln -s /usr/src/linux-2.6.16ck12 linux 然后进入这个目录: cd /usr/src/linux 清理 运行命令make mrproper 来清一下包。 配置 可以用现有的配置文件作为新内核配置文件的基础,先复制已经存在的配置文件到/usr/src/linux目录中 cp /boot/config-`uname -r` ./.config 然后运行 sudo make menuconfig 或者 sudo make xconfig 如果希望自己配置,那么就在这里面详细选。对选项如何选择不熟悉的,请参考这篇文章。看不懂中文?参考这里。 下面补充一些内容,只说几个这篇文章中没有提到的。 Bus options (PCI, PCMCIA, EISA, MCA, ISA) PCI support PCI Express support 老式机器没有PCI-E设备的可以选N ISA support 较新的新机器没有ISA设备,可以选N MCA support 一般选N NatSemi SCx200 support 一般选N PCI Hotplug Support Support for PCI Hotplug (EXPERIMENTAL) 如果没有PCI热插拔设备,选N 这里的选项都要全部编译进内核,而不是以模块形式存在。 Device Drivers Block devices Packet writing on CD/DVD media Enable write caching (EXPERIMENTAL) 如果你有刻录机,想启用写缓存功能,选Y ATA/ATAPI/MFM/RLL support Include IDE/ATA-2 DISK support 如果你的/boot是放在IDE硬盘上,那么这里一定要选Y,选M都不行。否则启动时会出现“waiting for root file system”的提示而停滞不前。 SCSI device support 如果有SATA硬盘,就选Y SCSI disk support 如果你的/boot放在SATA硬盘上,一定要选Y。 Character devices I2C support 一般可以选Y或者M Graphics support 不建议把显卡驱动编译进内核。,选M,编译成模块方便日后升级驱动。 File systems CD-ROM/DVD Filesystems ISO 9660 CDROM file system support 一般选Y DOS/FAT/NT Filesystems VFAT (Windows-95) fs support 有FAT32分区就选Y吧 NTFS file system support 有NTFS分区就选Y吧 NTFS write support 如果想对 NTFS分区进行写操作,选Y Native Language Support Simplified Chinese charset (CP936, GB2312) 选Y或者M使读取FAT分区不会遇到中文乱码现象 必须将启动盘的文件系统编译进内核,默认是编译成模块,这样无法启动系统。最好是把硬盘上所有用到的分区文件系统全部编译进内核。 然后再谈几个常见的问题解决方法: 1、编译内核失败,不能进入系统,提示如下: audit(1129243020.326:0):initialized kernel panic – not syncing: VFS:Unable to mount root fs on unknown-block(0,0) 或是: VFS:Cannot open root device “hdxy” or unknow-block(0,0) Please append a correct “root=” boot option kernel panic-not syncing: VFS:Unable to mount root fs on unknow-block(0,0) 解决方法:把 08.05.11、<*> RAM disk support 09.27.07、<*> Compressed ROM file system support (cramfs) 这两项都要选上!!!!!!否则,呵呵! 2、不能挂载ISO文件。 解决方法:把 08.05.06、<*> Loopback device support 08.05.07、<*> Cryptoloop Support 这两项都要选上便可! 3、用SATA硬盘,原来内核中硬盘的设备号是/dev/sda,编译新内核后的硬盘设备号由/dev/sda变成/dev/hde,硬盘声音很吵。 解决方法:把 08.07、SCSI device support —> 08.07.01、<*> SCSI device support # 08.07.02、 legacy /proc/scsi/ support 08.07.03、<*> SCSI disk support 这些选项都选上便可! 4、用上新版本内核后,无法安装显示卡的NVIDIA-Linux-x86-1.0-7676-pkg1.run驱动,系统提示如下: 很多朋友一听