linux编译内核步骤

1.设置a)首先,你需要有一台PC(这不是废话^_^)并安装Linux。
b)安装GCC(指hostgcc,用于编译生成PC上运行的程序)、make、ncurses等工具。
c)下载正版Linux内核源码包并解压。
请注意,如果您正在为当前的PC编译内核,最好使用相应的Linux发行版的源代码包。
不过这不是必须的,因为我在我的Fedora13上下载了标准内核linux-2.6.32.65.tar.xz(内置内核版本是2.6.33.3),并成功编译安装,开机重启一切都好。
不过,我使用的.config文件是Fedora13自带的,即/lib/modules/`uname-r`/build/.configd)。
下载并安装交叉编译工具链。
例如,如果您的目标单板CPU可能是arm或mipsCPU,则安装相应的交叉编译工具链。
安装完成后,需要将工具链路径添加到PATH环境变量中。
例如,如果你安装了arm工具链,那么你在shell中执行类似下面的命令,如果有类似的输出,就说明安装完成了。
[root@localhostlinux-2.6.33.i686]#arm-linux-gcc--versionarm-linux-gcc(Buildroot2010.11)4.3.5版权所有(C)2008FreeSoftwareFoundation,Inc.这是免费软件;请参阅源代码以了解复制条件。
无保证;甚至不包括适销性或适用性SEMI-USE注:Arm工具链可以从这里下载:回复“ARM”即可查看。
2、设置编译目标在配置或编译内核之前,首先要确定目标CPU架构以及编译时要使用的工具链。
这是必须首先确定的最基本的信息。
如果您正在为当前使用的PC编译内核,则无需设置它。
否则,必须明确设置。
这里我们以武器为例来说明。
设置()方法有两种:a)修改Makefile打开内核根目录下的Makefile,修改以下两个Makefile变量并保存。
ARCH:=armCROSS_COMPILE:=arm-linux-注意,这里的cross_compile设置假设正在使用的交叉工具链的gcc程序名称是arm-linux-gcc。
如果实际使用的gcc名称是some-thing-else-gcc,则只需在此处填写some-thing-else-即可。
简而言之,名称中的gcc的最后三个字母应该被省略。
b)每次执行make命令时,该信息都会通过命令行参数传递。
这实际上是通过make工具的命令行参数指定变量的值。
例如,配置内核时,使用makeARCH=armCROSS_COMPILE=arm-linux-menuconfig编译内核时,使用makeARCH=armCROSS_COMPILE=arm-linux需要注意的是,实际上,在编译PC内核时,即使用户没有显式地设置它,就不会发生这种情况。
有两项未配置。
因为如果用户不设置这两项,内核源代码的顶层Makefile(位于源代码的根目录)会按照如下方式生成这两个变量的值。
SUBARCH:=$(shelluname-m|sed-es/i.86/i386/-es/sun4u/sparc64/\-es/arm.*/arm/-es/sa110/arm/\-es/s390x/s390/-es/parisc64/巴黎c/\-es/ppc.*/powerpc/-es/mips.*/mips/\-es/sh[234].*/sh/)ARCH?=$(SUBARCH)CROSS_COMPILE?=上述代码之后,ARCH成为PC编译器的架构,即SUBARCH。
因此,如果PC上uname-m的输出是ix86,则ARCH值将变为i386。
如果未配置,CROSS_COMPILE值为空字符串。
这样使用的工具链程序名就不再带有像arm-linux-这样的前缀了相当于在PC上使用gcc。
最后还想说几句ARCH的价值需要再次概括。
因为内核源码gateway目录中没有i386目录,也没有sparc64目录。
因此,SRCARCH变量被构建在顶层makefile中,并且它的值通过以下代码生成。
这样,SRCARCH变量最终对应于内核源代码网关目录中的特定体系结构名称。
SRCARCH:=$(ARCH)ifeq($(ARCH),i386)SRCARCH:=x86endififeq($(ARCH),x86_64)SRCARCH:=x86endififeq($(ARCH),sparc64)SRCARCH:=sparcendififeq($(ARCH),sh64)SRCARCH:=shendif3、配置内核内核的功能这么多,我们需要哪些部分,各个部分以什么形式组织起来(编译到内核或编译到模块中)?可配置的作业参数。
因此,在开始编译之前,我们需要构建一个配置列表,将其放在内核源码的根目录下,命名为.config文件,然后根据这个.config文件编译我们需要的内核。
但内核配置项太多,一一配置太麻烦。
另外,不同的CPU架构有不同的可配置配置项。
例如,决定是否支持特定CPU的某些功能特征的配置项就是与CPU的架构相关的配置项。
因此,内核提供了一种简单的配置方法。
以手臂为例,具体方法如下。
a)根据我们的目标CPU架构,从内核源码的arch/arm/configs目录中找到距离目标系统最近的配置文件(如s3c2410_defconfig),将其复制到内核源码根目录并命名它.config。
请注意,如果您正在为当前PC编译内核,最好将以下文件复制到内核源代码的根目录作为初始配置文件。
该文件是编译PC上运行的内核时使用的配置文件。
/lib/modules/`uname-r`/build/.config顺便在这里想说几句PC内核配置文件有这么多功能可供选择。
不放在一起你不会知道,只有放在一起你才知道。
Linux发行商这样做的目的很可能就是让Linux变得分布式,以满足各种用户的需求。
b)运行makemenuconfig对此配置进行一些必要的修改,然后选择退出时保存以将新配置更新到.config文件。
笔记

如何编译Linux内核

1、编译环境为ubuntu5.10,需要编译的内核源码版本为2.6.122、下载并解压源码首先从Linux内核官方网站.org下载源码。
为了满足下次尝试的要求,我们需要使用O(1)调度程序下载源代码。
因此,这里下载2.6.12版本的源码。
下载linux-2.6.12.tar.bz2并将下载的源代码放入/usr/src/目录中。
如下图:解压源码:3.搭建编译环境现在我们得到的只是源码,只是很多文本文件,要将这个文件变成可执行程序,我们需要使用编译器来编译并链接。
编译器有很多,但在Linux中,常用的是gnu开源编译器套件,包括gcc等。
现在我们安装基本的编译套件,如图:4、安装ncurses库这里使用的是Ubuntu系统,因为系统自带的ncurses库在支持makemenuconfig时会出错,所以ncurses库还是需要的从源代码在这里安装。
首先去ncurses官方网站http://ftp.gnu.org/pub/gnu/ncurses/下载源码。
这里我们下载5.9版本,通过简单的安装方法.configure和make、makeinstall来安装。
如下图所示:5、配置内核的所有准备工作完成后,我们现在可以配置内核了,这里我们使用makemenuconfig方法。
如下图:使用makemenuconfig命令后,会出现如下字符界面,我们可以在该界面上对内核进行配置。
但如果不是第一次配置该内核,请运行:makemrproper清除之前的配置并恢复到默认配置,然后运行:makemenuconfig这里我们以cpu支持配置为例,其余的选项就不一一详述了首先,查看机器的CPU类型,如下图:这里我们可以看到是的,我电脑的CPU是AMDAthlon,所以我们在cpu选择中选择AMD,如图下面:这里要注意什么A.Linux内核编译过程中不需要进行cpu设置,虽然如果保留默认选项386(我们只是将其更改为AMD),内核可以正常运行,但只是运行速度较慢。
B.一般来说,最常见的问题在于DeviceDriver设置。
起初,我遇到了错误“ALERT!/dev/sda1doesnotexist.Droppingtoashell!”这是编译内核后在系统引导过程中通过grub报告的。
这是由于硬盘驱动器配置不正确造成的。
运行lspci命令,看到如下一行:确定需要配置SCSI、PCI-X、Fusion-MPT驱动器,且对应的驱动器选项中的[M]需要设置为[*],因为硬盘驱动器在系统启动时加载,因此不能作为模块加载。
将这个驱动中的所有选项修改为[*]:6.编译内核配置好内核后,现在就可以开始编译内核了,只需要make命令就可以了,在我的电脑上很容易完成,大约需要25分钟。
下图是运行make后的部分输出。
7、安装内核编译完成后,我们需要安装内核,主要分为以下几个步骤:1)安装模块对于内核来说,每个版本的内核都有自己的模块目录,位于默认情况下/lib/modules/在带有内核版本号的目录中,makemodules_install会创建一个目录匹配并复制相应的模块文件到那里。
注意,这一步必须在编译内核之后进行。
2)复制bzImage文件bzImage文件是内核镜像文件,是启动内核所必需的。
在这里,我为自己创建了一个新目录。
我们复制下来,按照一般内核镜像文件命名方式命名为vmlinuz-2.6.123)创建initrd文件,将文件命名为initrd.img-2.6.124),修改grub启动项,以便能够引导我们的新系统,我们需要更改grub配置并添加启动选项。
ubuntu5.10的grub版本比较低,配置文件是/boot/grub/menu.lst,更高的grub版本可能在/boot/grub/grub.cfg。
在原来的启动项的基础上,添加我们自己的启动项,并设置为默认启动项配置如下5)如果重启后没有问题,说明我们的内核已经正常加载了如果运行uname-a,则。
会发现内核版本已经是2.6.12了。

LinuxKernel(Linux内核)怎么安装?

1.下载新内核源码:进入官网www.kernel.org,下载最新的Linux内核,保存在/usr/src/kernels目录下,大约54MB。

2.#cd/usr/src/kernels

3.#tarjvxflinux-2.6.31.5.tar.bz2

4从系统中复制隐藏文件.config到新的内核目录。

5.cd进入新的内核目录,然后执行#makeoldconfig,此时所有提示都按回车,选项提示全部默认。

6.#makexconfig这时候出现了内核配置窗口,全是英文,看不懂,就关闭窗口继续。

7.#makebzImage&&makemodules&&makemodules_install&&makeinstall第七步组装需要很长时间,从30到50分钟不等,具体取决于设备的情况。

8.#uname-r检查内核版本完成上述步骤后,就可以重新启动系统了。
启动期间,“NewKernel”选项将出现在GRUB菜单中。
此方法在安装新内核后也会保留旧内核。
刚开始的时候可以选择新旧内核,非常实用