kernel rpm包的制作

本文介绍如何在Linux环境下构建内核RPM包,包括使用的Makefile目标、构建过程及kernel.spec文件的关键配置。文章详细解释了不同构建命令的作用,并展示了如何定制RPM包的内容。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在kernel的根目录下定义了三个目标
# rpm target kept for backward compatibility
package-dir    := scripts/package

%src-pkg: FORCE
    $(Q)$(MAKE) $(build)=$(package-dir) $@
%pkg: include/config/kernel.release FORCE
    $(Q)$(MAKE) $(build)=$(package-dir) $@
rpm: include/config/kernel.release FORCE
    $(Q)$(MAKE) $(build)=$(package-dir) $@

因此可以通过make rpm来产生kernel rpm包,除了rpm来有下面这些命令可以生成rpm包
    @echo '  rpm-pkg             - Build both source and binary RPM kernel packages'
    @echo '  binrpm-pkg          - Build only the binary kernel RPM package'
    @echo '  deb-pkg             - Build both source and binary deb kernel packages'
    @echo '  bindeb-pkg          - Build only the binary kernel deb package'
    @echo '  tar-pkg             - Build the kernel as an uncompressed tarball'
    @echo '  targz-pkg           - Build the kernel as a gzip compressed tarball'
    @echo '  tarbz2-pkg          - Build the kernel as a bzip2 compressed tarball'
    @echo '  tarxz-pkg           - Build the kernel as a xz compressed tarball'
    @echo '  perf-tar-src-pkg    - Build $(perf-tar).tar source tarball'
    @echo '  perf-targz-src-pkg  - Build $(perf-tar).tar.gz source tarball'
    @echo '  perf-tarbz2-src-pkg - Build $(perf-tar).tar.bz2 source tarball'
    @echo '  perf-tarxz-src-pkg  - Build $(perf-tar).tar.xz source tarball'
这些目标用的最终都是调用scripts/package/makefile来生成rpm包。
我们以rpm包为例
rpm-pkg rpm: FORCE
    $(MAKE) clean
    rpmbuild $(RPMOPTS) --target $(UTS_MACHINE) -ta $(KERNELPATH).tar.gz
    rm $(KERNELPATH).tar.gz kernel.spec
可见最终是调用rpmbuild 这个命令,并以kernel.spec为参数.
kernel.spec 中最中的内容如下。
echo "%files"
echo '%defattr (-, root, root)'
echo "/lib/modules/$KERNELRELEASE"
echo "%exclude /lib/modules/$KERNELRELEASE/build"
echo "%exclude /lib/modules/$KERNELRELEASE/source"
echo "/lib/firmware/$KERNELRELEASE"
echo "/boot/*"
echo ""
echo "%files headers"
echo '%defattr (-, root, root)'
echo "/usr/include"
echo ""
if ! $PREBUILT; then
echo "%files devel"
echo '%defattr (-, root, root)'
echo "/usr/src/kernels/$KERNELRELEASE"
echo "/lib/modules/$KERNELRELEASE/build"
echo "/lib/modules/$KERNELRELEASE/source"
echo ""
fi
这边有三个%file,会在rpm的目录下生成3个rpm包。这三个rpm包的内容就是%file这个文件定义的
echo "%files"
echo '%defattr (-, root, root)'
echo "/lib/modules/$KERNELRELEASE"
echo "%exclude /lib/modules/$KERNELRELEASE/build"
echo "%exclude /lib/modules/$KERNELRELEASE/source"
echo "/lib/firmware/$KERNELRELEASE"
echo "/boot/*"
echo ""
以这个为例,最后的rpm包中就包含这三个文件夹下的东西
/lib/modules/$KERNELRELEASE
/lib/firmware/$KERNELRELEASE
/boot/*
在实际使用中我们一般会去掉vmlinux.bz2,以减少rpm包的size,可见也是通过减少boot 目录的内容来减少size的.
echo 'bzip2 -9 --keep vmlinux'
echo 'mv vmlinux.bz2 $RPM_BUILD_ROOT'"/boot/vmlinux-$KERNELRELEASE.bz2"
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值