19岁无挡漫画:菜鸟编译Linux内核

来源:百度文库 编辑:偶看新闻 时间:2024/05/05 15:13:02
    • Linux小组
    • Linux论坛
    • Linux交友
    • Linux教程
    • MeeGo
    • 搜索
  -
  • Linux宝库
  • Linux教程
  • Linux
  • Linux编程
  • kernel
  •  
  • 12/31
  • 2008
  • 菜鸟编译Linux内核
  • 分类:kernel | Linux  作者:Linux宝库  来自:Linux宝库  发布时间:2008年12月31日
您是本文第8359位读者 本文来自:Linux宝库 -- http://doc.linuxpk.com/1162.html
如有不明白之处,欢迎参加社区讨论 -   菜鸟俺,最近研究了一下Linux内核的编译,有些许心得,望同大家分享一下,故有此文…我们这里要谈的不涉及到源码,只是一些内核编译的步骤及相关知识…因为本人是菜鸟。所以,也就希望和菜鸟们分享一下…

  首先,您要确定您有一台装有Linux的系统,编译内核可以在本机上直接对本机内核进行编译,也可以从网上下载内核在其基础上进行编译.我们这里详细讲一下升级内核的方法,

  您可以从www.kernel.org下载到最新的Kernel版本,我们这里以RedHat9为例(其他版本其实也都一样,只是在make menuconfig中有点不同),详细讲一下内核编译的步骤 :

  首先,确认您是以root 用户登陆.把内核源码cp到/usr/src目录底下(请确认您是以root的身份在进行操作,否则会返回Permission Denied的提示):

  mkdir /usr/src/linux-2.4.22

  cp 2.4.22.tar.bz2 /usr/src/linux-2.4.22 (我用的是2.4.22的kernel)

  解压缩之,熟悉linux系统的朋友应该会知道:

  bunzip2 ***.tar.bz2 | tar xvf

  进入到/usr/src/linux-2.4.22目录,,请确定您是在此目录下操作,而且保证您所敲入的命令是正确的,不然会返回No ruleto make target ***,stop类似的错误提示,这可是菜鸟们所要注意的哦。不然开头搞不好。后面就不用谈了哦…

  1#cd /usr/src/linux-2.4.22

  2#make mrproper

  其实这个步骤是可以不用要的,这个目的是清除原先此目录下残留的.config和.o(object文件),如果我们是刚下载的源码,那么这一步您就可以省了:),但是如果您已经编译过多次内核的话,这一步可是一定要的哦,不然以后出现很多小问题,可别怨我没告诉你….config文件我们会在后面提到…

  3#make menuconfig或make config或make xconfig

  这就开始编译内核了,打起十二分精神,编译不好,系统是无法启动的啦.小心应付,其实这个步骤还有其他两种方式,make config以及makexconfig,makeconfig是一个一个的回答问题,命令行方式,您如果回答错了一个,您就不能改正了哦(所以不推荐这种编译方式),makemenuconfig和make xconfig提供了更友好的操作方式,不过make menuconfig需要ncurse包,而makexconfig也需要某个东东,好象是tk,忘记了,一般都安装了,俺就不提了,如果没有您可没法运行的哦.什么你不知道什么是ncurse和tk是什么?那我就不说了,去www.google.com去搜索一下吧...

  这里边很多东东都要注意选啊,这个要求您对硬件,软件,网络有一定的认识,实在不知道就按默认的来吧.免得以后启动不了骂天骂地都没用哦,我可是好多次启动不了,最后才摸出窍门的…

  这个不是这个帖子的主题(其实我很想写的,但是没人合作,一个人写又太累,再加上我最近也忙考试,所以…)所以我们就略过哦…

  在makemenuconfig中,有的让您选择[*],有的让您选择[M],有的让你选择[],*表示选中直接加载进kernel,而M则表示会在后面的makemodules中编译成modules,让您随时可以通过insmod和modprobe调入内核…个人认为Linux的这个功能确实非常非常的棒…而这可是其他操作系统所没有的哦. ..而make*config的目的就是生成.config文件.至于想知道.config文件是干啥子的,看一下就知道了…J

  这个步骤完成之后,系统会提醒您,next step you should run “make dep”

  4#make dep (一到两分钟)

  在确定要编译哪些东东之后(make*config),这个要确定依赖性,这个东东,手工也可以完成的,只是….怕您要把什么东东都放下,然后花上十天半个月的来搞,还把您忙的焦头烂额,还会出错,不过我们用这条指令就可以完成了,也就不用麻烦您那么忙着搞了,呵呵,这个确定依赖性以后,然后就要清除一些东东了…

  5#make clean (少于一分钟)

  清除一些不必要的文件,那些乱七八糟的东东是可能会导致您在编译过程中出现错误的哦,一定要做哦…

  6#make bzImage(15分钟左右)-

  哦,这个可是最最最重要的啦.这个就是生成您的新核心了,不要告诉我您不知道核心是什么啊,也就是kernel啦,所有的系统硬件软件交互都靠它了哦..

  其实可以是make zImage的,但是你要确保您所编译的这个新内核在640K之下,您就可以使用makezImage,如果比640K大,那就要用makebzImage,您要说没编译出来咋知道多大呢?我的看法是建议用bzImage,因为我编译出来的内核一般都是800~900K左右.…我是菜鸟,本帖子也是为我一样的菜鸟所写,所以. ..咱们就默认make bzImage…

  还要注意哦,这段时间你是没法做事的,你会看见屏幕上一行一行的字往下跑,不用担心哦,你可以选择把这些标准输出上的东东都重定向到/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里就指定这个新内核)

  7#make modules(耗费时间取决于您所选择编译为modules的数量)

  哇哇,又一个耗费时间的步骤来了,您还是找点什么做做吧,估计也要好久哦,大概20分钟吧,这个步骤就是把您在makemenuconfig里边所选择为M的东东,全部编译成模块并放在/usr/src/linux-2.4.22/下…如果你选择的M比较多的话,还是…去玩会吧,家务没做啊?功课没做啊什么的?不过如果您比较喜欢把所有东东都编进内核的话,那就不需要多长时间,少选一些为M,这样很快就可以完成,我的只用了一分钟就完成了,不过如果您有很多不知道而选择默认的话,那恐怕就要好花时间了. ..

  8#make modules_install

  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的哦…

  注意哦,如果你用的是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目录了…

  到这里,以下就有两种做法哦…

  一 手动更新System.map文件

  它是当前正在运行的kernel的fuctions的说明,如果您编译内核后不更新System.map,如果碰到问题.,Trouble shooting就很困难了哦,您可有可能遇见很多烦人的信息哦,所以我们还是手动更新一次哦,也蛮简单的…

  #cp /usr/src/linux-2.4.22/System.map /boot/System.map

  系统会提示您:

  Overwrite the ‘boot/System.map’

  敲入Y,回车

  二 make install

  说到make install我们这里又有点话要说哦,makeinstall就相当于一个自动化的过程啦,因为其他东东它都会帮您做好的,如果您确实比较懒,或者已经对前边的步骤已经很没耐心了,您就直接执行此步骤吧…当然您可以很快做好新系统了,而且可以重新从新内核启动哦,但是您可能对这中间发生的事情就不明白了哦,小时侯上课的时候老师谈什么要授之以渔,而不要授之以鱼,没办法。您要是觉得麻烦,俺就省了,俺手还觉得累,呵呵:)

  还是谈谈这个过程吧,这期间,系统会把您的当前release版本号后面加上一个custom然后写到grub.conf里边去,重新启动后您就可以看到2.4.22custom的选单了 …

  至于这个文件名是怎么决定出来的呢?您可以看一看/usr/src/linux-2.4.22哦,里边有个Makefile,您试一下

  #head –n 5 Makefile

  相信你已经看出来了吧…这也就是命名的原因啦,于是您也可以自己修改您的Linux哦…自己custom一下release名称岂不爽哉…

  从以上步骤来看,基本上已经没有什么问题了,当然,请确认您在makemenuconfig里边没有做过任何错误的事情哦,不然重新启动后,依然引导不了的,譬如fs里边一定要选中VFS,EXT3编译为M,因为现在系统一般都采用了ext3格式,您要是漏掉这个东东,加载不了分区,可别怨我没告诉你哦,当然second extended fs更是一定要选啦:)

  我在编译的历史中曾经有VFS:Unable to mount root fs on 00:00的经历,一直卡在那里,好久都没解决啊,不过后来终于发现应该是fs的问题,或者是您的root分区没指定好啊..

  看了这么多。相信您也很累了,帖子也快到头了,因为马上就要完了…(如果上边您选择了makeinstall,这里您就不用看了哦)最最最最后一点,我们要修改Grub.conf(如果您采用的是grub来引导的话,抱歉我不懂lilo,因为我也是菜鸟…),使系统在重新启动后可以从新的内核启动…

  #vi /boot/menu.lst

  menu.lst跟grub.conf内容是一样的哦,是个link,不过这里边可是彩色的文字,我很喜欢,就编辑它了..

  在原来的基础上添加一行:

  title new Linux(2.4.22) //这里您可以自己命名,也就是出现在grub启动菜单里的东东哦

  kernel /vmlinuz-2.4.22 ro root=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:如果谁有兴趣把make menuconfig的全过成以及详细解释写出来,那就最好了….

  这个实在写的太菜….等偶进一步完善….有什么错误请大家斧正,谢谢... -    本文来自:Linux宝库 -- http://doc.linuxpk.com/1162.html
如有不明白之处,欢迎参加社区讨论
  • 上一篇:Linux内核调试器内幕
  • 下一篇:linux内核参数
  • 相关文档
  • 最受欢迎
  • 最新文档
  • Linux核心
  • 内核编译后加载声卡问题
  • 2.6内核的安装
  • Linux系统配置与优化经验谈
  • Linux内核调试器内幕
  • Linux内核的同步机制
  • 这是一篇比较详尽的内核编译说明
  • 编译2.4.20内核
  • Kernel2.6x编译过程
  • 嵌入式系统开发
  • 自己动手做一个迷你linux系统
  • Linux2.6内核在嵌入式应用上的突破
  • make bzImage -j
  • 配置内核参数
  • Linux内核解读入门
  • 详细编译内核方法
  • 如何编译内核2.6.0-test2(中文版)
  • 菜鸟编译Linux内核
  • 编译内核模块出错
  • linux内核分析----初始化
  • 技巧:从源代码开始升级应用程序
  • 编译内核实践篇
  • 在2.4内核上使用ext3文件系统
  • 实战linux内核编译
  • 编译升级Kernel-2.6.0内核
  • 编译内核支持声卡
  • 内核配置浅析
  • Linux系统内核模块和驱动的编写
  • rh6.1上编译内核
  • LFS下USB设备的使用说明,比如磁盘,鼠标,打印机什么的
  • 这是一篇比较详尽的内核编译说明
  • linux内核参数
  • linux内核编译详解
  • 内核学习FAQ大集锦
  • 菜鸟编译Linux内核
  • 实战linux内核编译
  • 编译升级Kernel-2.6.0内核
  • 如何编译内核2.6.0-test2(中文版)
  • 找不到kernel-headers包
  • 一篇内核模块编程的介绍文章
  • 配置内核参数
  • Kernel2.6x编译过程
  • linux内核分析
  • 官方文档:redhat9上编译内核
  • 升级2.6内核到底需要进行哪些事情
  • 编译内核后生成的System.map有什么用
  • 老话新说,RedHat公司推荐编译内核方法
  • Linux核心
  • ibmx346和x246上linux安装raid卡技巧
  • 内核调整
  • 做一个最小的Linuxkernel
  • make bzImage -j
  • 2.6内核的安装
  • 编译内核实践篇
  • Linux在X86上的虚拟内存管理
  • Linux网桥源码框架分析初探
  • Linux内核管理基础知识概述
  • 编译内核模块出错
  • Linux内核解读入门
  • 嵌入式系统开发
  • 关于Linux内核源码使用的心得
  • Linux2.6内核在嵌入式应用上的突破
  • LinuxKernel2.6核心线程尝鲜
  • Unix编程/应用问答中文版---8.Solaris内核编程相关问题
  • 老话新说,RedHat公司推荐编译内核方法
  • 2.6内核的安装
  • Linux内核解读入门
  • 在2.4内核上使用ext3文件系统
  • Kernel2.6x编译过程
  • 这是一篇比较详尽的内核编译说明
  • 升级2.6内核到底需要进行哪些事情
  • Linux系统内核模块和驱动的编写
  • 如何编译内核2.6.0-test2(中文版)
  • Linux2.6内核的精彩世界
  • 内核升级2.4.20『谈点经验』
  • Linux网桥源码框架分析初探
  • 菜鸟编译Linux内核
  • 官方文档:redhat9上编译内核
  • 内核编译后加载声卡问题
  • Linux内核管理基础知识概述
  • FC4下升级内核到2.6.15.4及给netfilter打补丁
  • ConfiguringanHP-UXKernel
  • LPI102考试准备:内核
  • DebuggingCoreFile
  • 在2.6的内核里用上ps的手柄
  • 简单编译升级内核2.6.6,激活FC1上的USB硬盘
  • 编译内核的步骤解析
  • I/O复用
  • 一篇内核模块编程的介绍文章
  • Linux内核解读入门
clearing

隐藏文档分类快捷跳转菜单SNS

互联网
圈子动态
互联网投资
互联网广告
Web2.0
内幕传闻
IM
电子商务
搜索
门户
博客
网游
IT动态
观察分析
IT要闻
IT业界
热门话题
新经济
硬件
软件
通信
市场行情
移动
通信动态
VOIP
IPTV
3G
手机世界
解决方案
分析报告
增值
服务器
服务器应用
评测
产品导购
新闻
行情
解决方案
安全
病毒专区
安全基础
软件产品
硬件产品
安全方案
安全资讯
防火墙
黑客技术
游戏开发
算法设计
特效处理
程序设计
游戏策划
图形图像
Cisco
路由技术
Cisco教材
综合技术
安全技术
解决方案
无线技术
CISCO产品
网络协议
考试认证
网络管理
交换技术
资讯动态
华为
解决方案
应用技术
学习教程
考试心得
考试介绍
认证介绍
产品介绍
CIW
应用技术
学习教程
考试心得
考试介绍
认证介绍
解决方案
Windows
系统优化
系统技巧
系统故障
系统安全
网络技巧
资讯动态
服务器技术
windows新手入门
Linux
其他
Linux数据库
发行版
网络管理
系统管理
linux新手入门
编辑工具
Linux编程
Java
J2EE
高级技术
核心技术
其它技术
java新手入门
开源技术
资讯动态
XML
J2ME
Oracle
入门基础
安装配置
考试认证
资讯动态
开发技术
性能调优
备份恢复
PLSQL
网页设计
JavaScript
HTML/CSS
FrontPage
Fireworks
Flash
Dreamweaver
ASP
平面设计
Freehand
Illustrator
AuotoCAD
CorelDraw
Photoshop
多媒体
3DMax
Maya
Director
Authorware
工具软件
eMule
Maxthon
BT
IE
迅雷
Outlook
PP点点通
Ghost
Nero
FlashGet
Office
即时通讯
新浪UC
雅虎通
Skype
网易泡泡
MSN
QQ
.Net
C#
ASP.NET
.NETFramework
资讯动态
VB.NET
VC.NET
ADO.NET
XML/WebService
友情链接
  • 中科红旗
  • CIOAge.com
  • Linux联盟
  • mysql中文网
  • 亚嵌Linux
  • 蓝森林-自由软件
  • 亲亲家园
  • 软件项目交易网
  • 广东Linux
  • 喀纳斯Linux
  • Linux宝库
  • Linux论坛
  • Linux教程
  • Linux交友
  • 联系我们

Copyright ?2004 - 2012 Linux宝库 All Rights Reserved 京ICP备06004652号 公安机关备案号:1101140077

-  -