热门标签 | HotTags
当前位置:  开发笔记 > 运维 > 正文

Linux配置与编译内核

文章标题:Linux配置与编译内核。Linux是中国IT实验室的一个技术频道。包含桌面应用,Linux系统管理,内核研究,嵌入式系统和开源等一些基本分类

  编置内核包含两大项内容,即配置内核和编译内核。这两项工作需要经常查看内核的文档,至少要查看Readme文件和Documentation目录下的Changes文件。它们对内核进行了描述,比如升级内核可能出现的问题和内核对系统中工具的版本要求等。Linux内核的编制方法下面将做具体说明。
  
  下载与解压
  首先需要将内核源码下载到/usr/src/目录下面。如果压缩格式是gzip,那么执行如下命令:
  
  #tar xzvf linux-2.4.23.tar.gz
  
  如果是bzip2格式,则执行如下命令:
  
  #tar xjvf linux-2.4.23.tar.bz2
  
  这时会建立Linux-2.4.23内核源代码树。进入该目录,并确保今后的所有操作都在这个目录下完成。
  
  配置内核
  有了要编译配置的内核,先来介绍怎么样配置内核。具体的步骤分为一下几步:
  
  1.在开始配置内核之前,首先需要通过下面的命令清除所有的临时文件、中间件和配置文件。对于一个刚从网上下载的内核来说,它肯定是干净的,这么做只会多此一举。但是这是一个良好习惯,而且不会有坏结果。
  
  #make mrproper
  
  2. 然后要了解自己系统的硬件配置情况,比如CPU的类型、主办芯片、显卡和声卡的型号等。
  
  3. 配置内核选项,用到的命令是:
  
  #make
  
  用到的配置工具有:
  ◆ config 基于交互式的文本配置界面。每个问题以线形格式出现,并被一个一个地回答,而且一旦作出了回答就不能再修改了。
  
  ◆ oldconfig 同config相似,但是使用原有的配置文件,而且只会提问有关新内核特性的问题,对于内核升级很方便。
  
  ◆ menuconfig 一个文本模式、选单驱动的配置界面。
  
  ◆ xconfig 基于Tcl/Tk的X图形配置界面。
  
  现在开始配置内核,使用的工具为menuconfig。在命令行模式下执行下面的命令:
  
  #make menuconfig
  
  在闪过几行字之后就出现了如图1所示的界面。
  

  
图1 内核配置界面

  
  使用方向键在各选项间移动;使用“Enter”键进入下一层选单;每个选项上的高亮字母是键盘快捷方式,使用它可以快速地到达想要设置的选单项。在括号中按“y”将这个项目编译进内核中,按“m”编译为模块,按“n”为不选择(按空格键也可在编译进内核、编译为模块和不编译三者间进行切换),按“h”将显示这个选项的帮助信息,按“Esc”键将返回到上层选单。
  
  注意,如果“make menuconfig”命令失败,很可能是ncurses库没有安装。
  
  内核的配置选项很多,这里就主要选项进行简要说明,使大家能根据自己的情况,进行内核定制。如果某些项把握不准,可以参考documentation/Configure.help文件,也可搜索整个系统,并查看相关的选项都在哪些文件中出现了。接下来就是个选项的配置说明情况。
  
  ◆ Loadable module support(可加载模块支持)。其中“Enable loadable module support”选项可让内核支持模块;“Module unloading”选项可以让用户卸载不再使用的模块,如果不选的话用户将不能卸载任何模块(注意,有些模块一旦加载就不能卸载,与是否选择了此选项无关);“Module versioning support(EXPERIMENTAL)”选项允许用户可以使用其它版本内核中编译的模块,不过并不可靠,所以一般不选择它;“Automatic kernel module loading”选项允许内核自动调用“modprobe”命令来加载需要的模块。
  
  模块是一小段代码,编译后可在系统内核运行时被动态地加入内核,从而为内核增加一些特性或对某种硬件进行支持。一般一些不常用到的驱动或特性可以编译为模块以缩小内核的体积。在运行时可以使用“modprobe”命令把模块加载到内核中去(在不需要时还可以卸载它)。
  
  ◆ Set version infomation on all symbols for modules(CONFIG_MODVERSIONS)是有关内核模块版本控制的选项。如果用户打算开发内核模块代码(包括当前内核源码树中之外的任何模块代码),就开启这个设置。一般的用户可以关闭。
  
  ◆(Pentium-III/Celeron(Coppermine))Processor family用来选择CPU类型。它允许内核使用高级处理器内部的特殊指令。当然,如果用户的CPU是80386,就没必要选择P4。但是如果实在不知该怎么选择,就选386。这时如果用户使用高级的CPU,内核的运行速度会比它应有的速度慢,但至少它能够运行。建议使用Help和/proc/cpuinfo获得更多的帮助。
  
  ◆ High Memory Support (CONFIG_NOHIGHMEM)使内核支持大内存。通常情况下内核只支持1GB内存(实际情况是896MB,它与vmalloc()的实现有关,这超出了我们的讨论范围)。如果用户的内存数量超过了896MB,请选择内核对4GB内存的支持,甚至64GB内存的支持。
  
  ◆ Symmetric multi-processing support(CONFIG_SMP)使内核支持多处理器。如果用户有多于一个CPU,那么一定要选这项。
  
  ◆ Maximum number of CPUs(2-32)用以选择处理器数量。对于单CPU用户来说,选多少都没有意义。
  
  ◆ General setup表示通用配置。这里可设置内核对虚拟内存的支持和为System V的进程提供通信机制;通过“Sysctl support”选项可以动态地更改一些核心参数与变量,而不需要重新启动系统。
  
  ◆ File systems(文件系统)。这里的内容很多,建议在缺省的基础上进行修改。一般需要DOS FAT(FAT16、FAT32)、VFAT,EXT3、NTFS和ISO9660(标准光盘使用的文件系统)支持。
  
  介绍完这些内核配置的主要选项,用户在根据自己的要求配置好内核之后,接下来就要编译内核。
  
  ◆ Power management options (ACPI、APM)是高级电源管理。要注意ACPI与APM不能同时使用。如果同时配置了这两者,那么在系统启动时,若发现一个可工作的ACPI设备,那么APM将被关闭,ACPI会被加载。
  
  如果想让Linux支持高级电源管理,例如软关机、系统休眠等,需要选择“Power Management support”选项;“Software Suspend(EXPERIMENTAL)”选项可以挂起计算机(类似Windows XP中的休眠),这个功能不需要高级电源管理的支持;“Processor”选项可让处理器在空闲时节省电能,应该选上;“Thermal Zone”选项在系统温度过高时,及时调整系统的工作状态,以保护CPU(需要硬件的支持)。
  
  ◆ Bus options(PCI、PCMCIA、EISA、MCA和ISA)用以设置系统总线。根据主板参数自己进行选择。针对PCI总线的是“PCI support”选项,下面还有ISA和EISA子项,一般都是需要的;“Support for hot-pluggable devices”选项是对热插拔设备的支持;“PCMCIA/CardBus support”选项支持PCMCIA。
  
  ◆ Executable file formats表示可执行文件格式,一般全要选上。
  
  ◆ Device Drivers用来选择设备驱动程序。声卡、显卡、网卡和电视卡等驱动都在这里选择。其中“Plug and Play support”选项支持即插即用;“Block devices”选项支持块设备;“SCSI device support”选项支持SCSI 设备;“Multi-device support(RAID and LVM)”选项支持RAID和逻辑卷;“Networking support”选项支持网络,包括网络协议和网络设备,协议中肯定要“TCP/IP”项,根据自己的网卡选择相应的设备;ISDN上网必需选“ISDN subsystem”选项;“Sound”选项是声卡驱动,有两种选择,一种是ALSA驱动,一种是Open Sound System驱动,选择支持自己声卡的那种,将之编译进内核;“USB Support”选项该项很重要,平常用的优盘就是一种USB设备;对USB而言,至少需要“Support for USB”、“USB device filesystem”、“ECHI HCD(USB 2.0)support”、“UCHI HCD(most Intel and VIA)support”、“USB Audio support”、“USB MIDI support”和“USB Mass Storage support”选项。
  
  执行了“make ”之后,系统会在include/linux目录下生成一个autoconf.h文件。例如,在配置内核选项时选择支持NTFS文件系统,并把它编译进了内核,那么在.config中就会生成“CONFIG_NTFS_FS=y”这项,相应的在include/linux/autoconf.h中会生成“#define CONFIG_NTFS_FS 1”这项。因此所有与NTFS文件系统相关的C源文件都会包含include/config/ntfs/fs.h这个头文件。
  
  新的2.6.0内核中增加了两个GUI配置工具,要使用xconfig必需先安装Qt库(一般发行版的光盘里都有),要使用gconfig就要先安装Gtk库。
  
  在启动配置工具时,2.6.0内核会读取当前的系统配置,从而保持与当前配置相同的选项。这个特性是为方便以后的升级工作,在内核特性变化不大的情况下可以直接以当前的选项为基础,省去了逐项配置的麻烦。有两种方法可以让2.6.0内核以默认选项来启动配置工具,一种是将当前的配置文件/boot/config-XXX删除;另一种是在执行配置工具前先执行“make defconfig”命令。
  
  除此之外,还为make添加了几个新选项,是allyesconfig、allnoconfig和allmodconfig。它们是为内核开发人员与测试人员准备的。
  
  用户根据自己的要求配置好内核之后,接下来就要编译内核。
  
  编译内核
  编译内核的软件环境是kbuild系统,它泛指构建一个完整并能够运行的Linux内核所需要的一切资源。这些资源包括构建程序、脚本、中间件、配置文件和Makefile。现在就讲解内核的编译过程,具体步骤如下:
  
  1.“make dep”或“make depend”
  
  kbuild调用中间件scripts/mkdep来生成描述与相关核心文件形成依赖关系的
推荐阅读
  • Metasploit攻击渗透实践
    本文介绍了Metasploit攻击渗透实践的内容和要求,包括主动攻击、针对浏览器和客户端的攻击,以及成功应用辅助模块的实践过程。其中涉及使用Hydra在不知道密码的情况下攻击metsploit2靶机获取密码,以及攻击浏览器中的tomcat服务的具体步骤。同时还讲解了爆破密码的方法和设置攻击目标主机的相关参数。 ... [详细]
  • 本文介绍了在Hibernate配置lazy=false时无法加载数据的问题,通过采用OpenSessionInView模式和修改数据库服务器版本解决了该问题。详细描述了问题的出现和解决过程,包括运行环境和数据库的配置信息。 ... [详细]
  • 学习SLAM的女生,很酷
    本文介绍了学习SLAM的女生的故事,她们选择SLAM作为研究方向,面临各种学习挑战,但坚持不懈,最终获得成功。文章鼓励未来想走科研道路的女生勇敢追求自己的梦想,同时提到了一位正在英国攻读硕士学位的女生与SLAM结缘的经历。 ... [详细]
  • 本文介绍了使用Java实现大数乘法的分治算法,包括输入数据的处理、普通大数乘法的结果和Karatsuba大数乘法的结果。通过改变long类型可以适应不同范围的大数乘法计算。 ... [详细]
  • HDU 2372 El Dorado(DP)的最长上升子序列长度求解方法
    本文介绍了解决HDU 2372 El Dorado问题的一种动态规划方法,通过循环k的方式求解最长上升子序列的长度。具体实现过程包括初始化dp数组、读取数列、计算最长上升子序列长度等步骤。 ... [详细]
  • 本文讨论了在Windows 8上安装gvim中插件时出现的错误加载问题。作者将EasyMotion插件放在了正确的位置,但加载时却出现了错误。作者提供了下载链接和之前放置插件的位置,并列出了出现的错误信息。 ... [详细]
  • 本文讨论了Alink回归预测的不完善问题,指出目前主要针对Python做案例,对其他语言支持不足。同时介绍了pom.xml文件的基本结构和使用方法,以及Maven的相关知识。最后,对Alink回归预测的未来发展提出了期待。 ... [详细]
  • 本文介绍了C#中生成随机数的三种方法,并分析了其中存在的问题。首先介绍了使用Random类生成随机数的默认方法,但在高并发情况下可能会出现重复的情况。接着通过循环生成了一系列随机数,进一步突显了这个问题。文章指出,随机数生成在任何编程语言中都是必备的功能,但Random类生成的随机数并不可靠。最后,提出了需要寻找其他可靠的随机数生成方法的建议。 ... [详细]
  • Win10下游戏不能全屏的解决方法及兼容游戏列表
    本文介绍了Win10下游戏不能全屏的解决方法,包括修改注册表默认值和查看兼容游戏列表。同时提供了部分已经支持Win10的热门游戏列表,帮助玩家解决游戏不能全屏的问题。 ... [详细]
  • 如何在联想win10专业版中修改账户名称
    本文介绍了在联想win10专业版中修改账户名称的方法,包括在计算机管理中找到要修改的账户,通过重命名来修改登录名和属性来修改显示名称。同时指出了windows10家庭版无法使用此方法的限制。 ... [详细]
  • 本文讨论了如何优化解决hdu 1003 java题目的动态规划方法,通过分析加法规则和最大和的性质,提出了一种优化的思路。具体方法是,当从1加到n为负时,即sum(1,n)sum(n,s),可以继续加法计算。同时,还考虑了两种特殊情况:都是负数的情况和有0的情况。最后,通过使用Scanner类来获取输入数据。 ... [详细]
  • Windows下配置PHP5.6的方法及注意事项
    本文介绍了在Windows系统下配置PHP5.6的步骤及注意事项,包括下载PHP5.6、解压并配置IIS、添加模块映射、测试等。同时提供了一些常见问题的解决方法,如下载缺失的msvcr110.dll文件等。通过本文的指导,读者可以轻松地在Windows系统下配置PHP5.6,并解决一些常见的配置问题。 ... [详细]
  • 电脑公司win7剪切板位置及使用方法
    本文介绍了电脑公司win7剪切板的位置和使用方法。剪切板一般位于c:\windows\system32目录,程序名为clipbrd.exe。通过在搜索栏中输入cmd打开命令提示符窗口,并输入clip /?即可调用剪贴板查看器。赶紧来试试看吧!更多精彩文章请关注本站。 ... [详细]
  • 本文介绍了C#中数据集DataSet对象的使用及相关方法详解,包括DataSet对象的概述、与数据关系对象的互联、Rows集合和Columns集合的组成,以及DataSet对象常用的方法之一——Merge方法的使用。通过本文的阅读,读者可以了解到DataSet对象在C#中的重要性和使用方法。 ... [详细]
  • 本文介绍了OC学习笔记中的@property和@synthesize,包括属性的定义和合成的使用方法。通过示例代码详细讲解了@property和@synthesize的作用和用法。 ... [详细]
author-avatar
chenyanni1030_430
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有