`
memorymyann
  • 浏览: 271040 次
  • 性别: 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个星期多或者更久。

分享到:
评论

相关推荐

    linux内核编译原理

    linux内核编译2.6.39linux内核编译2.6.39linux内核编译2.6.39linux内核编译2.6.39linux内核编译2.6.39linux内核编译2.6.39linux内核编译2.6.39linux内核编译2.6.39linux内核编译2.6.39linux内核编译2.6.39linux内核...

    Linux内核编译与裁剪

    ### Linux内核编译与裁剪 #### 一、Linux版本特点 Linux内核版本的命名规则对于理解和追踪内核的发展至关重要。版本号通常由三部分组成:`VERSION.PATCHLEVEL.SUBLEVEL`,有时还会附加一个`EXTRAVERSION`。 - **...

    操作系统Linux内核编译实验报告.docx

    操作系统Linux内核编译是一项对Linux系统有深入理解的重要实践,它涉及到系统核心的构建、配置和安装。在这个实验报告中,我们主要关注的是在Ubuntu Kylin 13.04环境下,如何编译和安装一个新的Linux内核,并且如何...

    linux内核编译文档

    Linux 内核编译文档 本文档旨在为 Linux 新手提供一个详细的 Linux 内核编译指南,帮助他们从基础开始学习 Linux 系统。编译内核对于 Linux 新手来说可能有一些困难,但通过本文档的指导,读者可以轻松地完成内核...

    linux内核编译各个选项的含义[参照].pdf

    Linux 内核编译选项详解 Linux 内核编译选项是 Linux 内核编译过程中的一个重要步骤,其中包含了许多选项,用于控制内核的行为和功能。在本文中,我们将详细介绍 Linux 内核编译选项的含义和作用。 代码成熟度选项...

    Linux内核编译实验

    ### Linux内核编译实验知识点概述 #### 一、实验目的 本次实验旨在通过实践学习以下内容: 1. **理解Linux内核源代码的目录结构及其各目录的主要功能**:通过对Linux内核源代码目录的深入研究,了解不同目录的作用...

    基于Arm的Linux内核编译指导及bootloader

    为了使这些设备运行Linux操作系统,我们需要理解Linux内核编译过程以及bootloader的工作原理。本篇文章将深入探讨这两个关键知识点。 首先,让我们从Linux内核编译开始。Linux内核是操作系统的核心部分,它负责管理...

    Linux内核编译步骤

    Linux 内核编译步骤 Linux 内核编译是一个复杂的过程,需要了解 Linux 内核的结构和编译过程。下面是 Linux 内核编译的详细步骤: 步骤 1: 下载 Linux 内核源代码 在编译 Linux 内核之前,需要下载 Linux 内核的...

    Linux内核编译全过程详解

    ### Linux内核编译全过程详解 #### 一、前言 在深入了解Linux内核编译的过程中,我们将聚焦于kernel 2.6.7版本,并详细阐述整个编译流程中的关键步骤与注意事项。对于想要深入了解Linux内核工作原理及定制化需求的...

    Linux内核编译命令

    ### Linux内核编译命令详解 #### 一、概述 Linux内核是开源操作系统的核心部分,负责管理和协调硬件资源以及为应用程序提供服务。对于开发者来说,掌握如何编译Linux内核至关重要,因为这能帮助他们根据特定需求...

    linux-内核编译各个选项的含义

    Linux 内核编译选项解析 Linux 内核编译选项是 Linux 内核编译过程中的一个重要步骤,它决定了 Linux 内核的功能和性能。本文将对 Linux 内核编译选项进行详细的解析,以帮助读者更好地理解 Linux 内核编译选项的...

    linux内核编译实验报告

    ### Linux内核编译实验知识点总结 #### 一、实验目的 - **了解Linux内核编译**: 学习如何从源代码构建Linux内核,理解内核编译的基本流程和关键技术点。 - **掌握内核配置**: 掌握如何通过`menuconfig`等工具配置...

    at91sam9260的linux内核编译详解

    ### at91sam9260的Linux内核编译详解 #### 一、引言 在嵌入式系统开发领域,对特定硬件平台进行Linux内核编译是一项至关重要的技能。本文将详细介绍如何为at91sam9260-ek开发板编译Linux内核,帮助读者掌握这一过程...

    Linux内核编译全过程详解(kernel2.6.7)[参考].pdf

    Linux 内核编译全过程详解(kernel 2.6.7) Linux 内核编译是一个复杂的过程,它需要仔细的规划和执行。在这个过程中,需要了解内核编译的各个阶段,包括编译前准备、编译配置、编译过程和运行内核的常见问题。下面...

    linux内核编译工具Bochs

    linux内核编译工具Bochslinux内核编译工具Bochslinux内核编译工具Bochslinux内核编译工具Bochslinux内核编译工具Bochslinux内核编译工具Bochslinux内核编译工具Bochslinux内核编译工具Bochslinux内核编译工具...

    linux内核编译.pdf

    linux内核编译.pdf

    VMware环境下Linux内核编译过程详细解析

    VMware 环境下 Linux 内核编译过程详细解析 在 VMware 环境下编译 Linux 内核是一件复杂的事情,需要了解 Linux 内核编译过程和 VMware 环境的特点。本文将详细介绍 VMware 环境下 Linux 内核编译过程,包括编译...

    linux内核编译最完整过程成功案例

    根据提供的文件信息,本文将详细解释Linux内核的编译过程。这不仅涉及到了Linux内核本身的编译步骤,还...以上是关于Linux内核编译最完整过程的成功案例的详细介绍,希望能帮助到正在学习或实践Linux内核编译的读者。

Global site tag (gtag.js) - Google Analytics