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日
如有不明白之处,欢迎参加社区讨论 - 菜鸟俺,最近研究了一下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内核解读入门
- 互联网
- 圈子动态
- 互联网投资
- 互联网广告
- 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
- .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
- -
linux内核编译
Linux内核编译,步骤及截图.
linux 2.6 的内核编译问题
我的编译LINUX内核时出错!!!
怎么样去内核编译?
怎样编译linux2 .6.17内核
LINUX内核UML图
怎样更新linux内核
linux 内核 最新版
怎样修改linux内核?
关于linux内核
如何升级linux的内核?
linux最新内核版本是多少?
linux最新内核版本是多少?
linux内核代码的问题~
linux内核代码的问题~
linux内核代码的问题~
linux内核指的是什么?
怎么样看linux内核文件?
怎样升级linux的内核?
linux2.6内核编译warning要紧吗?
linux下面如何编译socket
请问linux的内核如何编辑哪?
linux的版本debian的内核