`
helloyesyes
  • 浏览: 1305999 次
  • 性别: Icon_minigender_2
  • 来自: 武汉
文章分类
社区版块
存档分类
最新评论

Linux内核编译方法

阅读更多

菜鸟编译Linux内核
双眼皮的猪
菜鸟俺,最近研究了一下Linux内核的编译,有些许心得,望同大家分享一下,故有此文…我们这里要谈的不涉及到源码,只是一些内核编译的步骤及相关知识…因为本人是菜鸟。所以,也就希望和菜鸟们分享一下…
首先,您要确定您有一台装有Linux的系统,编译内核可以在本机上直接对本机内核进行编译,也可以从网上下载内核在其基础上进行编译.我们这里详细讲一下升级内核的方法,
您可以从www.kernel.org下载到最新的Kernel版本,我们这里以RedHat9为例(其他版本其实也都一样,只是在makemenuconfig中有点不同),详细讲一下内核编译的步骤:
首先,确认您是以[color=red]root用户[/color]登陆.把内核源码cp到/usr/src目录底下(请确认您是以root的身份在进行操作,否则会返回PermissionDenied的提示):
mkdir/usr/src/linux-2.4.22
cp2.4.22.tar.bz2/usr/src/linux-2.4.22(我用的是2.4.22的kernel)
解压缩之,熟悉linux系统的朋友应该会知道:
bunzip2***.tar.bz2|tarxvf
进入到/usr/src/linux-2.4.22目录,,请确定您是在此目录下操作,而且保证您所敲入的命令是正确的,不然会返回 Noruletomaketarget***,stop类似的错误提示,这可是菜鸟们所要注意的哦。不然开头搞不好。后面就不用谈了哦…
[color=red]1#cd/usr/src/linux-2.4.22
2#makemrproper[/color]
其实这个步骤是可以不用要的,这个目的是清除原先此目录下残留的.config和.o(object文件),如果我们是刚下载的源码,那么这一步您就可以 省了:),但是如果您已经编译过多次内核的话,这一步可是一定要的哦,不然以后出现很多小问题,可别怨我没告诉你….config文件我们会在后面提到…
[color=red]3#makemenuconfig或makeconfig或makexconfig[/color]
这就开始编译内核了,打起十二分精神,编译不好,系统是无法启动的啦.小心应付,其实这个步骤还有其他两种方式,makeconfig以及 makexconfig,makeconfig是一个一个的回答问题,命令行方式,您如果回答错了一个,您就不能改正了哦(所以不推荐这种编译方 式),makemenuconfig和makexconfig提供了更友好的操作方式,不过makemenuconfig需要ncurse包,而 makexconfig也需要某个东东,好象是tk,忘记了,一般都安装了,俺就不提了,如果没有您可没法运行的哦.什么你不知道什么是ncurse和 tk是什么?那我就不说了,去www.google.com去搜索一下吧...
这里边很多东东都要注意选啊,这个要求您对硬件,软件,网络有一定的认识,实在不知道就按默认的来吧.免得以后启动不了骂天骂地都没用哦,我可是好多次启动不了,最后才摸出窍门的…
这个不是这个帖子的主题(其实我很想写的,但是没人合作,一个人写又太累,再加上我最近也忙考试,所以…)所以我们就略过哦…
在makemenuconfig中,有的让您选择[*],有的让您选择[M],有的让你选择[],*表示选中直接加载进kernel,而M则表示会在后 面的makemodules中编译成modules,让您随时可以通过insmod和modprobe调入内核…个人认为Linux的这个功能确实非常 非常的棒…而这可是其他操作系统所没有的哦...而make*config的目的就是生成.config文件.至于想知道.config文件是干啥子 的,看一下就知道了…J
这个步骤完成之后,系统会提醒您,nextstepyoushouldrun“makedep”
[color=red]4#makedep[/color](一到两分钟)
在确定要编译哪些东东之后(make*config),这个要确定依赖性,这个东东,手工也可以完成的,只是….怕您要把什么东东都放下,然后花上十天 半个月的来搞,还把您忙的焦头烂额,还会出错,不过我们用这条指令就可以完成了,也就不用麻烦您那么忙着搞了,呵呵,这个确定依赖性以后,然后就要清除一 些东东了…
[color=red]5#makeclean[/color](少于一分钟)
清除一些不必要的文件,那些乱七八糟的东东是可能会导致您在编译过程中出现错误的哦,一定要做哦…
[color=red]6#makebzImage[/color](15分钟左右)-
哦,这个可是最最最重要的啦.这个就是生成您的新核心了,不要告诉我您不知道核心是什么啊,也就是kernel啦,所有的系统硬件软件交互都靠它了哦..

其实可以是makezImage的,但是你要确保您所编译的这个新内核在640K之下,您就可以使用makezImage,如果比640K大,那就要 用makebzImage,您要说没编译出来咋知道多大呢?我的看法是建议用bzImage,因为我编译出来的内核一般都是800~900K左 右.…,本帖子也是为我一样的菜鸟所写,所以...咱们就默认makebzImage…
还要注意哦,这段时间你是没法做事的,你会看见屏幕上一行一行的字往下跑,不用担心哦,你可以选择把这些标准输出上的东东都重定向到/dev/null去 哦,这样您就看不到这些东东了,当然,你也可以把它放在背景执行啊,在运行要开始的时候在后面加上一个&符号,这个表示是后台运行…如果您怕这些 会对您编译内核有什么影响(其实没什么影响哦),那您干脆就这样,按Alt+F2,直接打开另一个虚拟终端,在那里边做事,等到编译完的时候。机器会咚的 一声通知您的哦,您要真不想等的话,就去玩会吧,听听歌什么的,过会再回来,这里可是考验您耐心的时候哦,如果这您都没耐心,那后面还有个耗时的步骤哦, 还是忍忍吧,为了不让系统浪费资源,你还是忍忍哦,成功后您一定会很高兴的…
假如您的内核现在已经编译好了,当然越小越好哦J,这时候系统会有个提示编译后的bzImage放到哪里去了,提示最后几行,已经告诉了您的新编译出的核 心位置啊,一般都在这里哦(我这里是RedHat9),/usr/src/linux-2.4.22/arch/i386/boot/,这时候您要做的就 是把它放到/boot目录底下去哦,不然系统可没法启动的…
#cp/usr/src/linux-2.4.22/arch/i386/boot/bzImage/boot/vmlinuz-2.4.22
(这里其实已经把bzImage更名为vmlinuz-2.4.22,呆会在/boot/grub/grub.conf里就指定这个新内核)

[color=red]7#makemodules[/color](耗费时间取决于您所选择编译为modules的数量)
哇哇,又一个耗费时间的步骤来了,您还是找点什么做做吧,估计也要好久哦,大概20分钟吧,这个步骤就是把您在makemenuconfig里边所选择 为M的东东,全部编译成模块并放在/usr/src/linux-2.4.22/下…如果你选择的M比较多的话,还是…去玩会吧,家务没做啊?功课没做啊 什么的?不过如果您比较喜欢把所有东东都编进内核的话,那就不需要多长时间,少选一些为M,这样很快就可以完成,我的只用了一分钟就完成了,不过如果您有 很多不知道而选择默认的话,那恐怕就要好花时间了...
[color=red]8#makemodules_install[/color]
hoho,这里可是安装module的步骤了,您所选择的模块编译完成后都放在/usr/src/linux-2.4.22某子目录下,哪个子目录您看一 下就知道了,makemodules之后会有提示的..我也忘记了,呵呵:),这多不好,而insmod以及相关指令都是从/lib/modules /linux-2.4.22下取module的啊,这个指令就是把编译好的mod放到/lib/modules下去的哦,如果开始没有Linux- 2.4.22目录,(也就是说您是第一次编译2.4.22的内核),那么这条指令就会自动创建该目录,如果已经有了。那就会把编译后的内核放进该目录… 您以后要把mod调进kernel的时候(insmod,modprobe)都从这里寻找.o的哦…
[color=red]注意[/color]哦,如果你用的是SCSI硬盘并且采用的是ext3分区格式的话,请注意,您一定要制作 initrd.img(因为SCSI卡的驱动包括在这个里边),如果你使用的是IDE硬盘,您可以跳过这一步,当然,您要是有耐心的话,这里学习一下也没 什么坏处哦
mkinitrd可以制作initrd.img,一般是这么使用的,如果想具体了解的话,可以manmkinitrd,如果只想搞个 initrd.img出来的话,那就mkinitrd/boot/initrd-custom.img2.4.22就在/boot目录下创建了一个 initrd-custom.img文件,也就是初始化镜像…(initialedramdisk)…里边主要有一些驱动,因为放在内核中就显得过大, 所以编译进initrd.img,在启动中释放…而这个2.4.22就表示/lib/modules下面的2.4.22目录了…
到这里,[color=olive]以下就有两种做法哦…[/color]
[color=olive]一手动更新System.map文件[/color]
它是当前正在运行的kernel的fuctions的说明,如果您编译内核后不更新System.map,如果碰到问题.,Troubleshooting就很困难了哦,您可有可能遇见很多烦人的信息哦,所以我们还是手动更新一次哦,也蛮简单的…
#cp/usr/src/linux-2.4.22/System.map/boot/System.map
系统会提示您:
Overwritethe‘boot/System.map’
敲入Y,回车
[color=olive]二makeinstall[/color]
说到makeinstall我们这里又有点话要说哦,makeinstall就相当于一个自动化的过程啦,因为其他东东它都会帮您做好的,如果您确实 比较懒,或者已经对前边的步骤已经很没耐心了,您就直接执行此步骤吧…当然您可以很快做好新系统了,而且可以重新从新内核启动哦,但是您可能对这中间发生 的事情就不明白了哦,小时侯上课的时候老师谈什么要授之以渔,而不要授之以鱼,没办法。您要是觉得麻烦,俺就省了,俺手还觉得累,呵呵:)
还是谈谈这个过程吧,这期间,系统会把您的当前release版本号后面加上一个custom然后写到grub.conf里边去,重新启动后您就可以看到2.4.22custom的选单了…
至于这个文件名是怎么决定出来的呢?您可以看一看/usr/src/linux-2.4.22哦,里边有个Makefile,您试一下
#head–n5Makefile
相信你已经看出来了吧…这也就是命名的原因啦,于是您也可以自己修改您的Linux哦…自己custom一下release名称岂不爽哉…
从以上步骤来看,基本上已经没有什么问题了,当然,请确认您在makemenuconfig里边没有做过任何错误的事情哦,不然重新启动后,依然引导不 了的,譬如fs里边一定要选中VFS,EXT3编译为M,因为现在系统一般都采用了ext3格式,您要是漏掉这个东东,加载不了分区,可别怨我没告诉你 哦,当然secondextendedfs更是一定要选啦:)
我在编译的历史中曾经有VFS:Unabletomountrootfson00:00的经历,一直卡在那里,好久都没解决啊,不过后来终于发现应该是fs的问题,或者是您的root分区没指定好啊..
看了这么多。相信您也很累了,帖子也快到头了,因为马上就要完了…(如果上边您选择了makeinstall,这里您就不用看了哦)最最最最后一点,我 们要修改Grub.conf(如果您采用的是grub来引导的话,抱歉我不懂lilo,因为我也是菜鸟…),使系统在重新启动后可以从新的内核启动…
#vi/boot/menu.lst
menu.lst跟grub.conf内容是一样的哦,是个link,不过这里边可是彩色的文字,我很喜欢,就编辑它了..
在原来的基础上添加一行:
titlenewLinux(2.4.22)//这里您可以自己命名,也就是出现在grub启动菜单里的东东哦
kernel/vmlinuz-2.4.22roroot=LABEL=/
上边这行是指定kernel的路径,记得我们前边生成一个vmlinuz-2.4.22的新内核吗?对了哦,就是它了…这里指定为它后,在您选择以这个选项启动后,就会起用这里的新内核了.
后面跟着的ro表示是readonly,就是只读的意思咯,root=LABEL=/是指定路径
initrd/initrd.img
这里要指定为您所制作的initrd.img哦,如果这个制作错误的话,可启动不了的哦…当然,这说的是您使用的是SCSI硬盘,如果是IDE硬盘的话。 您可以在这里写上noinitrd取代,这样系统就不会使用intird啦,当然这个最好还是带着吧,前边我们也讲了它的作用了,主要还是一些驱动…. 以及系统初始化的程序…
好了,就到这里了…假如您有什么疑问,在下面跟贴讨论啊:)
本来要有好长的,但是实在因为考试太多…又要忙着毕业…所以简短的完成…对不住哦…有问题请发MAIL到newjintao@yahoo.com.cn讨论吧…

ps:如果谁有兴趣把makemenuconfig的全过成以及详细解释写出来,那就最好了….
这个实在写的太菜….等偶进一步完善….有什么错误请大家斧正,谢谢...

分享到:
评论

相关推荐

    linux内核编译原理

    linux内核编译2.6.39linux内核编译2.6.39linux内核编译2.6.39linux内核编译2.6.39linux内核编译2.6.39linux内核编译2.6.39linux内核编译2.6.39linux内核编译2.6.39linux内核编译2.6.39linux内核编译2.6.39linux内核...

    Zynq 7000 Linux内核编译方法

    以上步骤,从安装内核源码到最终编译出可引导的内核映像,为Zynq 7000 Linux内核编译的完整过程。需要注意的是,这些步骤可能需要根据实际的操作系统和开发环境做适当调整。对于初次尝试编译Linux内核的用户来说,...

    Linux内核编译与裁剪

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

    编译linux内核的方法.pdf

    ### 编译Linux内核的方法:详尽指南 #### 核心知识点概览: 1. **编译环境的搭建**:包括安装必要的编译工具、库文件和配置工具。 2. **内核源代码的获取**:通过Ubuntu的源安装或从`kernel.org`下载最新内核版本...

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

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

    at91sam9260的linux内核编译详解

    ### at91sam9260的Linux内核编译详解 #### 一、引言 在嵌入式系统开发领域,对特定硬件平台进行Linux内核编译是一项至关重要的技能。本文将详细介绍如何为at91sam9260-ek开发板编译Linux内核,帮助读者掌握这一过程...

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

    Linux 内核编译选项解析 Linux 内核编译选项是 Linux 内核编译过程中的一个重要步骤,它决定了 Linux 内核的功能和性能。本文将对 Linux 内核编译选项进行详细的解析,以帮助读者更好地理解 Linux 内核编译选项的...

    linux内核编译文档

    Linux 内核编译文档 本文档旨在为 Linux 新手提供一个详细的 Linux 内核编译指南,帮助他们从基础开始学习 Linux 系统。编译内核对于 Linux 新手来说可能有一些困难,但通过本文档的指导,读者可以轻松地完成内核...

    Linux内核编译步骤

    Linux 内核编译步骤 Linux 内核编译是一个复杂的过程,需要了解 Linux 内核的结构和编译过程。下面是 Linux 内核编译的详细步骤: 步骤 1: 下载 Linux 内核源代码 在编译 Linux 内核之前,需要下载 Linux 内核的...

    linux内核编译各个选项的含义[参照].pdf

    Linux 内核编译选项详解 Linux 内核编译选项是 Linux 内核编译过程中的一个重要步骤,其中包含了许多选项,用于控制内核的行为和功能。在本文中,我们将详细介绍 Linux 内核编译选项的含义和作用。 代码成熟度选项...

    Linux内核编译实验

    ### Linux内核编译实验知识点概述 #### 一、实验目的 本次实验旨在通过实践学习以下内容: 1. **理解Linux内核源代码的目录结构及其各目录的主要功能**:通过对Linux内核源代码目录的深入研究,了解不同目录的作用...

    带Xen虚拟化技术支持的Linux内核定制编译.pdf

    文章作者提出的方法是,首先利用常规的Linux内核编译方法生成一个内核配置文件,然后将这个配置文件作为参考,修改Xen源代码包中对应平台的配置文件。这样做可以确保新编译的内核不仅包含Xen的支持,还能适应特定的...

    linux内核编译实验报告

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

    linux内核编译工具Bochs

    linux内核编译工具Bochslinux内核编译工具Bochslinux内核编译工具Bochslinux内核编译工具Bochslinux内核编译工具Bochslinux内核编译工具Bochslinux内核编译工具Bochslinux内核编译工具Bochslinux内核编译工具...

    基于Arm的Linux内核编译指导及bootloader

    为了使这些设备运行Linux操作系统,我们需要理解Linux内核编译过程以及bootloader的工作原理。本篇文章将深入探讨这两个关键知识点。 首先,让我们从Linux内核编译开始。Linux内核是操作系统的核心部分,它负责管理...

    Linux内核编译命令

    ### Linux内核编译命令详解 #### 一、概述 Linux内核是开源操作系统的核心部分,负责管理和协调硬件资源以及为应用程序提供服务。对于开发者来说,掌握如何编译Linux内核至关重要,因为这能帮助他们根据特定需求...

    linux内核编译.pdf

    linux内核编译.pdf

    Linux内核编译全过程详解

    ### Linux内核编译全过程详解 #### 一、前言 在深入了解Linux内核编译的过程中,我们将聚焦于kernel 2.6.7版本,并详细阐述整个编译流程中的关键步骤与注意事项。对于想要深入了解Linux内核工作原理及定制化需求的...

Global site tag (gtag.js) - Google Analytics