LINUX内核编译步骤.doc_第1页
LINUX内核编译步骤.doc_第2页
LINUX内核编译步骤.doc_第3页
LINUX内核编译步骤.doc_第4页
LINUX内核编译步骤.doc_第5页
已阅读5页,还剩2页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

-make all & make module_isntall & make install顺序需要记住,每个步骤做的什么,以及生成的文件是什么,以及最后修改grub.conf文件需要记住。1 Linux内核结构首先我们介绍一下Linux 内核的结构,Linux内核主要由五个部分组成:进程调度,内存管理,虚拟文件系统,网络接口,进程间通信。1.1 进程调度(SCHED):控制进程对CPU的访问。当需要选择下一个进程运行时,由调度程序选择最值得运行的进程。可运行进程实际上是仅等待CPU资源的 进程,如果某个进程在等待其它资源,则该进程是不可运行进程。Linux使用了比较简单的基于优先级的进程调度算法选择新的进程。1.2 内存管理(MM)允许多个进程安全的共享主内存区域。Linux 的内存管理支持虚拟内存,即在计算机中运行的程序,其代码,数据,堆栈的总量可以超过实际内存的大小,操作系统只是把当前使用的程序块保留在内存中,其余 的程序块则保留在磁盘中。必要时,操作系统负责在磁盘和内存间交换程序块。内存管理从逻辑上分为硬件无关部分和硬件有关部分。硬件无关部分提供了进程的映 射和逻辑内存的对换;硬件相关的部分为内存管理硬件提供了虚拟接口。1.3 虚拟文件系统(Virtual File System,VFS)隐藏了各种硬件的具体细节,为所有的设备提供了统一的接口,VFS提供了多达数十种不同的文件系统。虚拟文件系统可以分为逻辑文件 系统和设备驱动程序。逻辑文件系统指Linux所支持的文件系统,如ext2,fat等,设备驱动程序指为每一种硬件控制器所编写的设备驱动程序模块。1.4 网络接口(NET)提供了对各种网络标准的存取和各种网络硬件的支持。网络接口可分为网络协议和网络驱动程序。网络协议部分负责实现每一种可能的网络传输协议。网络设备驱动程序负责与硬件设备通讯,每一种可能的硬件设备都有相应的设备驱动程序。1.5 进程间通讯(IPC) 支持进程间各种通信机制。2为什么要升级内核从字面意思我们可以看出,Linux的内核承担着Linux操作系统的最为核心的任务,是其它程序和硬件等运行过程中的仲裁者:它要管理所有进程的内存,保证它们都能平等得到处理器的时隙。此外,它还提供程序和硬件之间的接口等功能。通常,更新的内核会支持更多的硬件,具备更好的进程管理能力,运行速度更快、更稳定,并且一般会修复老版本中发现的许多漏洞等,经常性地选择升级更新的系统内核是Linux使用者的必要操作内容。一般,内核的版本序列号使用三个数字表示,如2.4.8,版本号越高表示功能越强。版本号分为两个系列:一种是产品系列,以偶数命名,例如, 1.2.x、2.0.x、2.2.x等,运行稳定,已经经过较为周密的测试;另外一种是开发测试系列,以奇数命名,用以进行最新功能的测试,不建议初学者 和生产过程中使用。3.让我们开始行动 3.1 利其器,首先我们的准备好要用的工具,有如下四个 module-init-tools mkinitrd lvm2 device-mapper 可以用rpm -qa *来查询,如果是fc8的话应该已经安装好了,版本嘛,不要太老的过分就好了 3.2下载你需要的内核源码 /pub/linux/kernel/v2.6/这里面找去吧 要查看你自己的版本可以uname -r 3.3处理源码 1#cd/usr/src(进入到/usr/src目录下,如果已经在/usr/src目录下,可不执行该命令) #rmrflinux(删除linux文件夹。值得一提的是,如果内核先前从未编译过,则没有这个文件夹,此 命令行可略过) #tarjvxflinux-4.tar.bz2(解压新内核) #ln-slinux-4 linux(重新生成linux文件夹) Linux系统的核心代码存放于目录/usr/src/linux,实际上,该目录是一个链接,指向当前所用的核心版本的 目录,例如如果当前使用的版本是 2.4,则该核心的实际目录应该是: /usr/src/linux2.4,而新下载的内核中的目录是linux,这样,直接在/usr/src下解包会导致原来的内核目录被覆盖。所以稳妥 的做法是,首先删除链接linux,然后解包、更名、重新链接。在解包前要确认在/usr/src目录下没有叫linux的目录,或者不再想保留该目录。 2配置内核选项。有点繁琐,希望一次成功哦。#cdlinux-4 (进入到/usr/src/linux-4目录下)#makemrproper(该命令可确保源代码目录下没有不正确的.o文件)#makemenuconfig(配置内核各选项)此时会出现一个图形界面,列出了所有的内核配置选项,有的选项下还有子选项,你可以用方向键来选择,用Y键来确定。经过我多次试验,大多数选项默认就行,以下几个选项必须选择(请认真核对下面每一个选项,否则编译很有可能前功尽弃):(1)LoadableModulesupport选项中,选上“Moduleunloading”和“Automatickernelmoduleloading”这两项;(2)DeviceDrivers-BlockDevices中选上“Loopbackdevicesupport”;DeviceDrivers-Multi-devicesupport(RAIDandLVM)处要选上“devicemappersupport”;DeviceDrivers-Graphicssupport,一定要选上“Supportforframebufferdevices”;DeviceDrivers-USBsupport-选上“USBMassStoragesupport”(如果是在实环境中,想要更多USB支持,就全选吧。我的是在虚拟机中,用不着了)DeviceDrivers-;Networkdevicesupport-Ethernet(10or100Mbit)-AMDPCnet32PCIsupport(3)Filesystem-(以下9个选项是关于ext2和ext3文件系统配置,全部选上)SecondextendedfssupportExt2extendedattributesExt2POSIXAccessControlListsExt2SecurityLabelsExt3journallingfilesystemsupportExt3extendedattributesExt3POSIXAccessControlListsExt3SecurityLabelsJBB(ext3)debuggingsupportFilesystem-DOS/FAT/NTFilesystems-选上“NTFSfilesystemsupport”;注意:ext2和ext3文件系统配置很重要,也是必需的,如果对Ext3、Ext2文件的支持直接编译进内核,在你reboot时机器就会当掉,出现如下错误信息:kernelpanic:noinitfound,trypassinginit=optiontokernel.或者是:VFS:Cannotopenrootdevicehdxyorunknow-block(0,0)Pleaseappendacorrectroot=bootoptionkernelpanic:VFS:Unabletomountrootfsonunknown-block(0,0)或者是:mount:error19mountingext3pivotroot:pivot_root(/sysroot,/sysroot/initrd)failed:2umount/initrd/procfail:2Freeingunusedkernelmemory:244kfreedKernelpanicnotsyncing:Noinitfound.Trypassinginit=optiontokernel(我的机器就是在重启之后出现第三种错误,进不去系统,郁闷死,只好重装了如果依照本文做完所有步骤,当你重启Linux系统后,若不幸进不去2.6.18内核,你会发现你的出错信息就是上面三种了哈!)(4)如果你在vmware下编译内核,硬盘用的是scsi的,以下三个选项必选:DeviceDrivers-SCSIdevicesupport(此项不选的话,下面两项就选择不上)DeviceDrivers-SCSIdevicesupport-SCSIdisksupportDeviceDrivers-SCSIdevicesupport-SCSIlow-leveldrivers-;BusLogicSCSIsupport 注:1.内核的配置Linux当前支持的CPU类型包括x86、ARM、DEC Alpha、SUN Sparc、M68000、MIPS、PowerPC等,应该说上述类型已经包括绝大多数用户使用的CPU型号。在安装与配置过程中,Linux会自动识别这些型号。通常要运行的第一个命令是:cd /usr/src/linux;make mrproper。确保源代码目录下没有不正确的.o文件以及文件的互相依赖。接下来的内核配置过程比较烦琐,但是配置的适当与否与日后Linux的运行直接相关,有必要了解一下一些主要的且经常用到的选项的设置。2.6内核配置包括:#make config (基于文本的最为传统的配置界面)#make menuconfig (基于文本选单的配置界面)#make xconfig (基于图形窗口模式的配置界面)#make oldconfig (如果只想在原来内核配置的基础上修改一些小地方,会省去) #ALSA:从2.4版本到2.6版本的升级,这就要使用到ALSA(Advanced Linux Sound Architecture即:新的 Linux 音频体系结构)。它取代了OSS(Open Sound System)。配置内核时,选定ALSA的OSS API效法选项(SND_OSSEMUL、SND_MIXER_OSS和SND_PCM_OSS)和适当的声音驱动(PCI 驱动)。最后,下载和安装最新的alsa-lib和alsa-utils。进行配置时,大部分选项可以使用其缺省值,只有小部分需要根据用户不同的需要选择。例如,如果需要内核支持DOS分区的文件系统,则要在文件系统部分选择FAT或DOS系统支持;系统如果配有网卡、PCMCIA卡等,需要在网络配置中选择相应卡的类型。选择相应的配置时,有三种选择,它们分别代表的含义如下:“Y” 将该功能编译进内核“N” 不将该功能编译进内核“M” 将该功能编译成可以在需要时动态插入到内核中的模块。将与核心其它部分关系较远且不经常使用的部分功能代码编译成为可加载模块,有利于减小内核的长度,减小内核消耗的内存,简化该功能相应的环境改变时对内核的影响。许多功能都可以这样处理,例如像上面提到的网卡的支持、对FAT等文件系统的支持。 3开始编译 在/usr/src/linux-4目录下,执行以下命令即可编译。编译需要一段时间,给自己倒杯茶耐心等候吧!#makedep(建立编译时所需的从属文件。注意:如果内核从未编译过,此步可跳过)#makeclean(清除内核编译的目标文件。注意:如果内核从未编译过,此步可跳过)#makebzImage(注意大小写。这一步才是真正编译内核) 内核编译成功后,会在/usr/src/linux/arch/i386/boot目录中生成一个新内核的映像文件bzImage。如果用 makezImage编译,内核很大的话,系统会提示你使用makebzImage命令来编译,所以我直接用makebzImage来编译。#makemodules(编译可加载模块)#makemodules_install(安装可加载模块)安装成功后,系统会在/lib/modules目录下生成一个4子目录,里面存放着新内核的所有可加载模块。#makeinstall(安装新内核)上面的命令make install将: (1)把压缩内核映象拷贝到/boot目录下, 并创建相应的System.map符号链接; (2)修改bootloader的配置文件; (3)调用mkinitrd程序创建内核的initrd映象. 对于GRUB而言, 将在/boot/grub/grub.conf配置文件增加如下类似的配置行: title Red Hat Linux (2.6.4) root(hd0, 1) kernel /boot/vmlinuz-2.6.4 ro root=LABEL=/ initrd /boot/initrd-2.6.4.img 不幸的是, 新内核并不识别root=LABEL=/这个启动参数. 如果现在你就重新启动新内核的话, 将发生kernel panic错误. 因此, 必需把这个root=LABEL=/启动参数去掉, 就OK了.注意:makeinstall的时候可能会出现如下错误信息:NomoduleBusLogicfoundforkernel2.4.12mkinitrdfailed此问题一般只出现在SCSI硬盘VMWARE+REDHAT架构中,因为BusLogic被编译进了内核而不是一个module的形式(2.4内核的Buslogic模块即使静态编译进内核也不行)。解决方式是直接将BusLogic.o文件复制过去:#cp/usr/src/linux-4/drivers/scsi/BusLogic.o/lib/modules/4/kernel/drivers/scsi不过别忘记,复制过后再执行一下makeinstall。 注:配置完内核,接下来需要对内核源代码文件的依赖性和完整性进行检验,并且进行编译,此时要保证系统所使用的gcc版本在gcc2.95.3以上:make clean (确保所有有关文件都处于最新版本状态)make zImage (编译压缩形式的内核)在需要内核支持较多的外设和功能时,内核可能变得很大,此时可以编译大内核:make bzImage如果选择了可加载模块,编译完内核后,要对选择的模块进行编译:make modules (编译选择的模块)make modules-install (将编译后的模块转移到系统标准位置) 模块在系统中的标准目录位于/lib/modules/x.y.z,后面的x.y.z是版本号,为安全起见,在运行make modulesinstall之前最好对/lib/modules进行备份。模块通常是带有扩展名.o的文件,使用命令lsmod可以对当前内核的模 块进行列表。 4启动新内核 将新内核和System.map文件拷贝到/boot目录下,依次执行以下命令:#cp/usr/src/linux-2.6.18/arch/i386/boot/bzImage/boot/vmlinuz-2.6.18#cp/usr/src/linux-2.6.18/System.map/boot/System.map-2.6.18#cd/boot(进入boot目录)#rmrfSystem.map(删除原来的连接)#lnsSystem.map-2.6.18System.map(重新建立连接) 修改Grub启动管理器如果没有错误的话,下面开始修改grub配置文件(不要告诉我你用的lilo)在/boot目录下,执行以下命令:#new-kernel-pkg-mkinitrd-depmod-install2.6.18(这时候你的/boot下会生成一个i

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论