`
loamy
  • 浏览: 321430 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Linux 内核配置及编译简介

阅读更多

1.为什么要编译Linux 内核 
  众所周知,Linux是开放源码的操作系统,开放源码软件带给我们这计算机水平相对落后的人群的最大好处,就是可以快速学习世界高水平的程序(体系结构及编程方法等等),从而快速提高自身水平。然而这本身,也使多数开放源码软件在编码易用性、针对性方面比不上Microsoft等专业软件公司的产品。使用开放源码软件,多多少少都一些不太舒服的感觉。这一点想必用过Linux较早期版本的朋友都有同感。有时候还不仅是不舒服,由于软件开发者或版本的不同,我们无法保证所有的软件都能够简单地在不同的机器间移植,对于某些大型软件(如:ORACLE 8.0.5)尤其如此。许多情况下,系统状态,尤其是内核状态,对程序的安装使用和性能有至关重要的影响和制约作用。从另外的角度来讲,我们也可以为自己的计算机量身定制内核,这样就不会出现Windows 98那样的大垃圾箱了。 

2.了解Linux 
  要编译Linux的内核,首先要对它有个大概的印象。Linux是Unix的仿制品,它支持多任务、虚拟存储器,多终端,虚拟文件系统等特性。它最低可以运行在386/486的个人计算机上,其他一些体系结构的机器,如:SUN Sparc,M68000,DEC Alpha,PowerPC上也逐渐有了适用的Linux。 

3.编译内核的准备工作 
1)了解现有内核的版本号. 
这主要是为了确定一些机器的基本信息,不一定非这么做不可。可以用如下的命令行: 
$ uname -a 
Linux lark 2.2.15 #2 TUE DEC 26 10:55:20 CST 2000 i686 
2)下载最新版本的Linux内核.目前国内教育网的ftp站点这方面的内容(包括压缩的内核、补丁、编译器等)都比较丰富,更新也较快,如:http://ftp.xjtu.edu.cn/ftp/pub/linux/kernel/,ftp://166.111.136.3/pub/linux/kernel,2.2.x版本是比较稳定的,推荐使用。 
3)把打包的内核解开 
压缩的内核、补丁和解开的源代码总共要占70M左右的硬盘空间;用root登录,解开的源代码应该在/usr/src/linux2.2.15下面: 
#tar zxvf linux-2.2.15.tar.gz 
或者 
#gzip t linux-2.2.15.tar.gz 
#tar x linux-2.2.15.tar 
如果嫌命令行太麻烦的话,也可以在某台windows的机器上用winzip之类的软件解开,再用ftp或mount等方式让linux可以访问。 
4)在系统中安装gcc-2.7.2或更新的c编译包 
5)如果没有把握,就把原来的内核(在/boot下)在别的地方重新备份一个。别忘了同时备份模块(/lib/modules/2.x.x) 

4.内核编辑 
  为了使内核符合自己系统和应用程序的实际需要,一般都要对其进行某些编辑工作,主要是修改某些头文件中的若干参数。比方说,在安装Oracle 8.0.5时,为了使Oracle能够利用的内存空间与实际的物理内存容量相符,以提高性能,要修改/usr/src/linux/include/asm下的shmparam.h文件中的一些内存参数。 

5.内核配置 
  内核配置的方法很多,make config、make xconfig、make menuconfig、make oldconfig等等,它们的功能都是一样的,区别应该从名字上就能看出来,只有make oldconfig是指用系统当前的设置(./.config)作为缺省值。这里用的是make menuconfig。 
  需要牢记:不必要的驱动越多,内核就越大,不仅运行速度慢、占用内存多,在少数情况下、还会引发其他问题。具体步骤如下: 
首先确定shell是bash。 
然后 
$make menuconfig 
有一些默认的符号其含义如下: 
y:加载 
n:不加载 
m:作为模块加载 

可以配置的选项有以下一些: 
1)code maturity level option 代码成熟度 
prompt for development and/or incomplete code/drivers [N/y/?] 
如果有兴趣测试一下内核中尚未最终完成的某些模块,就选y,否则选N,想知道更详细的信息选?会看到联机帮助(以下?的含义相同),N大写表示缺省值。 

2)processor type and features 处理器类型及特性 
Processor family(386,486/Cx486,586/K5/5x86/6x86,Pentium/K6/TSC, PPro/6x86MX)[PPro/6x86MX] 
[]内的是缺省值,我们可以根据前面介绍的uname 命令执行的结果选择。此项如果高于386,那么生成的内核在386机器上将不能启动。 
Math emulation(CONFIG_MATH_EMULATION)[N/y/?] 
需要进行协处理器模拟吗?一般的机器都回n。如果机器已经有硬件的协处理器,那么内核仍将使用硬件,而忽略软件的math-emulation,这将使内核变大变慢。 
MTRR(Memory Type Range Register)support(CONFIG_MTRR)[N/y/?] 
在Pentium、Pro/Pentium II类的系统中可以提高图像写入速度。 
Symmetric multi-processing support(CONFIG_SMP)[Y/n/?] 
如果您的机器有多个处理器,就选y。此时要选中下面的Enhanced Real Time Clock Support 

3)loadable model support 可加载模块支持 
Enable loadable module support(CONFIG_MODULES)[Y/n/?] 
最好选y,不然许多仅供动态加载的模块就不能用了。 
Set version information on all symbols for modules(CONFIG_MODVERSIONS)[N/y/?] 
选N 
Kernel module loader(CONFIG_KMOD)[N/y/?] 

4)general setup 一般设置 
Networking support(CONFIG_NET)[Y/n/?] 
选y吧,现在还有几台计算机不用上网呢? 
PCI support (CONFIG_PCI)[Y/n/?] 
PCI 总线和设备总该有吧。 
PCI access mode(BIOS,Direct,Any)[Any] 
缺省值比较保险,但如果您对您的主板很有信心,就选BIOS。 
PCI quirks (CONFIG_PCI_QUIRKS)[Y/n/?] 
用于修补BIOS中对PCI有影响的BUG,同样,如果您对主板很有信心,就选n。 
Backward-compatible /proc/pci〉(CONFIG_PCI_OLD_PROC)[Y/n/?] 
以前的内核使用/proc/pci,新版内核使用/proc/bus/pci,要保持兼容性就选y。 
MCA support(CONFIG_MCA)[N/y/?] 
查看帮助吧。 
SGI Visual Workstation support(CONFIG_VISWS)[N/y/?] 
您的机器是SGI的吗?是就选y。 
System V IPC(CONFIG_SYSVIPC)[Y/n/?] 
进程间通信函数和系统调用。Linux内核的五大组成部分之一,一定要选。 
BSD Process Accounting(CONFIG_BSD_PROCESS_ACCT)[N/y/?] 
用于启动由内核将进程信息写入文件的用户级系统调用。就看您想不想用它了。 
Sysctl support(CONFIG_SYSCTL)[Y/n/?] 
在内核正在运行的时候修改内核。用8KB空间换取某种方便。别选吧,除非你真的想试试。 
Kernel support for a.out binaries(CONFIG_BINFMT_AOUT)[Y/m/n/?] 
为了能使用以前编译的程序,选y。 
Kernel support for ELF binaries(CONFIG_BINFMT_ELF)[Y/m/n/?] 
为了能使用现在编译的程序,选y。 
Kernel support for MISC binaries(CONFIG_BINFMT_MISC)[Y/m/n/?] 
一般选y,用于支持java等代码的自动执行。 
Parallel port support(CONFIG_PARPORT)[N/y/m/?] 
并口设备,如打印机。 

5)plug and play support 即插即用设备支持 
Plug and Play support (CONFIG_PNP)[N/y/?] 
选y吧。 

6)block devices 块设备 
Normal PC floppy disk support(CONFIG_BLK_DEV_FD)[Y/m/n/?] 
一般的软驱。选y。 
Enhanced IDE/MFM/RLL disk/cdrom/tape/floppy support(CONFIG_BLK_DEV_IDE)[Y/m/n/?] 
这几种接口的硬盘、光驱、磁带、软驱。选y。 
Include IDE/ATAPI CDROM support(CONFIG_BLK_DEV_IDECD)[Y/m/n/?] 
CDROM。选y。 

7)networking options 网络选项 
Packet socket (CONFIG_PACHET)[Y/m/n/?] 
按照目前网络发展的状况,选y比较好。当然也可以选其它的。 
Kernel/User netlink socke(CONFIG_NETLINK)[N/y/?]

 

内核与用户进程双向通信。选y。 
Network firewalls(CONFIG_FIREWALL)[N/Y/?] 
如果真的需要用防火墙,就选y。 
UNIX domain sockets(confgi_unix)[Y/m/n/?] 
socket 的用处太多了。选y。 
TCP/IP networking(CONFIG_INET)[Y/n/?] 
选y,理由如上一条。 
The IPX protocol (CONFIG_IPX)[N/y/m/?]
其实并没有那么多人真的需要使用或者学习IPX,所以一般选N。 
Appletalk DDP(CONFIG_ATALK)[N/y/m/?] 
选N,理由同上。 

8)SCSI support SCSI支持,SCSI low-level drives SCSI低级驱动 
根据系统中SCSI设备的实际情况选择。 

9)Networking device support 网络设备支持 
如果用LAN上网,就选择网卡; 
如果用MODEM拨号上网,就要看ISP提供那种服务了,一般都是PPP。 

10)Amateur Radio support 业余收音机支持 
这是什么我不太清楚,所以选N。 

11)ISDN subsystem ISDN子系统 
好像已经有支持ISDN的MODEM了,所以最好先看看自己的MODEM是不是这种,再做选择。 

12)Old CD-ROM dfivers (not SCSI, not IDE) 老式光驱驱动 
一般选N,因为这种设备实在很少见。 

13)Character devices 字符设备 
Virtual terminal(CONFIG_VT)[Y/n/?] 
Linux上一般可以用Alt+F1/F2/F3/F4来切换不同的任务终端,即使在一台计算机上也可以充分使用Linux的多任务能力,一些需要以命令行方式安装合适用的软件如果有虚拟终端的支持就会更方便,因此选y。 
Support for console on virtual terminal(CONFIG_VT_CONSOLE)[Y/n/?] 
选y将支持一个虚拟终端作为控制台。一般为Alt+F1。 
Support for console on serial port(CONFIG_SERIAL)[Y/m/n/?] 
除非真的需要一个串口控制台,否则选n。 
Extended dumb serial driver options(CONFIG_SERIAL_EXTENDED)[N/y/?] 
如果希望使用"dumb"的非标准特性(如HUB6支持),选y,一般选N。 
Non-standard serial port support(CONFIG_SERIAL_NONSTANDARD)[N/y/?] 
非标准串口。一般选N。 
UNIX98 PTY support(CONFIG_UNIX98_PTYS)[Y/n/?] 
PTY指伪终端,一般用户就选n。但如果想用telnet或者xterms作为终端访问主机,并且已经安装了glibc2.1,就可以选y。 
Maximum number of UNIX98 PTYs in use(0-2048)(CONFIG_UNIX98_PTY_COUNT)[256] 
缺省值就可以了。 
Mouse Support(not serial mice)(CONFIG_MOUSE)[Y/n/?] 
PS/2等非串口鼠标选y,否则选N。 

14)Mice 鼠标 
根据自己的鼠标类型选择。 

15)Video for Linux Linux视频 
根据系统中的音/视频捕捉设备选择。 

16)Joystick support 操纵杆 
根据系统中的游戏杆设备选择 

17)Ftape,the floopy tape device driver Ftape设备驱动 
Ftape (QIC-80/Travan)support(CONFIG_FTAPE)[N/y/m/?] 
如果系统中有磁带机,选y。 

18)Filesystems 文件系统 
文件系统的选择要比较仔细,因为其中的一些给某些系统功能提供支持。而且除了proc、ext2等文件系统之外,其它的文件系统(包括下面的网络文件系统)都可以选择为m方式,从而减小内核启动时的体积。 
Quota support(CONFIG_QUOTA)[N/y/?] 
用于给用户划分定量的磁盘空间。如不用此功能就选N。 
DOS FAT fs support(CONFIG_FAT_FS)[N/y/m/?] 
为内核提供FAT支持,多数用户有可能从Linux访问同一系统中的WINDOWS硬盘空间,因此最好选y。 
ISO 9660 CDROM filesystem support(CONFIG_ISO9660_FS)[Y/m/n/?] 
有标准光驱的系统应该选Y。 
Minix fs support(CONFIG_MINIX_FS)[N/y/m/?] 
用于创建启动盘的文件系统,多数应该选y或者m。 
/proc filesystem support(CONFIG_PROC_FS)[Y/n/?] 
虚拟文件系统,必须选Y。 
Second extended fs support(CONFIG_EXT2_FS)[Y/m/n/?] 
Linux标准文件系统,都应该选Y。 

19)Network file systems 网络文件系统 
Coda filesystem support (advanced network fs)(CONFIG_CODA_FS)[N/y/m/?] 
先看帮助再选。 
NFS filesystem support(CONFIG_NFS_FS)[Y/m/n/?] 
选Y或n,能够访问远程NFS文件系统。 
SMB filesystem support(to mount WfW shares etc.)(CONFIG_SMB_FS)[N/y/m/?] 
要访问WINDOWS系统中的共享资源选y。 
NCP filesystem support(to mout NetWare volumes)(CONFIG_NCP_FS)[N/y/m/?] 
如果真的需要访问NetWare文件系统,就选y或者m。 

20)Partion Types 分区类型 
一般用不上;要用请参看帮助。 

21)Console drivers 控制台驱动 
VGA text console(CONFIG_VGA_CONSOLE)[Y/n/?] 
用VGA模式下用文本方式操作Linux,一般选y。 
Video mode selection support(CONFIG_VIDEO_SELECT)[N/y/?] 
大多数系统都不需要这项功能。 

22)Sound 声音 
Sound card support(CONFIG_SOUND)[N/y/m/?] 
如果系统中安装了声卡,就选y(或者m),然后查看帮助。 

23)Kernel hacking 内核监视 
kernel hacking往往会生成非常大或者非常慢(甚至又大又慢)的内核,甚至会引起内核工作不稳定。如果一定要选,那么也最好不要选其中的"development"、"experimental"、"debugging"项。 


6.编译新内核 
在/usr/src/linux目录下执行 
1)$ Makefile 
2)$ make dep,以正确设置所有的依赖关系。 
3) $ make clean 清除所有已存在的目标文件,如果忘记做这一步,生成的内核将会非常庞大。 
4)$ make zImage / make zdisk / make bzImage / make zlilo 生成一个经过压缩的内核。如果要制作成启动盘就使用make zdisk,别忘记在a:中插一张软盘。make zlilo 把生成的内核加入LILO中,不过在最初几次编译内核时不要使用此项,以免系统因生成的内核有故障而不能启动。make bzImage用于生成超过1M的内核。不过如果您的内核真的超过了此限制,最好先看看其中有没有什么不该要的东西。 
5)如果您的内核中使用了可装卸的模块,则需要依次运行make modules和make modules_install。 


7.安装新生成的内核并设置LILO 
1)将编译生成的新内核(在/usr/src/linux/arch/i386/boot/zImage下)拷贝至/boot下。 
2)编辑LILO启动文件/etc/lilo.f,格式参考如下: 
image = /boot/zImage 
label = mylinux 
root = /dev/hda1 
read-only 
image = /boot/vmlinux 
label = linux 
root = /dev/hda1 
read-only 
3)运行LILO 
4)重新启动计算机 

分享到:
评论

相关推荐

    嵌入式linux内核配置及编译

    本资源介绍了嵌入式linux内核的配置及编译

    Linux内核编译与裁剪

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

    Linux内核配置编译分析实验

    Linux内核配置和编译的实验内容包括内核配置系统组成、内核编译流程分析、内核映像烧写以及如何在内核配置中添加编译模块等知识点。 内核配置系统由三部分组成:Makefile、配置文件和配置工具。Makefile定义了Linux...

    浅谈Linux内核的重编译

    Linux内核的重编译是一项涉及多步骤的技术活动,旨在根据特定需求调整内核配置,以支持新硬件、优化性能或增强安全性。通过了解和掌握内核源代码的组织结构以及配置、编译的流程,Linux用户能够更好地利用这一强大的...

    编译Linux内核及调试内核模块

    编译Linux内核及调试内核模块 本篇文章主要讲述了编译Linux内核及调试内核模块的过程,以帮助读者掌握编译内核调试内核模块的基本方法。下面是文章中所涉及的知识点: 1. 获取内核源码:文章中讲述了如何从网上...

    Linux内核重配置及编译.rar_linux_linux 内核_linux 配置_linux内核_linux编译内核

    在Linux系统中,内核是操作系统的核心部分,...总之,Linux内核重配置及编译是一项复杂但重要的任务,需要对系统有深入的理解。通过熟练掌握这一技能,我们可以更好地管理和优化我们的Linux环境,以适应各种应用场景。

    linux内核编译文档

    在内核配置菜单中,需要正确设置个内核选项,例如选择内核版本、CPU 类型、网络设置等。 设置关联文件 在配置内核后,需要设置关联文件。使用命令 make dep 即可完成设置操作。 编译内核 编译内核是编译过程的...

    linux内核移植配置编译详解

    Linux内核配置是通过`menuconfig`或`make xconfig`等工具进行的,它允许用户根据硬件需求选择启用或禁用内核模块。配置选项包括CPU架构、内存管理、网络协议栈、文件系统支持、设备驱动等。正确配置可以优化内核性能...

    Linux内核编译步骤

    步骤 2: 配置及编译内核 在解压缩后的源代码目录下,找到 Makefile 文件,该文件包含了整个内核树的编译信息。 Makefile 文件最上面四行是关于内核版本的信息。可以使用默认的 Makefile 配置,或者使用 "make ...

    linux 内核配置编译

    【Linux内核配置编译详解】 在Linux操作系统中,内核是系统的核心部分,负责管理硬件资源、提供系统调用接口以及实现各种服务。对于特定的硬件平台,如PowerPC架构,内核需要进行定制和编译以适应其特性。本文主要...

    Linux内核编译实验

    2. **熟悉Linux内核配置选项及其作用**:掌握如何通过配置选项来定制内核功能,理解每个选项对内核性能的影响。 3. **掌握`config.in`文件的作用**:理解`config.in`文件如何帮助用户进行内核配置,并掌握其使用方法...

    Linux内核3.0.4内核编译过程

    本文将详细介绍Linux内核3.0.4的编译过程,包括下载源代码、配置内核、编译内核、安装内核以及创建初始化磁盘(initrd)等关键步骤。 #### 二、下载与解压内核源代码 1. **下载源代码**:访问Linux内核的官方源码网站...

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

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

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

    内核配置选项是 Linux 内核编译选项中的一部分,它决定了 Linux 内核中的配置机制。其中包括: * Kernel .config support:把内核的配置信息编译进内核中,以后可以通过 scripts/extract-ikconfig 脚本来提取这些...

    linux内核配置与编译

    linux内核配置与编译

    Linux内核编译配置选项简介

    Linux内核编译配置选项是Linux操作系统中非常重要的一个部分,它决定了Linux内核在编译时将包含哪些功能。对于想要深入理解和定制Linux内核的用户来说,掌握这些配置选项是必不可少的。本文将详细介绍Linux 2.6.19.x...

    linux内核编译配置查看工具

    在Linux系统中,内核是操作系统的核心部分,它负责管理硬件资源、进程调度、内存管理等关键任务。为了实现特定的功能或...通过深入理解并实现这样的工具,可以增进对Linux内核配置的理解,并提升C编程和项目管理技能。

    Linux 内核源码编译

    `make menuconfig`中的`Kernel hacking`部分提供了设置编译选项的功能,如编译为模块(M)、编译进内核(Y)或排除编译(N)。 总的来说,Linux内核源码编译是一个复杂但极具价值的过程,它能让我们深入了解系统...

    linux内核编译实验报告

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

Global site tag (gtag.js) - Google Analytics