免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 12019 | 回复: 7
打印 上一主题 下一主题

[原创]RedHat Linux 2.6内核如何build kernel-sourcecode的rpm包 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2005-12-09 12:38 |只看该作者 |倒序浏览
RedHat企业版自从AS4开始,桌面版本自从FC3开始,不再单独提供kernel-sourcecode的rpm安装包,原因是RedHat认为没有必要维护单独的kernel-sourcecode包,因为所有的源代码包都应该包含在.src.rpm中而不是rpm中。所以在这些高版本的RedHat Linux上,我们如果需要定制内核的话,没有直接的源代码rpm可以安装,只能通过kernel.org下载的tar.gz的包手工安装,或者通过kernel-*.src.rpm编译出kernel-source包再来安装。后面一种方法可以享受到RedHat针对内核的某些参数和代码的优化,因此对使用RedHat发行版特别是企业版本的,是有一定好处的。
    但是目前很多人至今分不清内核,内核开发,内核源代码一些包之间的关系,因此在编译内核的时候经常走弯路,同时RedHat官方对于如果得到kernel-source也没有明确的指示,导致很多人不得要领。

首先认清楚各rpm包的内容和用途
kernel-*.rpm -------------  内核二进制包,没有的话系统都起不来
kernel-sourcecode-*.rpm------------------- 内核源代码包,安装到/usr/src/linux-*下面的,包含内核源代码,编译内核必须(当然是不考虑用kernel.tar.gz编译的情况),但高版本RedHat Linux不再提供此rpm,原因参见官方Release Note,这篇文章的最终目的就是要我们自己把这个包搞出来。
kernel-devel-*.rpm----------------内核开发包,安装到/usr/src/kernels,用于内核模块开发,组织形式跟内核源代码包类似,包含了部分内核源代码。注意很多人误认为这个就是内核源代码包,直接拿它来编译内核,当然不可能成功。这个包只是用于内核模块一级开发,例如驱动程序等,虽然也可以make menuconfig make dep等,但make bzImage是不可能成功的,因为缺失了核心源代码。
kernel-*.src.rpm---------------RedHat提供的用于建立rpm的源代码包,安装到/usr/src/redhat中,使用rpmbuild可以从这个包中build出上面所说的所有包。


现在就来从src.rpm编译出上面的所有的包,除了sourcecode这个包其他的包都可以在不用修改任何地方的情况下直接rpmbuild出来,唯有sourcecode这个比较麻烦,一定要按照下面的步骤来做,我以RedHat AS4 所带的版本为例,其他版本相同。

#首先安装src.rpm
rpm -ivh kernel-2.6.9-5.EL.src.rpm
#进入相应目录,要修改spec文件
cd /usr/src/redhat/SPECS
vi kernel-2.6.spec
#主要修改如下地方:
    1,define buildsource 0------------我的这个在第8行,改为1,这就是为什么没有源代码包的原因,因为默认不生成源代码包
    2, Requires: qt-devel, gtk2-devel readline-devel ncurses-devel-------我的在572行,如果没用用X的话,把这句注释掉,这样编译出来的包就不依赖于X-window的某些包,因为内核配置是可以make xconfig的,所以默认依赖X-window,我没装X-window,因此这个就去掉了。
#保存退出
touch /etc/beehive-root
#这句命令非必须,如果不做的话,最后编译出来的包都会变成kernel-*.*-root.rpm,多了个root,据说是为了标示包的编译人的,如果touch了这个文件,就没有这个问题了,命名和官方rpm一样。
rpmbuild  -ba --target=i686 ./kernel-2.6.spec
#编译i686平台的所有包,这样上面介绍的所有包都会生成,或者换成rpmbuild -bb --target=i686 ./kernel-2.6.spec只编译非src.rpm。
#所有包就会生成到/usr/src/redhat/RPMS/i686下面

#如果只需要sourcecode而并非所有rpm包,那在修改spec文件时还要修改如下行:

     48 %ifarch noarch
     49 %define builddoc 1
     50 %define buildsource 0----------------这里0修改为1
在编译的时候使用rpmbuild  -ba --target=noarch ./kernel-2.6.spec,这样仅仅编译soucecode和doc包,会节省很多时间。



注意,此篇文章所讲所有内容仅适用于使用2.6内核的新版本RedHat Linux,2.4版本内核代码组织方式不同,不适用此文章。

论坛徽章:
84
每日论坛发贴之星
日期:2015-12-29 06:20:00每日论坛发贴之星
日期:2016-01-16 06:20:00每周论坛发贴之星
日期:2016-01-17 22:22:00程序设计版块每日发帖之星
日期:2016-01-20 06:20:00每日论坛发贴之星
日期:2016-01-20 06:20:00程序设计版块每日发帖之星
日期:2016-01-21 06:20:00每日论坛发贴之星
日期:2016-01-21 06:20:00程序设计版块每日发帖之星
日期:2016-01-23 06:20:00程序设计版块每日发帖之星
日期:2016-01-31 06:20:00数据库技术版块每日发帖之星
日期:2016-01-16 06:20:00程序设计版块每日发帖之星
日期:2016-01-16 06:20:00程序设计版块每日发帖之星
日期:2016-01-14 06:20:00
2 [报告]
发表于 2005-12-12 13:52 |只看该作者
不错,谢谢colddawn!

论坛徽章:
0
3 [报告]
发表于 2005-12-13 22:51 |只看该作者
#rpmbuild  -ba --target=i686 ./kernel-2.6.spec

+ unset DISPLAY
+ gpg --homedir . --batch --gen-key /usr/src/redhat/SOURCES/genkey
gpg: WARNING: unsafe permissions on homedir `.'
gpg: keyring `./secring.gpg' created
gpg: keyring `./pubring.gpg' created
++++++++++.++++++++++..+++++.++++++++++..+++++++++++++++++++++++++.++++++++++++++++++++.+++++.++++++++++++++++++++++++++++++++++++++++.++++++++++!+++++++++++++++++++++++++++++++++++.+++++.++++++++++.+++++++++++++++++++++++++.++++++++++++++++++++++++++++++++++++++++++++++++++!+++++++++++++++.++++++++++.++++++++++++++++++++++++++++++..++++++++++.++++++++++++++++++++++++++++++.+++++<.+++++++++++++++++++++++++.+++++!+++++++++++++++++++++++++.+++++.++++++++++..+++++.+++++...+++++++++++++++++++++++++.++++++++++++++++++++++++++++++..+++++++++++++++.+++++!..+++++..++++++++++.+++++.+++++.+++++++++++++++.+++++....+++++.+++++.+++++++++++++++.++++++++++++++++++++.+++++++++++++++++++++++++++++++++++!++++++++++++++++++++++++++++++..+++++.++++++++++++++++++++++++++++++.+++++.+++++++++++++++.+++++.+++++++++++++++..++++++++++..++++++++++!.+++++.++++++++++++++++++++++++++++++.+++++.++++++++++.+++++++++++++++.+++++.+++++.+++++.++++++++++.++++++++++++++++++++.+++++++++++++++!.++++++++++++++++++++++++++++++++++++++++++++++++++.+++++.+++++...++++++++++.+++++++++++++++++++++++++++++++++++++++++++++++++++++++!+++++.+++++++++++++++++++++++++++++++++++++++++++++++++++++++.++++++++++.+++++++++++++++..++++++++++.++++++++++++++++++++.+++++..+++++!++++++++++.+++++++++++++++.++++++++++++++++++++.++++++++++..++++++++++++++++++++++++++++++.+++++.++++++++++++++++++++.+++++.+++++..+++++!.+++++.++++++++++.++++++++++++++++++++.+++++.+++++++++++++++...+++++++++++++++++++++++++.+++++.+++++.+++++.+++++.+++++++++++++++.++++++++++!++++++++++.+++++.++++++++++++++++++++++++++++++.++++++++++++++++++++.+++++.++++++++++.+++++++++++++++++++++++++..+++++.+++++.++++++++++!....++++++++++++++++++++.+++++++++++++++++++++++++++++++++++.+++++.+++++++++++++++++++++++++.+++++++++++++++..+++++++++++++++.......++++++++++!+++++.++++++++++..+++++.++++++++++++++++++++++++++++++.+++++.+++++.+++++++++++++++++++++++++

Not enough random bytes available.  Please do some other work to give
the OS a chance to collect more entropy! (Need 283 more bytes)



这是什么错误呀.

论坛徽章:
0
4 [报告]
发表于 2005-12-14 17:31 |只看该作者
谢谢呀
正面临这样的问题
下去试试看

论坛徽章:
0
5 [报告]
发表于 2005-12-26 18:41 |只看该作者
kernel-devel-*.rpm----------------内核开发包,安装到/usr/src/kernels,用于内核模块开发,组织形式跟内核源代码包类似,包含了部分内核源代码。注意很多人误认为这个就是内核源代码包,直接拿它来编译内核,当然不可能成功。这个包只是用于内核模块一级开发,例如驱动程序等,虽然也可以 make menuconfig make dep等,但make bzImage是不可能成功的,因为缺失了核心源代码。


怎么解释

我现在是rhel as4

现在内核你添加一个模块(内核里面有,但是没有M)

怎么搞

谢谢

论坛徽章:
0
6 [报告]
发表于 2005-12-27 07:45 |只看该作者
跟编译内核类似,但make dep后不能make bzImage,make modules即可,编译单独模块也有个参数,忘记了,看一下Makefile

论坛徽章:
0
7 [报告]
发表于 2006-01-20 11:31 |只看该作者
rpm -ivh kernel-2.6.9-5.EL.src.rpm

这一步从哪来的呢?原文件是网上下载的吗?

论坛徽章:
0
8 [报告]
发表于 2006-02-07 23:43 |只看该作者
不错
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP