linux系统内核编译

来源:互联网 发布:手机乐器模拟软件 编辑:程序博客网 时间:2024/06/12 21:35

   在学习linux的驱动编程的时候,看到《linux设备驱动程序》书中说要编译一个自己的内核,所以我就想着在VM虚拟机上装了red hat enterprise 5,并在上面来编译一个自己的内核。在编译的过程中有很多时候都是一知半解的,走了很多弯路,但是只要你能实实在在的一步步去尝试,就能学到很多东西,并且比单单看别人的指导方法更管用,至少自己会记得更清楚吧。下面是我编译的步骤:

   一.下载linux内核,在linux源码官网上下载:

下载地址:http://www.kernel.org/,

值得注意的是,初次来到这个网站的朋友们可能会找不到自己想要的对应版本的linux内核,其实很简单只要点击HTTP或者FTP后面的location就可以了,然后依次点击linux,然后点击kernel就能看到所有版本的内核都罗列在里面,然后可以很轻松的找到自己需要的版本,每个版本都要.tar.gz或者.tar.bz2格式的,随便哪一个都可以。

   二. 把下载的内核copy到/usr/src目录下面,解压,这里要注意的是.tar.gz格式的就用tar -zxvf xx-xxx命令,是.tar.bz2格式的就用tar -jxvf xx-xxx命令,然后耐心等待一分钟左右,得到一个linux源码目录。

  三.  配置内核选项。有点繁琐,~~希望一次成功哦~~。

# cd linux-2.6.18 (进入到/usr/src/linux-2.6.18目录下)

# make mrproper (该命令可确保源代码目录下没有不正确的.o文件)

# make menuconfig (配置内核各选项)


此时会出现一个图形界面,列出了所有的内核配置选项,有的选项下还有子选项,你可以用方向键来选择,用Y键来确定。经过我多次试验,大多数选项默认就行,以下几个选项必须选择(请认真核对下面每一个选项,否则编译很有可能前功尽弃):


(1)Loadable Module support选项中,一定要选上“Module unloading”和“Automatic kernel module loading”这两项;

(2)Device Drivers--->Block Devices中一定要选上Loopback device support;

Device Drivers--->Multi-device support(RAID and LVM)”处要选上“device mapper support”;

Device Drivers--->Graphics support”, 一定要选上” Support for frame buffer devices”;

Device Drivers --->;USB support --->选上”USB Mass Storage support”(如果是在实环境中,想要更多USB支持,就全选吧。我的是在虚拟机中,用不着了)

Device Drivers --->; Network device support --->;Ethernet (10 or 100Mbit) --->; <*>; AMD PCnet32 PCI support

(3) File system--->(以下9个选项是关于ext2和ext3文件系统配置,全部选上)

Second extended fs support

Ext2 extended attributes

Ext2 POSIX Access Control Lists

Ext2 Security Labels

Ext3 journalling file system support

Ext3 extended attributes

Ext3 POSIX Access Control Lists

Ext3 Security Labels

JBB (ext3) debugging support

File system--->DOS/FAT/NT Filesystems --->选上“ NTFS file system support”;

File Systems --> Miscellaneous filesystems ---><*> Compressed ROM file system support (cramfs)


注意:

ext2和ext3文件系统配置很重要,也是必需的,如果对Ext3、Ext2文件的支持直接编译进内核,在你reboot时机器就会当掉,出现如下错误信息:

kernel panic : no init found ,try passing init = option to kernel.....

或者是:

VFS:Cannot open root device "hdxy" or unknow-block(0,0)

Please append a correct "root=" boot option

kernel panic:VFS:Unable to mount root fs on unknown-block(0,0)

或者是:

mount: error 19 mounting ext3

pivotroot: pivot_root(/sysroot,/sysroot/initrd) failed: 2

umount /initrd/proc fail: 2

Freeing unused kernel memory: 244k freed

Kernel panic – not syncing: No init found. Try passing init = option to kernel

(我的机器就是在重启之后出现第三种错误,进不去系统,郁闷死,只好重装了~~~)


(4)如果你在vmware下重新编译内核,硬盘用的是scsi的,以下选项必选:

Device Drivers --->SCSI device support ---><*>SCSI disk support

Device Drivers--->SCSI device support--->SCSI low-level drivers--->;<*>; BusLogic SCSI support

 

四.  现在开始编译了,这是一个漫长的时间

在/usr/src/linux-2.6.18目录下,执行以下命令即可编译。

# make dep (建立编译时所需的从属文件。注意:如果内核从未编译过,此步可跳过)

# make clean (清除内核编译的目标文件)

# make bzImage (注意大小写。这一步才真正编译内核)

内核编译成功后,会在/usr/src/linux/arch/i386/boot目录中生成一个新内核的映像文件bzImage。如果用make zImage编译,内核很大的话,系统会提示你使用make bzImage命令来编译,所以我直接用make bzImage来编译。

# make modules (编译可加载模块) # make modules_install (安装可加载模块)

安装成功后,系统会在/lib/modules目录下生成一个2.6.18子目录,里面存放着新内核的所有可加载模块。

# make install (安装新内核)(这一步会自动的帮你修改内核启动配置文件grub.conf文件,就是往你里面加入新内核的启动配置项)

五. reboot看结果

  如果不出问题,在grub阶段按ESC键会出现两个 内核,一个是以前的,一个是刚编译的新内核。

 

 
原创粉丝点击