Fedora Core8编译内核源码总结

本文详细介绍了在Fedora Core 8环境下从源码编译内核的过程,包括源码的下载、安装、转换及最终的编译步骤。此外,还提供了调试程序的具体方法以及必要的内核头文件安装指导。

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

Fedora Core8编译内核源码总结

   安装Kernel 源码这步通常不是必需的,除非你想自己编译内核或者做一些特殊的开发
工作。一些情况下,我们需要KernelHeaders。
安装内核源码一般需要以下四个基本步骤:
下载所需内核源码; 安装SRPM; 利用rpmbuild 命令将源码转变成为可用状态
(usablestate);编译安装。

1、下载内核源码

可以从这里获取源码: http://archives.fedoraproject.org/pub/archive/fedora/linux/releases/8/Fedora/source/SRPMS/
选择一个适合当前版本的内核,
例如: kernel-2.6.23.1-42.fc8.src.rpm31-Oct-200700:0646M

2、安装源码

即,安装上面一步得到的src.rpm:
$ sudo rpm -ivh kernel-2.6.23.1-42.fc8.src.rpm
1:ker nel###########################################[100% ]
其中可能有一些警告提示之类,大多可以不必理会。

3、转换源码:

在转换之前,请确保/usr/src/目录下有redhat目录(一般/usr/src/是空目录)。
$ sudo rpmbuild -bp --target=$(uname -m) /usr/src/redhat/SPECS/kernel.spec
这样会将源码放置在/usr/src/redhat/BUILD/kernel-2.6.23/。
这里有两个有用的文件夹:.
A、linux-2.6.23.ARCH──这个是kernel.org 提供的包经过Fedora 补丁和升级得到的。
ARCH 与uname-m 的输出结果一致,通常为i686。如果你想得到不同的输出,你可以使用
“--target=”这个选项来进行指定。
B、vanilla──这个是标准的、由kernel.org 提供的没有经过补丁和升级的源码。

贴出路径:
$ ll
总计 32
drwxr-xr-x 3 root root   4096 10-13 21:07 BUILD
drwxr-xr-x 2 root root 12288 10-13 21:04 SOURCES
drwxr-xr-x 2 root root   4096 10-13 21:04 SPECS

4、编译源码:
$ cd   /usr/src/redhat/BUILD/kernel-2.6.23/linux-2.6.23.i686
要修改Makefile文件
每个内核的名字都包含了它的版本号,这也是 uname -r 命令显示的值。内核 Makefile 的前四行定义了内核的名字。为了保护官方的内核不被破坏,Makefile 经过了修改,以生成一个与运行中的内核不同的名字。在一个模块插入运行中的内核前,这个模块必须针对运行中的内核进行编译。为此,您必须编辑内核的 Makefile。
例如:uname -r 值是2.6.23.1-42.fc8,那么就设置EXTRAVERSION = -42.fc8
在修改时,请注意看前面几个字段的取值,和uname -r比较。
EXTRAVERSION 的修改非常重要。笔者曾有修改错误,导致模块编译成功却无法插入的经历。
$
make mrproper
$ make oldconfig
$ make (运行时间非常久,可以看个电影打发时间)
$ make modules_install
$ make install
自此内核编译已经结束了。

调试程序:

hello.c
复制内容到剪贴板
代码:
#include <linux/module.h>

#if defined(CONFIG_SMP)
#define __SMP__
#endif

#if defined(CONFIG_MODVERSIONS)
#define MODVERSIONS
#include <linux/modversions.h>
#endif

#include <linux/kernel.h>

int init_module(void)
{
printk(KERN_DEBUG "Hello, kernel!/n");
return 0;
}

void cleanup_module(void)
{
printk(KERN_DEBUG "Good-bye, kernel!/n");
}
Makefile
复制内容到剪贴板
代码:

#makefile for 2.6 linux kernel
obj-m := hello.o
KDIR :=/lib/modules/`uname -a`/build
PWD := $(shell pwd)
default:
$(MAKE) -C $(KDIR) SUBDIRS=$(PWD) modules

$ make
$ ismod hello.ko
$ dmesg | tail n1


说明:1,2.4内核的Makefile和2.6内核的Makefile写法不同。
2,Makefile不可写成makefile会编译不通过。
3,/lib/modules/`uname -a`/build文件是一个链接,链接到你的/usr/src/....内核数的一个目录。


有些文章说还要以下的工具才能起作用:
安装Kernel Headers(头文件)
这个包提供Kernel Headers和makefiles足以应付kernel包中的模块编译。如果你需要安装驱动和某些第三方软件,你应该很需要Kernel Headers。如果一个驱动要求内核源码,那么也许安装Kernel Headers就已经足够了。

Kernel Headers通过安装kernel-devel RPM包就可以得到。这个包可能没有被Fedora自动安装。这个软件包可以从你的Fedora DVD安装或者通过FTP和YUM在线安装。

在Fedora软件仓库和Update软件仓库中在线查找同时确保他们与你的系统相匹配,使用uname命令。示例:
[mirandam@charon ~]$ uname -rm
2.6.23.1-42.fc8 i686

Select: kernel-devel-2.6.23.1-42.fc8.i686.rpm
选择: kernel-devel-2.6.23.1-42.fc8.i686.rpm

如果你已经升级过你的kernel(使用yum),那么建议你使用yum来安装这个软件包。
[mirandam@charon ~]$ sudo yum install kernel-devel

文章出处:http://www.diybl.com/course/6_system/linux/Linuxjs/2008628/128979_5.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值