fc5自己不代源包,只能通过RPM构建source8.6. 为内核开发作准备
Fedora Core 5 与旧版本不同,不包含 kernel-source 软件包。已配置的源代码可以按照内核配置一节的步骤得到。
[注意] 这些步骤指的是当前运行中的内核
为了简化下面的指令,假设您需要配置内核为使用当前运行中的内核的配置。在下面的步骤中,短语 version 指的是使用 uname -r 命令显示的内核版本。
需要使用内核源代码的 Fedora Core 用户可以在内核 .src.rpm 软件包中找到它们。要从文件释放源码树,执行下面的命令:
[小心] 不要以超级用户身份构建软件包
以超级用户身份构建软件包是极其危险的,不应当这样做,即使是内核。下面的操作使您可以以普通用户身份构建内核。很多教程以 /usr/src/linux 作为内核的源码位置,如果想遵循这些操作,可以替换为 ~/rpmbuild/BUILD/kernel-<version>/linux-<version>。
1.
在个人目录准备 RPM 软件包构建环境,运行下面的命令:
su -c 'yum install fedora-rpmdevtools'
fedora-buildrpmtree
提示时输入 root 的密码。
2.
从下列来源之一获取 kernel-version.src.rpm 文件:
*
SRPMS 文件,包含在合适的 SRPMS CD iso 镜像文件中。
*
下载内核软件包的 HTTP 或 FTP 站点
*
执行这个命令:
su -c 'yum install yum-utils'
su -c 'yumdownloader --source kernel'
提示时输入 root 的密码。
3.
安装 kernel-<version>.src.rpm,运行命令:
rpm -Uvh kernel-<version>.src.rpm`
这个命令将 RPM 内容写到 ${HOME}/rpmbuild/SOURCES 和 ${HOME}/rpmbuild/SPECS, 这里 ${HOME} 是您的个人目录。
[提示] 硬盘空间需求
完整的内核构建过程可能需要您的个人目录有几个吉的存储空间。
4.
使用这样的命令来准备内核源代码:
cd ~/rpmbuild/SPECS
rpmbuild -bp --target $(uname -m) kernel-2.6.spec
内核源码树位于 ${HOME}/rpmbuild/BUILD/kernel-<version>/ 目录。
5.
Fedora Core 附带的内核配置文件在 configs/ 目录。例如,i686 SMP 配置文件被命名为 configs/kernel-version-i686-smp.config。使用下列命令来将需要的配置文件复制到合适的位置,用来编译:
cp configs/<desired-config-file> .config
您也可以在 /lib/modules/version/build/.config 这个位置找到与您当前的内核匹配的 .config 文件。
6.
每个内核的名字都包含了它的版本号,这也是 uname -r 命令显示的值。内核 Makefile 的前四行定义了内核的名字。为了保护官方的内核不被破坏,Makefile 经过了修改,以生成一个与运行中的内核不同的名字。在一个模块插入运行中的内核前,这个模块必须针对运行中的内核进行编译。为此,您必须编辑内核的 Makefile。
例如,如果 uname -r 返回字符串 2.6.15-1.1948_FC5,就将 EXTRAVERSION 定义从:
EXTRAVERSION = -prep
修改为:
EXTRAVERSION = -1.1948_FC5
也就是最后一个连字符后面的所有内容。
7.
执行这个命令:
make oldconfig
接下来就没什么差别了。
8.7. 只构建内核模块
为运行中的内核构建内核模块,例如您自己的设备驱动,不需要完整的源码树。例如,要构建 foo.ko 模块,在包含 foo.c 文件的目录中创建下面的 Makefile :
obj-m := foo.o
KDIR := /lib/modules/$(shell uname -r)/build
PWD := $(shell pwd)
default:
$(MAKE) -C $(KDIR) M=$(PWD) modules
执行 make 命令来编译 foo.ko 模块就可以了。
为了编译内核,安装的时候需要选择编译器GCC(在开发里面)