当前位置:首页 » 编程软件 » 使用编译内核

使用编译内核

发布时间: 2022-06-22 00:28:31

Ⅰ 内核编译以及如何得到kernel

注:不仅要对机器本身有了解,还要对linux系统有一定的了解)有一定的理解——这是一个难题。
因此一个Linux新手是根本不会尝试编译内核的。这篇文章中展示了一些在使用“make xconfig”命令编译内核过程中的截图。
使用这个命令(“make xconfig”),用户可以通过图形用户界面(GUI)和鼠标来对内核进行处理。
这里有差不多40张截图,它们解释了在某种特定的情况下为什么你需要或不能选择某个特定的内核选项(options)。
将这40幅截图逐一讨论看上去似乎有些夸张,但这的确是解释内核的内部工作机理(internal
workings)以及特定内核选项存在的原因和工作原理的比较好的方法。
这些截图是kernel-2.4.6的。最新的内核是2.4.19,但是除去在菜单中有一些新的项目(e.g.对新硬件的支持)以外,
屏幕的显示以及编译的过程应该是一样的。建议你在开始编译前把这篇文章打印出来,这样你就可以随时查找必要的信息!
本文的结构如下。首先讨论你在Internet的什么地方能够找到内核的源码以及如何安装这些源码,
然后通过屏幕截图讨论使用图形界面配置内核。 一旦内核配置完毕,它就需要被编译,但是一个新编译的内核并不能直接使用。
首先,新内核需要和引导程序“lilo”一起安装,然后,在使用lilo前你必须写配置文件“/etc/lilo.conf”。
另外,还有需要指出一些特殊的要点(specific points),比如笔记本电脑需要的PCMCIA支持。
看上去象信用卡的PCMCIA,小型板卡(small inserts)通常负责联网任务,在2.4.x的内核中已经可以直接提供支持。
但之前的内核需要重新编译安装后才能提供PCMCIA支持。SuSE Linux还有一个问题,那就是ALSA声卡驱动程序的音效支持。
这些驱动程序并不是内核的一部分,它们需要被编译进去然后重新安装,因为原始的驱动程序通常没有工作。
更麻烦的是,从一个系列的内核转到另一个系列的内核,比如从2.2.x系列转到2.4.x系列, 可能会由于使用某种(某些)内核工具(kernel
utilities)而产生一些问题。 这就是所谓的“motils”(译者注:可以看为“Moles
Utilities”的所写,这样就不会对这个名称感到费解了),包括代码(code)需要载入(load)的内核模块(kernel
mole):图3解释了什么是内核模块。 有时新内核不知道如何处理老的motils,所以你必须编译和安装更新版本的motils。
这样的问题虽然不多但是它们的确存在,而且目前只能预先指出它们。
但是如果你完全按照本文的步骤进行,几乎不会发生错误。新内核被添加到lilo,或者被复制()到loadlin所在的分区。
因此,在紧急情况下,你仍然可以通过老内核启动机器。然后可以在老内核下试着解决新内核的问题。
即使你遇到motils的问题,你也可以从老内核重新启动计算机,然后通过将它们(内核和motils)分别编译和安装来修复(fix)这个问
题: 所有新版本的motils都对老内核向下兼容,所以新motils在老内核下可以很好的工作。

Ⅱ Linux内核源码如何编译

首先uname -r看一下你当前的linux内核版本

1、linux的源码是在/usr/src这个目录下,此目录有你电脑上各个版本的linux内核源代码,用uname -r命令可以查看你当前使用的是哪套内核,你把你下载的内核源码也保存到这个目录之下。
2、配置内核 make menuconfig,根据你的需要来进行选择,设置完保存之后会在当前目录下生成.config配置文件,以后的编译会根据这个来有选择的编译。
3、编译,依次执行make、make bzImage、make moles、make moles
4、安装,make install
5、.创建系统启动映像,到 /boot 目录下,执行 mkinitramfs -o initrd.img-2.6.36 2.6.36
6、修改启动项,因为你在启动的时候会出现多个内核供你选择,此事要选择你刚编译的那个版本,如果你的电脑没有等待时间,就会进入默认的,默认的那个取决于 /boot/grub/grub.cfg 文件的设置,找到if [ "${linux_gfx_mode}" != "text" ]这行,他的第一个就是你默认启动的那个内核,如果你刚编译的内核是在下面,就把代表这个内核的几行代码移到第一位如:
menuentry 'Ubuntu, with Linux 3.2.0-35-generic' --class ubuntu --class gnu-linux --class gnu --class os {

recordfail
gfxmode $linux_gfx_mode
insmod gzio
insmod part_msdos
insmod ext2
set root='(hd0,msdos1)'
search --no-floppy --fs-uuid --set=root 9961c170-2566-41ac-8155-18f231c1bea5
linux/boot/vmlinuz-3.2.0-35-generic root=UUID=9961c170-2566-41ac-8155-18f231c1bea5 ro quiet splash $vt_handoff
initrd/boot/initrd.img-3.2.0-35-generic
}
当然你也可以修改 set default="0"来决定用哪个,看看你的内核在第几位,default就填几,不过我用过这种方法,貌似不好用。

重启过后你编译的内核源码就成功地运行了,如果出现问题,比如鼠标不能用,usb不识别等问题就好好查查你的make menuconfig这一步,改好后就万事ok了。

最后再用uname -r看看你的linux内核版本。是不是你刚下的那个呢!有没有成就感?
打字不易,如满意,望采纳。

Ⅲ 如何学习编译内核

我用的是RedHat9.0, 根据第一贴 "2.4->2.6内核升级指南", 首先需要把必要的软件包都升级到要求的版本以上, 经过折腾, 有的是直接用rpm -Uvh 或 rpm -ivh, 有的是直接用源代码编译, 总算把大部分软件包都升级了. 有一个软件包oprofile死活装不上, 用rpm装的时候出来这样的错误:
error: Failed dependencies:
libc.so.6(GLIBC_2.3.4) is needed by oprofile-0.8-0.20040121.3
可是我的/lib目录里明明有
lrwxrwxrwx 1 root root 13 8月 2 10:45 libc.so.6 -> libc-2.3.2.so
(我已经经历过N次这样的错误了, 这是我非常痛恨rpm的主要原因.)
改用源代码编译的时候, make的时候出来这样的错误:
The present kernel configuration has moles disabled.
Type 'make config' and enable loadable mole support.
Then build a kernel with mole support enabled.

TNND, RedHat9缺省的内核编译居然是moles disabled!!!我折腾来折腾去就是想把2.4.20-8的内核升级到2.6.12.4去, 到头来还得让我先编译原来2.4.20-8的内核? 先把这事放一放, oprofile说不定不是很有用的模块.

接下来顺利地把mole-init-tools升上去了. 然而在升级mkinitrd的时候又碰到了致命的问题.
根据说明, 要想升级mkinitrd, 首先要升级lvm2和device-mapper, 用rpm -Uvh升级lvm2的时候出来一大堆的错误:
error: Failed dependencies:
libdevmapper.so.1.00 is needed by lvm2-2.00.15-2
libdevmapper.so.1.00(Base) is needed by lvm2-2.00.15-2
libselinux.so.1 is needed by lvm2-2.00.15-2
lvm < 1.0.3-19 conflicts with lvm2-2.00.15-2
看来要先装device-mapper再装lvm2, 另外lvm与lvm2冲突, 要先卸载lvm.
那就卸载lvm吧, NND, lvm is needed by (installed) mkinitrd-3.4.42-1
顾不得了, 用rpm -e -nodeps卸载. 不过现在还是先把device-mapper装好, 再收拾lvm2.

会过头来, 用rpm升级device-mapper, 结果出来
error: Failed dependencies:
libselinux.so.1 is needed by device-mapper-1.00.14-3
查了一下, 机器上却是没有libselinux.so.1, 在网上荡了一个rpm软件包, 结果又是这样一个错误,
error: Failed dependencies:
libc.so.6(GLIBC_2.3.4) is needed by libselinux-1.11.4-1

我不知道我机器里的libc.so.6发了什么猪瘟, 看来是因为我机器里的libc.so.6-->libc-2.3.2.so不是GLIBC_2.3.4.

只好再到网上去荡了一个glibc的软件包, 用rpm -Uvh升级的时候, 好了, 出来一大堆冲突

package glibc-32bit-9-200508050455 is intended for a x86_64 architecture file /lib/i686/libc.so.6 from install of glibc-32bit-9-200508050455 conflicts with file from package glibc-2.3.2-11.9
file /lib/i686/libm.so.6 from install of glibc-32bit-9-200508050455 conflicts with file from package glibc-2.3.2-11.9
file /lib/i686/libpthread.so.0 from install of glibc-32bit-9-200508050455 conflicts with file from package glibc-2.3.2-11.9
file /lib/ld-linux.so.2 from install of glibc-32bit-9-200508050455 conflicts with file from package glibc-2.3.2-11.9
file /lib/libBrokenLocale.so.1 from install of glibc-32bit-9-200508050455 conflicts with file from package glibc-2.3.2-11.9

Ⅳ 如何编译一个内核

一、 下载新内核的源代码

目前,在Internet上提供Linux源代码的站点有很多,读者可以选择一个速度较快的站点下载。笔者是从站点www.kernelnotes.org上下载了Linux的最新开发版内核2.3.14的源代码,全部代码被压缩到一个名叫Linux-2.3.14.tar.gz的文件中。

二、 释放内核源代码

由于源代码放在一个压缩文件中,因此在配置内核之前,要先将源代码释放到指定的目录下。首先以root帐号登录,然后进入/usr/src子目录。如果用户在安装Linux时,安装了内核的源代码,则会发现一个linux-2.2.5的子目录。该目录下存放着内核2.2.5的源代码。此外,还会发现一个指向该目录的链接linux。删除该连接,然后将新内核的源文件拷贝到/usr/src目录中。

(一)、用tar命令释放内核源代码

# cd /usr/src

# tar zxvf Linux-2.3.14.tar.gz

文件释放成功后,在/usr/src目录下会生成一个linux子目录。其中包含了内核2.3.14的全部源代码。

(二)、将/usr/include/asm、/usr/inlude/linux、/usr/include/scsi链接到/usr/src/linux/include目录下的对应目录中。

# cd /usr/include

# rm -Rf asm linux

# 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

(三)、删除源代码目录中残留的.o文件和其它从属文件。

# cd /usr/src/linux

# make mrproper

三、 配置内核

(一)、启动内核配置程序。

# cd /usr/src/linux

# make config

除了上面的命令,用户还可以使用make menuconfig命令启动一个菜单模式的配置界面。如果用户安装了X window系统,还可以执行make xconfig命令启动X window下的内核配置程序。

(二)、配置内核

Linux的
内核配置程序提供了一系列配置选项。对于每一个配置选项,用户可以回答"y"、"m"或"n"。其中"y"表示将相应特性的支持或设备驱动程序编译进内
核;"m"表示将相应特性的支持或设备驱动程序编译成可加载 模块,在需要时,可由系统或用户自行加入到内核中去;"n"表示内核不提供相应特性或驱动程序
的支持。由于内核的配置选项非常多,本文只介绍一些比较重要的选项。

1、Code maturity level options(代码成熟度选项)

Prompt for development and/or incomplete code/drivers
(CONFIG_EXPERIMENTAL) [N/y/?]
如果用户想要使用还处于测试阶段的代码或驱动,可以选择“y”。如果想编译出一个稳定的内核,则要选择“n”。

1、 Processor type and features(处理器类型和特色)

(1)、Processor family (386, 486/Cx486, 586/K5/5x86/6x86, Pentium/K6/TSC, PPro/6x86MX) [PPro/6x86MX] 选择处理器类型,缺省为Ppro/6x86MX。

(2)、Maximum Physical Memory (1GB, 2GB) [1GB] 内核支持的最大内存数,缺省为1G。

(3)、Math emulation (CONFIG_MATH_EMULATION) [N/y/?] 协处理器仿真,缺省为不仿真。

(4)、MTRR (Memory Type Range Register) support (CONFIG_MTRR) [N/y/?]

选择该选项,系统将生成/proc/mtrr文件对MTRR进行管理,供X server使用。

(5)、Symmetric multi-processing support (CONFIG_SMP) [Y/n/?] 选择“y”,内核将支持对称多处理器。

2、 Loadable mole support(可加载模块支持)

(1)、Enable loadable mole support (CONFIG_MODULES) [Y/n/?] 选择“y”,内核将支持加载模块。

(2)、Kernel mole loader (CONFIG_KMOD) [N/y/?] 选择“y”,内核将自动加载那些可加载模块,否则需要用户手工加载。

3、 General setup(一般设置)

(1)、Networking support (CONFIG_NET) [Y/n/?] 该选项设置是否在内核中提供网络支持。

(2)、PCI support (CONFIG_PCI) [Y/n/?] 该选项设置是否在内核中提供PCI支持。

(3)、PCI access mode (BIOS, Direct, Any) [Any] 该选项设置Linux探测PCI设备的方式。选择“BIOS”,Linux将使用BIOS;选择“Direct”,Linux将不通过BIOS;选择“Any”,Linux将直接探测PCI设备,如果失败,再使用BIOS。

(4)Parallel port support (CONFIG_PARPORT) [N/y/m/?] 选择“y”,内核将支持平行口。

4、 Plug and Play configuration(即插即用设备支持)

(1)、Plug and Play support (CONFIG_PNP) [Y/m/n/?] 选择“y”,内核将自动配置即插即用设备。

(2)、ISA Plug and Play support (CONFIG_ISAPNP) [Y/m/n/?] 选择“y”,内核将自动配置基于ISA总线的即插即用设备。

5、 Block devices(块设备)

(1)、Normal PC floppy disk support (CONFIG_BLK_DEV_FD) [Y/m/n/?] 选择“y”,内核将提供对软盘的支持。

(2)、Enhanced IDE/MFM/RLL disk/cdrom/tape/floppy support (CONFIG_BLK_DEV_IDE) [Y/m/n/?] 选择“y”,内核将提供对增强IDE硬盘、CDROM和磁带机的支持。

6、 Networking options(网络选项)

(1)、Packet socket (CONFIG_PACKET) [Y/m/n/?] 选择“y”,一些应用程序将使用Packet协议直接同网络设备通讯,而不通过内核中的其它中介协议。

(2)、Network firewalls (CONFIG_FIREWALL) [N/y/?] 选择“y”,内核将支持防火墙。

(3)、TCP/IP networking (CONFIG_INET) [Y/n/?] 选择“y”,内核将支持TCP/IP协议。

(4)The IPX protocol (CONFIG_IPX) [N/y/m/?] 选择“y”,内核将支持IPX协议。

(5)、Appletalk DDP (CONFIG_ATALK) [N/y/m/?] 选择“y”,内核将支持Appletalk DDP协议。

8、SCSI support(SCSI支持)

如果用户要使用SCSI设备,可配置相应选项。

9、Network device support(网络设备支持)

Network device support (CONFIG_NETDEVICES) [Y/n/?] 选择“y”,内核将提供对网络驱动程序的支持。

10、Ethernet (10 or 100Mbit)(10M或100M以太网)

在该项设置中,系统提供了许多网卡驱动程序,用户只要选择自己的网卡驱动就可以了。此外,用户还可以根据需要,在内核中加入对FDDI、PPP、SLIP和无线LAN(Wireless LAN)的支持。

11、Character devices(字符设备)

(1)、Virtual terminal (CONFIG_VT) [Y/n/?] 选择“y”,内核将支持虚拟终端。

(2)、Support for console on virtual terminal (CONFIG_VT_CONSOLE) [Y/n/?]

选择“y”,内核可将一个虚拟终端用作系统控制台。

(3)、Standard/generic (mb) serial support (CONFIG_SERIAL) [Y/m/n/?]

选择“y”,内核将支持串行口。

(4)、Support for console on serial port (CONFIG_SERIAL_CONSOLE) [N/y/?]

选择“y”,内核可将一个串行口用作系统控制台。

12、Mice(鼠标)

PS/2 mouse (aka "auxiliary device") support (CONFIG_PSMOUSE) [Y/n/?] 如果用户使用的是PS/2鼠标,则该选项应该选择“y”。

13、Filesystems(文件系统)

(1)、Quota support (CONFIG_QUOTA) [N/y/?] 选择“y”,内核将支持磁盘限额。

(2)、Kernel automounter support (CONFIG_AUTOFS_FS) [Y/m/n/?] 选择“y”,内核将提供对automounter的支持,使系统在启动时自动 mount远程文件系统。

(3)、DOS FAT fs support (CONFIG_FAT_FS) [N/y/m/?] 选择“y”,内核将支持DOS FAT文件系统。

(4)、ISO 9660 CDROM filesystem support (CONFIG_ISO9660_FS) [Y/m/n/?]

选择“y”,内核将支持ISO 9660 CDROM文件系统。

(5)、NTFS filesystem support (read only) (CONFIG_NTFS_FS) [N/y/m/?]

选择“y”,用户就可以以只读方式访问NTFS文件系统。

(6)、/proc filesystem support (CONFIG_PROC_FS) [Y/n/?] /proc是存放Linux系统运行状态的虚拟文件系统,该项必须选择“y”。

(7)、Second extended fs support (CONFIG_EXT2_FS) [Y/m/n/?] EXT2是Linux的标准文件系统,该项也必须选择“y”。

14、Network File Systems(网络文件系统)

(1)、NFS filesystem support (CONFIG_NFS_FS) [Y/m/n/?] 选择“y”,内核将支持NFS文件系统。

(2)、SMB filesystem support (to mount WfW shares etc.) (CONFIG_SMB_FS)

选择“y”,内核将支持SMB文件系统。

(3)、NCP filesystem support (to mount NetWare volumes) (CONFIG_NCP_FS)

选择“y”,内核将支持NCP文件系统。

15、Partition Types(分区类型)

该选项支持一些不太常用的分区类型,用户如果需要,在相应的选项上选择“y”即可。

16、Console drivers(控制台驱动)

VGA text console (CONFIG_VGA_CONSOLE) [Y/n/?] 选择“y”,用户就可以在标准的VGA显示方式下使用Linux了。

17、Sound(声音)

Sound card support (CONFIG_SOUND) [N/y/m/?] 选择“y”,内核就可提供对声卡的支持。

18、Kernel hacking(内核监视)

Magic SysRq key (CONFIG_MAGIC_SYSRQ) [N/y/?] 选择“y”,用户就可以对系统进行部分控制。一般情况下选择“n”。

四、 编译内核

(一)、建立编译时所需的从属文件

# cd /usr/src/linux

# make dep

(二)、清除内核编译的目标文件

# make clean

(三)、编译内核

# make zImage

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

(四)、编译可加载模块

如果用户在配置内核时设置了可加载模块,则需要对这些模块进行编译,以便将来使用insmod命令进行加载。

# make moles

# make modelus_install

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

五、 启动新内核

(一)、将新内核和System.map文件拷贝到/boot目录下

# cp /usr/src/linux/arch/i386/boot/bzImage /boot/vmlinuz-2.3.14

# cp /usr/src/linux/System.map /boot/System.map-2.3.14

# cd /boot

# rm -f System.map

# ln -s System.map-2.3.14 System.map

(二)、配置/etc/lilo.conf文件。在该文件中加入下面几行:

default=linux-2.3.14

image=/boot/vmlinuz-2.3.14

label=linux-2.3.14

root=/dev/hda1

read-only

(三)、使新配置生效

# /sbin/lilo

(四)、重新启动系统

# /sbin/reboot

新内核如果不能正常启动,用户可以在LILO:提示符下启动旧内核。然后查出故障原因,重新编译新内核即可。

Ⅳ linux编译内核步骤

一、准备工作
a) 首先,你要有一台PC(这不废话么^_^),装好了Linux。
b) 安装好GCC(这个指的是host gcc,用于编译生成运行于pc机程序的)、make、ncurses等工具。
c) 下载一份纯净的Linux内核源码包,并解压好。

注意,如果你是为当前PC机编译内核,最好使用相应的Linux发行版的源码包。

不过这应该也不是必须的,因为我在我的Fedora 13上(其自带的内核版本是2.6.33.3),就下载了一个标准的内核linux-2.6.32.65.tar.xz,并且顺利的编译安装成功了,上电重启都OK的。不过,我使用的.config配置文件,是Fedora 13自带内核的配置文件,即/lib/moles/`uname -r`/build/.config

d) 如果你是移植Linux到嵌入式系统,则还要再下载安装交叉编译工具链。

例如,你的目标单板CPU可能是arm或mips等cpu,则安装相应的交叉编译工具链。安装后,需要将工具链路径添加到PATH环境变量中。例如,你安装的是arm工具链,那么你在shell中执行类似如下的命令,假如有类似的输出,就说明安装好了。
[root@localhost linux-2.6.33.i686]# arm-linux-gcc --version
arm-linux-gcc (Buildroot 2010.11) 4.3.5
Copyright (C) 2008 Free Software Foundation, Inc.
This is free software; see the source for ing conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
注:arm的工具链,可以从这里下载:回复“ARM”即可查看。

二、设置编译目标

在配置或编译内核之前,首先要确定目标CPU架构,以及编译时采用什么工具链。这是最最基础的信息,首先要确定的。
如果你是为当前使用的PC机编译内核,则无须设置。
否则的话,就要明确设置。
这里以arm为例,来说明。
有两种设置方法():

a) 修改Makefile
打开内核源码根目录下的Makefile,修改如下两个Makefile变量并保存。
ARCH := arm
CROSS_COMPILE := arm-linux-

注意,这里cross_compile的设置,是假定所用的交叉工具链的gcc程序名称为arm-linux-gcc。如果实际使用的gcc名称是some-thing-else-gcc,则这里照葫芦画瓢填some-thing-else-即可。总之,要省去名称中最后的gcc那3个字母。

b) 每次执行make命令时,都通过命令行参数传入这些信息。
这其实是通过make工具的命令行参数指定变量的值。
例如
配置内核时时,使用
make ARCH=arm CROSS_COMPILE=arm-linux- menuconfig
编译内核时使用
make ARCH=arm CROSS_COMPILE=arm-linux-

注意,实际上,对于编译PC机内核的情况,虽然用户没有明确设置,但并不是这两项没有配置。因为如果用户没有设置这两项,内核源码顶层Makefile(位于源码根目录下)会通过如下方式生成这两个变量的值。
SUBARCH := $(shell uname -m | sed -e s/i.86/i386/ -e s/sun4u/sparc64/ \
-e s/arm.*/arm/ -e s/sa110/arm/ \
-e s/s390x/s390/ -e s/parisc64/parisc/ \
-e s/ppc.*/powerpc/ -e s/mips.*/mips/ \
-e s/sh[234].*/sh/ )
ARCH?= $(SUBARCH)
CROSS_COMPILE ?=

经过上面的代码,ARCH变成了PC编译机的arch,即SUBARCH。因此,如果PC机上uname -m输出的是ix86,则ARCH的值就成了i386。

而CROSS_COMPILE的值,如果没配置,则为空字符串。这样一来所使用的工具链程序的名称,就不再有类似arm-linux-这样的前缀,就相当于使用了PC机上的gcc。

最后再多说两句,ARCH的值还需要再进一步做泛化。因为内核源码的arch目录下,不存在i386这个目录,也没有sparc64这样的目录。

因此顶层makefile中又构造了一个SRCARCH变量,通过如下代码,生成他的值。这样一来,SRCARCH变量,才最终匹配到内核源码arch目录中的某一个架构名。

SRCARCH := $(ARCH)

ifeq ($(ARCH),i386)
SRCARCH := x86
endif

ifeq ($(ARCH),x86_64)
SRCARCH := x86
endif

ifeq ($(ARCH),sparc64)
SRCARCH := sparc
endif

ifeq ($(ARCH),sh64)
SRCARCH := sh
endif

三、配置内核

内核的功能那么多,我们需要哪些部分,每个部分编译成什么形式(编进内核还是编成模块),每个部分的工作参数如何,这些都是可以配置的。因此,在开始编译之前,我们需要构建出一份配置清单,放到内核源码根目录下,命名为.config文件,然后根据此.config文件,编译出我们需要的内核。

但是,内核的配置项太多了,一个一个配,太麻烦了。而且,不同的CPU架构,所能配置的配置项集合,是不一样的。例如,某种CPU的某个功能特性要不要支持的配置项,就是与CPU架构有关的配置项。所以,内核提供了一种简单的配置方法。

以arm为例,具体做法如下。

a) 根据我们的目标CPU架构,从内核源码arch/arm/configs目录下,找一个与目标系统最接近的配置文件(例如s3c2410_defconfig),拷贝到内核源码根目录下,命名为.config。

注意,如果你是为当前PC机编译内核,最好拷贝如下文件到内核源码根目录下,做为初始配置文件。这个文件,是PC机当前运行的内核编译时使用的配置文件。
/lib/moles/`uname -r`/build/.config
这里顺便多说两句,PC机内核的配置文件,选择的功能真是多。不编不知道,一编才知道。Linux发行方这样做的目的,可能是想让所发行的Linux能够满足用户的各种需求吧。

b) 执行make menuconfig对此配置做一些需要的修改,退出时选择保存,就将新的配置更新到.config文件中了。

Ⅵ 怎样使用新编译的内核进行启动

step 1

准备:(1). 所需的内核源码

step2:

  • 切换到源码所在的目录,make distclean 命令:删除生产的.o 和 .config 文件

  • 编译内核之前需要一份配置文件,并在此基础上修改,故借用本地/boot/config-3.13.0-24-generic配置文件,命令: cp /boot/config-3.13.0-24-generic /home/yangqi/code/linux/linux-4.2.3/.config

  • 该配置文件.config 即是对内核裁剪的配置,不用直接打开修改,系统提供menu界面修改,命令:make menuconfig (如果此命令报错,说明需要装ncurses库,安装命令:sudo apt-get install libncurses5-dev) (menu目录如下:)

Ⅶ 如何编译linux的x86内核

Gcc编译器, Linux-2.6.29内核

步骤:

(一):清除临时文件,中间文件和配置文件等(刚从网上下载下来的文件这步可省略)。

make clean

删除大多数的由编译生成的文件、但会保留内核的配置文件.config。

make mrproper

删除所有的编译生成的文件,还有内核配置文件,再加上各种备份文件。

make distclean

mrproper删除的文件,加上编辑备份文件和一些补丁文件。

(二)选择参考配置文件

使用正在运行的内核配置文件作为参考配制文件,该配置文件在/boot目录下,使用命令

cp /boot/config-2.6.18-53.el5 .config。

(三)配置内核

配置内核有如下命令:

make config:基于文件模式的交互式配置(也就是一问一答)。

make menuconfig:基于文本模式的菜单式配置(强烈推荐)。

make oldconfig:使用已有的配置文件(.config)但是会询问新增的配置选项。

make xconfig:图形化配置(需要安装图形化系统)。

make menuconfig是最为常用的内核配置方式,使用方法如下:

1、使用方向键在各选项间移动;

2、使用“Enter”键进入下一层选单;每个选项上的高亮字母是键盘快捷方式,使用它可以快速地到达想要设置的选单项。

3、在括号中按“y”将这个项目编译进内核中,按“m”编译为模块,按“n”为不选择(按空格键也可在编译进内核、编译为模块和不编译三者间进行切换),按“h”将显示这个选项的帮助信息,按“Esc”键将返回到上层选单。

内核配置通常在一个已有的配置文件基础上,通过修改得到新的配置文件Linux内核提供了一系列可供参考的内核配置文件,位于Arch/$cpu/configs

注意:要运行make menuconfig的界面需要调整终端的窗口大小,至少为80*19。

(四)编译内核

(1):make zImage

(2):make bzImage

区别:在X86平台,在zImage只能用于小于512Kd的内核(注意是X86平台)

如需获取详细编译信息,可使用:

make zImage V=1

make bzImage V=1

编译好的内核位于arch/<cpu>/boot目录下

(五)编译内核模块

使用命令make moles

内核模块编译的时间比较长,一般需要1~2小时的时间。这些模块源于使用命令make menuconfig启动的菜单型配置界面中选择<m>的项。

(六)安装内核模块

使用命令:make moles_install,完成安装后,编译好的内核模块会从内核源代码目录拷贝至/lib/moles/2.6.29目录下。

(七)制作init ramdisk

使用cd跳动linux-2.6.29/,目录的上层目录,使用命令:mkinitrdinitrd-$version $version(mkinitrd initrd-2.6.29 2.6.29)将上一步中产生的模块目录/lib/moles/2.6.29制作成initrd-2.6.29。

提示:initrd是“initial ramdisk”的缩写,initrd是在实际根文件系统可用之前挂载到系统中的一个初始根文件系统。在桌面或服务器Linux系统中,initrd是一个临时的文件系统。其生命周期很短,只会用作真实文件系统的一个桥梁。在没有存储设备的嵌入式系统中,initrd可以是永久的根文件系统。

Linux的众多发行版之所以使用initrd主要是为了在内核启动之后能够判断哪些硬件驱动需要加载,哪些不需要,文件系统有没有问题等,最终使得根分区能顺利加载。在scsi和sata设备上启动,usb启动盘,无盘服务器等都需要initrd来做判断,这样可以提高Linux内核的通用性。

(八)安装内核

由于Linux系统启动时,会从/boot目录下寻找内核文件与init ramdisk,所以需要将内核和initrd拷贝至/boot目录。使用命令:

cp initrd-2.6.29 /boot

cp linux-2.6.29/arch/x86/boot/bzImage /boot/vmlinuz-2.6.29

(九)修改/etc/grub.conf或者/etc/lilo.conf

为了让grub在启动时能提供一项我们自己制作的linux内核的选项,需要修改grub的配置文件/etc/grub.conf。(添加的代码为title My Linux(2.6.29)以下的)

注意:/etc/grub.conf实际上是/boot/grub/grub.conf的一个链接,因此真正的配置文件存在与/boot/grub目录下。

Ⅷ 如何编译内核及制作RPM包

前言

要编译自内核能各种同答案列举:
1 研究习内核源码
2 支持新硬件或者打某项内核功能
3 升级内核更新版本
4 按自要求定制优化内核功能
种种...
折腾需要理由我说面直接进入主题
编译式
编译内核种式kernel.org载选择载需要版本内核源码
:linux-2.6.32-rc1.tar.bz2载内核源码/home/user/目录进入载目录解压压缩包

#cd /home/user/
#tar -xjvf linux-2.6.32-rc1.tar.bz2

二 准备编译环境

始前首先确认面软件包已经安装(编译标普华4.0直接全部安装CD3保证条件)
* rpmdevtools
* yum-utils
fedora系统使用命令安装:
#yum install yum-utils rpmdevtools

1. rpmbuild命令工作所需目录树面命令完该操作手建立目录树
命令建立:
#rpmdev-setuptree

命令/usr/src/rpmbuild/目录目录结构(位置没则能前用户目录).

# tree /usr/src/rpmbuild/
rpmbuild/
|-- BUILD
|-- RPMS
|-- SOURCES
|-- SPECS
`-- SRPMS
面部rpmbuild环境建立rpm
3. 安装内核源码包需要依赖组件(跳步操作)

su -c 'yum-builddep kernel-.src.rpm'
4.安装内核源码系统默认目录/usr/src/neoshine:

rpm -Uvh kernel-.src.rpm

三 配置内核(config配置文件)

面介绍何解源码包并修改配置重新打包源码
1. 解源码包并打所补丁BUILD目录

cd ~/rpmbuild/SPECS
rpmbuild -bp --target=`uname -m` kernel.spec

kernel源码找:

/usr/src/neoshine/rpmbuild/BUILD/kernel-/linux-. directory

配置内核源码
1. 进入内核源码:

cd ~/rpmbuild/BUILD/kernel-2.6.$ver/linux-2.6.$ver.$arch/
2. 复制/boot/config*配置文件源码目录,config文件已经配或者其备份kernel配置文件:

cp /boot/config2.6- 2.6.$ver.$arch .config
3. 先检查kernel配置新增选项:

make oldconfig
4. 定制内核功能关闭initrd支持选项执行图形化内核配置工具:

make menuconfig
注:generic setup选项找initial RAM system and RAM disk(initramfs and initrd) support 项取消编译同确保跟文件系统应驱系统所存储器应驱都已经编译内核(否则启系统).

5. .config文件第行改面内容(注意:没行面编译报错)

# i386
6. 拷贝.configSOURCES/:

cp .config ../SOURCES/config-$arch

四 编译新内核

1. 面始准备编译新内核包
打SPEC/kernel.spec

vim SPEC/kernel.spec
改变面行内容定制自内核扩展名(fc10类):

%define buildid .
步新内核rpm包程需要编译内核源码包
使用面命令新内核源码包
rpmbuild -bb --with baseonly --without debuginfo --target=`uname -m` kernel.spec

参数说明:bb表示编译二进制包即源码包without debuginfo 表示没调试信息
target=`uname -r`表示应前平台内核包
面命令功执行完BUILD/i686目录新内核安装包

五 安装新内核

rpm -ivh kernel-$ver-$arch.rpm
步操作自安装内核boot目录安装应内核模块/lib/moles/目录并且新内核应grub引导菜单
修改grub引导菜单格式

title new kernel
kernel /boot/vmlinuz-$ver-$arch root=/dev/sdax(hdax)

注意处要使用uuid指定跟文件系统(能挂载根区导致内核死机)要再加显示相关参数(内核支持应设置看黑黑屏幕)
至禁用initrd新内核配置安装完毕

热点内容
超凡先锋配置不行怎么办 发布:2025-05-15 23:27:54 浏览:530
win7取消加密 发布:2025-05-15 23:26:37 浏览:470
不用internet打开ftp 发布:2025-05-15 23:06:00 浏览:153
sql字符串取数字 发布:2025-05-15 22:57:45 浏览:124
推荐编程课 发布:2025-05-15 22:34:12 浏览:618
表拒绝访问 发布:2025-05-15 22:29:37 浏览:978
电脑怎样解压文件 发布:2025-05-15 22:25:32 浏览:439
dns服务器怎么看 发布:2025-05-15 22:17:27 浏览:151
3dm的压缩包 发布:2025-05-15 22:09:23 浏览:662
和存储字长 发布:2025-05-15 21:54:09 浏览:515