当前位置:  技术问答>linux和unix

怎么重编译内核,怎么定制内核。

    来源: 互联网  发布时间:2014-11-19

    本文导语:  在很多书上都提到,重编译内核,定制内核,这是怎样一个概念?一般在什么情况下要做这些操作?如何做?请兄弟们指点迷津。 | 【Linux 内核配置及编译简介】  2001-11-13 21:39  发布者:Evan 阅读次...

在很多书上都提到,重编译内核,定制内核,这是怎样一个概念?一般在什么情况下要做这些操作?如何做?请兄弟们指点迷津。

|

【Linux 内核配置及编译简介】 
2001-11-13 21:39 

发布者:Evan 阅读次数:2096  
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/?] 
并口设备,如打印机。 


    
 
 

您可能感兴趣的文章:

  • CentOS 6内核升级:下载编译启用新内核版本详细过程
  • GCC3.4可以编译2.4内核吗 如何查看某版本内核是用哪个版本gcc编译的
  • Fedora Core 2自带的内核升级程序下载下来内核后,要不要再编译一遍内核?
  • mysql iis7站长之家
  • 编译新内核后怎么进入原来内核
  • 关于如何把编译进内核的编译成模块
  • 不重新编译内核能修改内核函数吗?
  • 为什么我自己编译的内核比系统自带的内核大了10倍左右?
  • Linux 编译内核之后 没办法选择内核版本
  • 内核编译出现:没有编译规则/driver/pci/devlist.h。
  • *******是不是对内核模块编程然后再重新编译内核就可以把此模块整合到linux系统中
  • 修改内核代码问题:如何编译修改的单个文件而不用重建整个内核?
  • 想问一下,编译LINUX内核时,是否可以只编译其中的一个模块?
  • 新手的菜鸟问题:不同内核版本下编译的程序能否互相调用,是否需要在同一内核下重新编译.
  • 编译新内核时提示内核太大无法把装入软盘,如何解决?
  • 问一个小白问题,在交叉编译时,系统内核和开发板的内核有没有相关性?
  • 我现在要重新编译内核,要怎样才能保留原来的内核
  • 【求助】基于2.6.29内核编译的驱动程序能否应用于2.6.32内核的系统?
  • 何处有 Linux 内核编译配置详细的中文介绍? 我在重新配置编译时老是出错:-(
  • intel e1000网卡无法加载,内核是2.4.28,想重新编译内核,应该注意哪些步骤!
  • 请问重新编译LINUX内核是否能将没有用的外设的驱动程序删除并减少内核占有内存的资源?请好心人仕指教!
  • 救命了!谁给讲讲针对一块目标板定制和编译Linux内核的过程啊?
  •  
    本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
    本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • linux/centos源码安装nginx编译配置选项参数介绍
  • 请教:JSP编译器编译成字节码,跟别的编译器编译出来的有什么不同呢?
  • 高速的网络抓包库PF_ring介绍及编译安装
  • 编译GCC时能不能只编译C/C++的编译器?
  • 关于arm交叉编译器4.3.3编译程序报错,但是3.4.5却能编译通过的问题
  • JB下,我的程序编译得好慢!请问用什么方法编译才可以快一点?或编译顺序改变一下?
  • 请问gdb是不是只能调试gcc编译的程序,在unix下用其它编译器编译的程序是不是不一定能用gdb调试的?
  • 用JCreator写了一个小程序,有十几个class,当修改某个文件重新编译,javac并没有编译修改的文件,请问要如何做javac才会重新编译所有的
  • 问:关于gcc编译器和g++编译器
  • 嵌入式linux开发:一段代码在windows平台用VC编译运行正常,在linux平台用gcc编译运行正常,但是用arm-linux-gcc编译在嵌入式板子上运行就不正常.
  • 在cygwin编译驱动程序要不要交叉编译?
  • C编译器 c++编译器 wieldylcc
  • Linux下gcc编译时,如何以静态链接的形式编译?
  • PROC开发时 //注释编译不通过 如何设置使用cpp编译。
  • 编译失败后如何再继续编译
  • 编译qt-x11,最后编译生成可执行文件时候,make出错
  • 如何查看已编译安装软件的编译命令行
  • 请问哪里有反编译.class文件的反编译器?
  • 用Jdk编译时出现提示要加 -deprecation 再编译,请教??
  • linux下有没有能编译出16bit代码的C语言编译器?
  • 我使用.net编译通过,但是使用g++编译不能通过。总是提示我undefined reference to ~myclass()


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3