如何编译内核

来源:互联网 发布:天虹商场怎么样知乎 编辑:程序博客网 时间:2024/05/22 07:55
是否曾编译过Linux的内核,被认为是告别Linux入门阶段的标志。那么什么是内核,该如何编译Linux的内核呢?
一、 什么是Linux的内核
我们经常听到操作系统的内核这个词,但是什么是操作系统的内核呢?
内核这个词起源于UNIX,在UNIX的设计中首先使用了层次结构的设计,这种结构将操作系统的组成程序按照他们对于系统的重要性和对于具体设备的依赖性划分为几个层次,其中作为系统最为核心,独立于具体硬件设备和软件资源的部分就称之为内核。这是操作系统中最稳定,也是最基本的部分。在UNIX后设计的各种主流操作系统也都使用了这种先进的设计。
二、 为什么要编译内核
由于采用了分层结构,所以操作系统可以只通过更新外围程序来适应软硬件技术的变化,但有时有一些深入系统底层的变化(例如千年虫就是),此时就需要对内核进行升级。
而对于Linux这样的操作系统来说,它允许对内核进行定制,通过重配置与重编译可以从中去掉对于你的计算机来说没有用处的部分,而不需要像Windows那样一概保留(Windows98的最小安装大约有200MB,但是有经验的高手实际上可以将其减小到不足100MB运行,但那去掉的100多MB非必需的文件Windows并未提供删除它们的手段)。这些时候都需要更新内核,就要对内核重编译。
三、 如何编译内核
以下操作必须以root登录进行(如果不对内核进行升级,而只是进行重编译,则直接跳到第三步)
第一步:cd /usr/src/ 进入到目录/usr/src/
       rm -rf /usr/src/linux 删除老内核的代码。
       在任何一个子目录下(但通常是在/usr/src/下)解开新的内核源程序:
tar xvfz linux-x.x.xx.tar.gz (例如linux-2.0.35.tar.gz)
第二步: 在 /usr/src/ 下建立一个符号连接到你的新内核目录。
ln -s /usr/src/linux.2.x.xx /usr/src/linux
老版本的内核还要做一下操作以删除头文件:
cd /usr/include
       rm -rf asm linux scsi
       创建连接将你的系统指向包含有新内核代码的新的头文件
ln -s /usr/src/linux/include/asm-i386 asm
       ln -s /usr/src/linux/include/linux linux
       ln -s /usr/src/linux/include/scsi scsi
第三步:将当前目录变成 /usr/src/linux
cd /usr/src/linux
第四步:配置内核
如果你在 X window 下并且希望在图形界面下配置内核,你就打:
         make xconfig (注: 你需要安装Tk/Tcl包并且XServer的分辨率在800x600以上.)
如果你不在 X Window 下或不想使用图形界面,你就打:
make config 或 make menuconfig (推荐)
逐个回答完问题后稍等片刻,等提示符出现或图形界面消失,系统就配置好了。
第五步:创建新内核
       在目录 /usr/src/linux 下:
make dep 确保关键文件在正确的位置.
       make clean 确保所有东西均保持最新状态
make zImage 编译内核(当你的内核很大时,则用makebzImage进一步压缩内核)
还有make zlilo/make install等可选择。
       对于现在的主流机型,编译过程大约进行不到5分钟就可以完成。
第六步:如果你用了模块,你还需要生成和安装模块
make modules
make modules-install
depmod -a
第七步:察看你的 /etc/lilo.conf 看用的是哪个目录的哪个文件作为
image。例如:image = /boot/vmlinuz (slackware版是/vmlinuz)
     将 /usr/src/linux/System.map 复制到 /boot 目录中,
将 /usr/src/linux/arch/i386/boot/zImage 复制到 /boot 目录中并改名为 vmlinuz覆盖掉原来的内核。
       也可以这样做:
用一个新文件名将新内核拷贝到相应的目录下,如
cp /usr/src/linux/arch/i386/boot/zImage /boot/zImage2
然后用vi编辑/etc/lilo.conf文件,把原内核有关的那一段复制一份,如
image = /boot/vmlinuz
root = /dev/hda1
label = linux
复制后把image改成/boot/zImage2 把label改成newlinux.
这样新内核与旧内核可以共存,当新内核不能启动时,还有备份在那儿呢。
注意复制后放置的位置,如果没有设置default则谁是第一项谁就是缺省启动项。
第八步:安装新内核并重新起动。
lilo 安装lilo
shutdown -r now 重启
       也可以用cp Image/dev/fd0将新内核拷贝到启动软盘上以从软盘启动。
注意:要编译内核,必须在系统中安装了gcc和g++的C与C++编译器,否则不能进行编译。
编译内核是在Linux下重要的操作之一,很多软硬件的问题都可以通过重新配置内核来解决。而且编译Linux内核还是检验系统超频后的稳定性的重要手段之一,Linux对于系统稳定的要求比Windows要高得多,编译内核的过程中又有大量的运算要进行,所以能够通过Linux下的内核编译的机器稳定性就不会太差
0 0
原创粉丝点击