已阅读5页,还剩7页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
怎么编译一个内核 - Fedora方式每一个Linux发行版都有自己专门的工具去构建自定义的内核. 本文主要介绍在Fedora平台上编译内核, 怎么从(也叫vanilla kernel)获得最新且未改动的内核原始码来构建一个自定义的内核, 这样你能使用自己的内核而不是发行版的内核, 另外也介绍了怎么给内核打补丁, 从而方便增加新的功能.下面的工作我都在Fedora Core 6上经过了测试.我想首先要说的是文章中构建自定义内核的方式不是唯一的, 更有许多其他的方式, 这不过是我习惯的方式. 我不能确保使用后不会出现所有问题.1. 预备工作本文我将描述在Fedora平台上构建自定义内核的两种方式. 第一种是Fedora方式, 最后你将能获得一个内核rpm包, 从而能方便地和他人分享. 第二种是传统方式, 适用于所有linux发行版, 不过最后你不会有一个rpm包.我推荐使用root用户做下面所有的步骤. 然而, 有时也需要使用非终极用户(比如用户tom)来运行一些命令, 所以你可能会使用visudo编辑器在/etc/sudoers文件中添加下面一行:tom ALL=(ALL) ALL目前无论什么时候你需要用root权限运行命令, 比如:yum install fedora-rpmdevtools unifdef 你都能用下面的命令来替代:sudo yum install fedora-rpmdevtools unifdef请记住: 如果以root用户身份运行所有命令, 你能完全忘记sudo. 采用什么方式, 看你自己的习惯.2. 构建rpm内核包这一小节介绍怎么构建内核, 最终你能得到一个rpm包, 这样能方便安装或和他人分享.2.1 创建你的rpmbuild目录按下面创建你的rpmbuild目录:cd cp -a /usr/src/redhat/ rpmbuildecho %_topdir %(echo $HOME)/rpmbuild .rpmmacros 然后安装构建rpm包需要的应用软件包yum install fedora-rpmdevtools unifdef然后运行fedora-buildrpmtree2.2 下载和安装Fedora内核src.rpm包接下来为我们的Fedora版本下载最新的内核src.rpm包. 针对Fedora Core 6, 你能从接下来的网址获得src.rpm包: /pub/fedora/linux/core/6/source/SRPMS/, 针对Fedora Core 5, 你能从下面的网址获得src.rpm包: /pub/fedora/linux/core/5/source/SRPMS/, 等等. 最新的Fedora Core 6内核src.rpm包是kernel-2.6.18-1.2798.fc6.src.rpm, 所以我们目前下载和安装他:cd /usr/srcwget /pub/fedora/linux/core/6/source/SRPMS/kernel-2.6.18-1.2798.fc6.src.rpmrpm -ivh kernel-2.6.18-1.2798.fc6.src.rpm如果你看到这些警告:warning: user brewbuilder does not exist - using rootwarning: group brewbuilder does not exist - using root你能忽略他们.我们已成功安装了最新的内核原始码包. 如果我们继续构建内核原始码包的话, 我们的内核版本将是.2.3 给内核打补丁我想安装新内核来替代. 系统已安装的src.rpm包是给2.6.18打过补丁的. 而我们目前将使用打补丁的方式升级内核到cd /rpmbuild/SOURCES/wget /pub/linux/kernel/v2.6/patch-.bz2如果你想内核的名字结尾为2.6.19-rc5, 你也能使用prepatch包/pub/linux/kernel/v2.6/testing/patch-2.6.19-rc5.bz2. 请注意这项工作仅对prepaches有效. 比如. 内核补丁仅对最终发行的内核版本有效, 比如2.6.19内核. 你能给2.6.18内核原始码打补丁, 但不能是或, 等. 这个规则在接下来的网页中注明: /patchtypes/pre.htmlprepatches等同于linux中的测试发行; 他们位于存档的测试目录中, 我们能使用patch(1)工具对上一个完整发行版(版本号分三部分)打补丁(例如, 2.6.13-rc4 prepatch只能给2.6.11内核原始码打补丁, 而不是0.)目前我们必须修改kernel-2.6.spec文件, 让他知道我们使用了新的内核补丁:cd /rpmbuild/SPECS/vi kernel-2.6.spec搜寻下面行Patch1: patch-.bz2替换为下面的内容:Patch1: patch-.bz2(或其他你已下载的版本)然后运行rpmbuild -bp kernel-2.6.spec(如果你想构建其他平台如i386, i586, i686或x86_64的内核, 你能通过运行下面的命令来实现:rpmbuild -bp -target=i686 kernel-2.6.spec我没有在上面例子中指定为i386, 你的系统可能是其他的平台类型, 请记得填写你的平台类型.)目前我们进入到关键的部分. src.rpm有非常多fedora专门的补丁, 其中一些不能和我们的补丁非常好的工作, 所以如果你在rpmbuild输出看到下面状况:+ echo Patch #300 (linux-2.6-ppc-dac960-ipr-clash.patch):Patch #300 (linux-2.6-ppc-dac960-ipr-clash.patch):+ patch -p1 -sReversed (or previously applied) patch detected! Assume -R? nApply anyway? n1 out of 1 hunk ignored - saving rejects to file drivers/block/DAC960.c.rejerror: Bad exit status from /var/tmp/rpm-tmp.46287 (%prep)RPM build errors:Bad exit status from /var/tmp/rpm-tmp.46287 (%prep)这时候你必须再次编辑kernel-2.6.spec文件, 注解掉patch #300一行:vi kernel-2.6.spec.#Patch300: linux-2.6-ppc-dac960-ipr-clash.patch.#%patch300 -p1.然后再运行rpmbuild命令, 比如:rpmbuild -bp kernel-2.6.spec注意: 你必须不断重复上面过程直到不出现所有错误.2.4 指定内核识别码目前我们将指定一个字符串方便以后差别内核版本. 因此我们需要做:cd /rpmbuild/BUILD/kernel-2.6.18/linux-2.6.18.i386vi Makefile在EXTRAVERSION一行, 你能输入一个内核识别码. 我想最佳是在字符串后附上内核的版本号, 这样来操作:EXTRAVERSION = -custom-2.5 设置内核目前我们运行make menuconfig然后我们看到内核的设置菜单. 移动绿色光标到 Load an Alternate Configuration File 行后选择.config文件做为设置文件: 然后浏览内核设置菜单, 选择你需要的功能. 完成设置后, 选择Exit, 回答下面的问题(Do you wish to save your new kernel configuration? 你希望保存新的内核设置吗?), 选择Yes:2.6 构建内核目前我们简单运行下面命令来构建内核:make rpm然后你将在/rpmbuild/SRPMS/目录发现一个新的src.rpm包, 比如. /rpmbuild/SRPMS/kernel-2.6.18custom-1.src.rpm, 内核rpm包位于/rpmbuild/RPMS/i386/ (或 /rpmbuild/RPMS/i586/, /rpmbuild/RPMS/i686/, 等. 看你的平台类型). 比如. /rpmbuild/RPMS/i386/kernel-2.6.18custom-1.i386.rpm. 你看到内核识别码已添加到软件包的名字中.2.7 安装新内核目前去新的rpm内核包存在的目录(基于你的平台类型, 比如. /rpmbuild/RPMS/i386/)安装rpm包:cd /rpmbuild/RPMS/i386rpm -ivh kernel-2.6.18custom-1.i386.rpm(目前你甚至能够拷贝到其他的Fedora系统, 通过上面的方式安装. 你将不再需要编译内核.)接下来我们为新内核创建一个ramdisk, 否则系统将不能引导新内核:mkinitrd /boot/initrd-2.6.18-custom-.img 2.6.18-custom-然后编辑/boot/grub/menu.lst文件, 看一下你系统上已存在(正在工作的)引导内核信息, 拷贝其中的一个实例, 替换为你新的内核和ramdisk:vi /boot/grub/menu.lst比如, 我的menu.lst, 在我添加新的内核信息前的情况:# grub.conf generated by anaconda# Note that you do not have to rerun grub after making changes to this file# NOTICE: You have a /boot partition. This means that# all kernel and initrd paths are relative to /boot/, eg.# root (hd0,0)# kernel /vmlinuz-version ro root=/dev/VolGroup00/LogVol00# initrd /initrd-version.img#boot=/dev/sdadefault=0timeout=5splashimage=(hd0,0)/grub/splash.xpm.gzhiddenmenutitle Fedora Core (2.6.18-1.2798.fc6)root (hd0,0)kernel /vmlinuz-2.6.18-1.2798.fc6 ro root=/dev/VolGroup00/LogVol00initrd /initrd-2.6.18-1.2798.fc6.img修改后的情况:# grub.conf generated by anaconda# Note that you do not have to rerun grub after making changes to this file# NOTICE: You have a /boot partition. This means that# all kernel and initrd paths are relative to /boot/, eg.# root (hd0,0)# kernel /vmlinuz-version ro root=/dev/VolGroup00/LogVol00# initrd /initrd-version.img#boot=/dev/sdadefault=0timeout=5splashimage=(hd0,0)/grub/splash.xpm.gzhiddenmenutitle Fedora Core (2.6.18-custom-)root (hd0,0)kernel /vmlinuz-2.6.18-custom- ro root=/dev/VolGroup00/LogVol00initrd /initrd-2.6.18-custom-.imgtitle Fedora Core (2.6.18-1.2798.fc6)root (hd0,0)kernel /vmlinuz-2.6.18-1.2798.fc6 ro root=/dev/VolGroup00/LogVol00initrd /initrd-2.6.18-1.2798.fc6.img(你能通过下面命令发现正确的vmlinuz和initrd文件:ls -l /boot)目前重启系统:shutdown -r now如果一切进展顺利, 你的新内核正常工作. 你还能通过运行下面命令来检查新内核是否运行:uname -r这将会显示如:2.6.18-custom-如果系统没有起来, 重启一下, 你会看到:按任意键进入GRUB菜单:选择你以前的内核启动系统, 目前你能再次尝试编译新的工作内核. 不要忘记从/boot/grub/menu.1st文件中移去不必的引导内核信息.3. 构建内核的传统方式这个章节讲述另一种适用于所有linux发行版的内核编译方式. 跟Fedora编译方式不同的是, 结果不会有rpm内核包.3.1 下载内核原始码我们下载需要的内核到/usr/src目录(去网站下载你需要的内核版本, 比如. linux-.tar.bz2(你能从这里下载所有的2.6内核: /pub/linux/kernel/v2.6/). 然后下载到/usr/src目录:cd /usr/srcwget /pub/linux/kernel/v2.6/linux-.tar.bz2然后解压内核原始码, 创建一个指向内核原始码目录的linux字符链接:tar xjf linux-.tar.bz2ln -s linux- linuxcd /usr/src/linux3.2 给内核原始码打补丁(可选)有时你的缺省内核不支持新买的设备, 你需要安装新的驱动. 或你需要使用虚拟技术或其他高级的技术, 而这些现有的内核都不支持. 这样情况下你需要给给内核原始码打补丁(当然补丁已发布.)目前我们假设你已下载需要的补丁(以下例子我叫他patch.bz2)到/usr/src. 运行下面的命令给内核原始码直接打上补丁(你的用户必须位于/usr/src/linux目录):bzip2 -dc /usr/src/patch.bz2 | patch -p1 -dry-runbzip2 -dc /usr/src/patch.bz2 | patch -p1第一个命令用于测试, 对内核没有所有影响. 如果没有显示错误, 你能运行第二个命令给内核打补丁. 如果第一个命令有误, 请务继续的操作!你也能够通过内核的prepatches方式打补丁. 比如, 如果你需要一个功能, 而这个功能仅存在于2.6.19-rc5中, 正式完整的内核版本仍没有发布, 而2已发布. 你能把这个补丁打到2.6.18的内核原始码中, 但请不要达到或, 等. 这个规则在接下来的网页中注明: /patchtypes/pre.htmlprepatches等同于linux中的测试发行; 他们位于存档的测试目录中, 我们能使用patch(1)工具对上一个完整发行版(版本号分三部分)打补丁(例如, 2.6.13-rc4 prepatch只能给2.6.11内核原始码打补丁, 而不是0.)所以如果你想编译2.6.19-rc5内核, 你必须在步骤3.1下载2.6.18(/pub/linux/kernel/v2.6/linux-2.6.18.tar.bz2)替代内核原始码!下面是怎么给2.6.18打上2.6.19-rc5补丁:cd /usr/srcwget /pub/linux/kernel/v2.6/testing/patch-2.6.19-rc5.bz2cd /usr/src/linuxbzip2 -dc /usr/src/patch-2.6.19-rc5.bz2 | patch -p1 -dry-runbzip2 -dc /usr/src/patch-2.6.19-rc5.bz2 | patch -p13.3. 设置内核使用当前工作内核的设置文件做为新内核设置文件的基础是个非常好的主意. 因此我们拷贝已存的设置文件到/usr/src/linux:make mrpropercp /boot/config-uname -r ./.config然后运行make menuconfig然后我们看到内核的设置菜单. 移动绿色光标到 Load an Alternate Configuration File 行后选择.config文件做为设置文件:然后浏览内核设置菜单, 选择你需要的功能. 完成设置后, 选择Exit, 回答下面的问题(Do you wish to save your new kernel configuration? 你希望保存新的内核设置吗?), 选择Yes:3.4 构建和安装新的内核构建和安装新的内核, 执行下面的3个命令:make allmake modules_installmake install保持耐心, 内核编译需要一定时间, 主要看你的内核设置和处理器速度. 最后一个命令将自动创建一个ramdisk, 你将在/boot/grub/menu.lst用到.目前编辑/boot/grub/menu.lst. 把你的新的内核信息放到列表的顶端, 确认新的内核已替代老的内核, default值需要设为0.vi /boot/grub/menu.lst我的menu.lst是这样的:# grub.conf generated by anaconda# Note that you do not have to rerun grub after making changes to this file# NOTI
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- GB 5135.2-2025自动喷水灭火系统第2部分:湿式报警阀、延迟器、水力警铃
- 2025年中国餐饮行业ESG实践报告
- 干洗店服务合同(衣物保价·破损赔付版)
- 2025年保险销售岗年终保单成交总结与客户留存报告
- 2026-2031年中国PCB盖垫板市场调研分析及投资战略研究报告
- 岳池县酉溪镇人民政府关于公开招聘社区专职网格员的备考题库含答案详解(综合题)
- 2025陕西宝鸡市眉县招聘社区专职工作人员10人备考题库及答案详解(易错题)
- 2026上海公共服务徐汇区社区工作者招录86人备考题库 (第三批)含答案详解(典型题)
- 2026年中国邮政储蓄银行河北分行秋季校园招聘备考题库含答案详解(典型题)
- 2025年嘉兴桐乡市总工会招聘工会社会工作者6人备考题库附答案详解(完整版)
- 《胃肠道相关淋巴瘤》课件
- 《医疗风险与法规》课件
- 苏州某多层框架结构厂房施工组织设计(6层)
- GB/T 13460-2025再生橡胶通用规范
- 2025陕西金融资产管理股份有限公司员工招聘(26人)笔试参考题库附带答案详解
- 太阳能灯具设计与创新-全面剖析
- 2025年部编版小学语文3-6年级单元“语文要素”+“习作表达要求”
- 数字化时代高校教学模式的变革与重构
- 2025年辽河石油职业技术学院单招数学题库
- 子女已成年离婚协议书模板
- DGTJ 08-2176-2024 沥青路面预防养护技术标准(正式版含条文说明)
评论
0/150
提交评论