`
memorymyann
  • 浏览: 266499 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

linux内核编译

阅读更多

这是调试linux内核的必要步骤,虽然很麻烦,而且容易出错(所以编译前请备份好你的系统),而且不同版本的Linux版本在编译过程中还有些细微的差别,所以我一直不愿意编译内核(编译一次2个小时,估计是虚拟机和硬件比较老的原因)。

 

先决条件:linux是用C语言写的,源代码也是C,编译自然需要C的编译器。LINUX下使用的是GCC,他的安装非常简单。用过linux的都清楚,apt或者yum(fedora下)都可以很方便的安装完GCC。除此之外,在编译过程中,有可能还可能出现你所使用的工具依赖其它工具包的情况,这时你只需要像安装GCC一样安装上就可以了。

 

下面是我编译linux-2.6.24并引导的过程,我使用的引导工具是GRUB,当然也有人可能是使用LILO来引导(LILO是比较老的工具使用的人不多,引导过程和编译过程是分开的,具体如何引导可以查询内核引导)。

 

第一步是下载内核代码,下载链接http://www.kernel.org/pub/linux/kernel

版本号中第2个数为奇数是测试版本,所以建议下载第2位是偶数的版本。

 

第二步就是解压内核,在 /usr/src 目录下,输入 tar xzvf /path/to/my/kernel-x.y.z.tar.gz 或者 cat /path/to/my/kernel-x.y.z.tar.bz2 | bzip2 -d | tar xvf - ,根据您下载的源代码是用 gzip 或 bzip2 压缩的。

 

第三步解压完毕后就是要配置内核了(内核编译中有很多常量和预编译)这些常量的定义就是取决于你这里的对内核的配置。

进入刚解压玩的/usr/src/linux xxxx目录

内核配置有3中办法,

1 make config指令,强力不推荐。我试过一次,高达几百次的问题让我回答,我差点没疯掉,后来干脆一路回车到底。按了N久。

2 make menuconfig指令,取决于你有没有图形界面了,如果没有,那就乖乖的make config.在make menuconfig时候可能会报错误进入不了图形配置界面,这时你只要安装好缺失的包就好了。

3 make xconfig我没用过,也是图形界面配置。

 

配置过程中绝大部分都默认,只是需要注意下面这些

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”;

(4)如果你在vmware下编译内核,硬盘用的是scsi的,以下三个选项必选:
Device Drivers ---><*>SCSI device support (此项不选的话,下面两项就选择不上)
Device Drivers ---><*>SCSI device support ---><*>SCSI disk support
Device Drivers---><8>SCSI device support--->SCSI low-level drivers---><*>; BusLogic SCSI support

转自http://leftleg.hzpub.com/post/573/

 

(如果你这里想以后调试内核的话,那么你要注意设置kernel hacking这个选项卡的内容,因为绝大部分人是不会去调试内核的,所以一般linux发行商都会将这个选项卡里面绝大部分内容选择NO,具体如何设置,大家可以自己查询GOOGLE,或者参照书籍ldd3第4章。)

 

第四步,在配置玩内核后,我们就要开始编译内核了,仍然是在/usr/src/linux xxx目录下,输入make clean,这一步是清理掉以前编译过的老文件,如果你从来没有,可以省去。接着输入make bzImage开始编译内核,速度看个人电脑速度而定,我这里用了大概20多分钟。然后make modules编译加载模块,速度看你的机器和你先前配置的加载模块了。我加载的太多,机器速度不行,花了1个多小时(喝杯水慢慢等)。make module_install(安装加载模块),make install(安装新内核)

 

第五步

# cp /usr/src/linux-2.6.18/arch/i386/boot/bzImage /boot/vmlinuz-2.6.18
# cp /usr/src/linux-2.6.18/System.map /boot/System.map-2.6.18
# cd /boot (进入boot目录)
# rm –rf System.map (删除原来的连接)
# ln –s System.map-2.6.18 System.map (重新建立连接)

接下来就可以修改grub引导的配置文件/boot/grub/grub.conf,然后从其系统就可以了。

 

看上去很复杂,其实更复杂。大家的电脑硬件不同,所以在内核配置过程中有很多地方虽然可以默认,但是选错就会导致系统引导失败。我虽然编译完毕,grub配置也OK了,但是由于在内核配置中SCSI驱动安装配置的错误导致引导失败,又在从新编译一次(郁闷)。所以在编译内核中一定要有耐心,很多人编译用了1个星期多或者更久。

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics