怎么编译一个内核Fedora方式Word文档格式.docx
《怎么编译一个内核Fedora方式Word文档格式.docx》由会员分享,可在线阅读,更多相关《怎么编译一个内核Fedora方式Word文档格式.docx(12页珍藏版)》请在冰豆网上搜索。
我推荐使用root用户做下面所有的步骤.然而,有时也需要使用非终极用户(比如用户tom)来运行一些命令,所以你可能会使用visudo编辑器在/etc/sudoers文件中添加下面一行:
tomALL=(ALL)ALL
目前无论什么时候你需要用root权限运行命令,比如:
yuminstallfedora-rpmdevtoolsunifdef
你都能用下面的命令来替代:
sudoyuminstallfedora-rpmdevtoolsunifdef
请记住:
如果以root用户身份运行所有命令,你能完全忘记sudo.采用什么方式,看你自己的习惯.
2.构建rpm内核包
这一小节介绍怎么构建内核,最终你能得到一个rpm包,这样能方便安装或和他人分享.
2.1创建你的rpmbuild目录
按下面创建你的rpmbuild目录:
cd~
cp-a/usr/src/redhat/rpmbuild
echo’%_topdir%(echo$HOME)/rpmbuild’>
>
.rpmmacros
然后安装构建rpm包需要的应用软件包
yuminstallfedora-rpmdevtoolsunifdef
然后运行
fedora-buildrpmtree
2.2下载和安装Fedora内核src.rpm包
接下来为我们的Fedora版本下载最新的内核src.rpm包.针对FedoraCore6,你能从接下来的网址获得src.rpm包:
针对FedoraCore5,你能从下面的网址获得src.rpm包:
等等.
最新的FedoraCore6内核src.rpm包是kernel-2.6.18-1.2798.fc6.src.rpm,所以我们目前下载和安装他:
cd/usr/src
wget
rpm-ivhkernel-2.6.18-1.2798.fc6.src.rpm
如果你看到这些警告:
warning:
userbrewbuilderdoesnotexist-usingroot
groupbrewbuilderdoesnotexist-usingroot
你能忽略他们.
我们已成功安装了最新的2.6.18.1内核原始码包.如果我们继续构建内核原始码包的话,我们的内核版本将是2.6.18.1.
2.3给内核打补丁
我想安装新内核2.6.18.2来替代2.6.18.1.系统已安装的src.rpm包是给2.6.18打过补丁的2.6.18.1.而我们目前将使用打补丁的方式升级内核到2.6.18.2
cd~/rpmbuild/SOURCES/
wgethttp:
//www.kernel.org/pub/linux/kernel/v2.6/patch-2.6.18.2.bz2
如果你想内核的名字结尾为2.6.19-rc5,你也能使用prepatch包
http:
//www.kernel.org/pub/linux/kernel/v2.6/testing/patch-2.6.19-rc5.bz2
.请注意这项工作仅对prepaches有效.比如.内核补丁仅对最终发行的内核版本有效,比如2.6.19内核.你能给2.6.18内核原始码打补丁,但不能是2.6.18.1或2.6.18.2,等.这个规则在接下来的网页中注明:
//kernel.org/patchtypes/pre.html
prepatches等同于linux中的测试发行;
他们位于存档的测试目录中,我们能使用patch
(1)工具对上一个完整发行版(版本号分三部分)打补丁(例如,2.6.13-rc4prepatch只能给2.6.11内核原始码打补丁,而不是2.6.11.10.)
目前我们必须修改kernel-2.6.spec文件,让他知道我们使用了新的内核补丁:
cd~/rpmbuild/SPECS/
vikernel-2.6.spec
搜寻下面行
Patch1:
patch-2.6.18.1.bz2
替换为下面的内容:
patch-2.6.18.2.bz2
(或其他你已下载的版本)
rpmbuild-bpkernel-2.6.spec
(如果你想构建其他平台如i386,i586,i686或x86_64的内核,你能通过运行下面的命令来实现:
rpmbuild-bp--target=i686kernel-2.6.spec
我没有在上面例子中指定为i386,你的系统可能是其他的平台类型,请记得填写你的平台类型.)
目前我们进入到关键的部分.src.rpm有非常多fedora专门的补丁,其中一些不能和我们的2.6.18.2补丁非常好的工作,所以如果你在rpmbuild输出看到下面状况:
+echo’Patch#300(linux-2.6-ppc-dac960-ipr-clash.patch):
’
Patch#300(linux-2.6-ppc-dac960-ipr-clash.patch):
+patch-p1-s
Reversed(orpreviouslyapplied)patchdetected!
Assume-R?
[n]
Applyanyway?
1outof1hunkignored--savingrejectstofiledrivers/block/DAC960.c.rej
error:
Badexitstatusfrom/var/tmp/rpm-tmp.46287(%prep)
RPMbuilderrors:
Badexitstatusfrom/var/tmp/rpm-tmp.46287(%prep)
这时候你必须再次编辑kernel-2.6.spec文件,注解掉patch#300一行:
[...]
#Patch300:
linux-2.6-ppc-dac960-ipr-clash.patch
#%patch300-p1
然后再运行rpmbuild命令,比如:
注意:
你必须不断重复上面过程直到不出现所有错误.
2.4指定内核识别码
目前我们将指定一个字符串方便以后差别内核版本.因此我们需要做:
cd~/rpmbuild/BUILD/kernel-2.6.18/linux-2.6.18.i386
viMakefile
在EXTRAVERSION一行,你能输入一个内核识别码.我想最佳是在字符串后附上内核的版本号,这样来操作:
EXTRAVERSION=-custom-2.6.18.2
2.5设置内核
目前我们运行
makemenuconfig
然后我们看到内核的设置菜单.移动绿色光标到LoadanAlternateConfigurationFile行后选择.config文件做为设置文件:
然后浏览内核设置菜单,选择你需要的功能.完成设置后,选择Exit,回答下面的问题(Doyouwishtosaveyournewkernelconfiguration?
你希望保存新的内核设置吗?
),选择Yes:
2.6构建内核
目前我们简单运行下面命令来构建内核:
makerpm
然后你将在~/rpmbuild/SRPMS/目录发现一个新的src.rpm包,比如.~/rpmbuild/SRPMS/kernel-2.6.18custom2.6.18.2-1.src.rpm,内核rpm包位于~/rpmbuild/RPMS/i386/(或~/rpmbuild/RPMS/i586/,~/rpmbuild/RPMS/i686/,等.看你的平台类型).比如.~/rpmbuild/RPMS/i386/kernel-2.6.18custom2.6.18.2-1.i386.rpm.你看到内核识别码已添加到软件包的名字中.
2.7安装新内核
目前去新的rpm内核包存在的目录(基于你的平台类型,比如.~/rpmbuild/RPMS/i386/)安装rpm包:
cd~/rpmbuild/RPMS/i386
rpm-ivhkernel-2.6.18custom2.6.18.2-1.i386.rpm
(目前你甚至能够拷贝到其他的Fedora系统,通过上面的方式安装.你将不再需要编译内核.)
接下来我们为新内核创建一个ramdisk,否则系统将不能引导新内核:
mkinitrd/boot/initrd-2.6.18-custom-2.6.18.2.img2.6.18-custom-2.6.18.2
然后编辑/boot/grub/menu.lst文件,看一下你系统上已存在(正在工作的)引导内核信息,拷贝其中的一个实例,替换为你新的内核和ramdisk:
vi/boot/grub/menu.lst
比如,我的menu.lst,在我添加新的内核信息前的情况:
#grub.confgeneratedbyanaconda
#
#Notethatyoudonothavetorerungrubaftermakingchangestothisfile
#NOTICE:
Youhavea/bootpartition.Thismeansthat
#allkernelandinitrdpathsarerelativeto/boot/,eg.
#root(hd0,0)
#kernel/vmlinuz-versionroroot=/dev/VolGroup00/LogVol00
#initr