(转载)2.6内核的编译及内核树的建立---fedora core 5
来源:互联网 发布:java返回json字符串 编辑:程序博客网 时间:2024/06/05 02:13
这段话说出了2.4和2.6两种版本的驱动模块的编写的一个不同之处。问题来自,我用的操作系统是Fedora Core 5。FC5在安装时是不安装源代码树在PC上的。所以我必须在我的FC5上建立内核源代码树。最好在构造内核模块时运行的恰好是目标内核。书上的例子是在版本2.6.10中构造的,用命令uname -r查看,FC5的版本信息为:2.6.15-1.2054_FC5。所以我要建立的内核源代码树的版本为2.6.15。下面详细介绍其建立过程。
1。 下载内核rpm包
rpm包名称:kernel-2.6.15-1.2054_FC5.src.rpm
下载地址:http://download.fedora.redhat.com/pub/fedora/linux/core/5/source/SRPMS/
kernel-2.6.15-1.2054_FC5.src.rpm
2。 安装rpm包
以root身份登陆,以下步骤都以root身份执行。进入保存rpm包的目录下,运行命令:
该命令将rpm的内容写到路径/usr/src/redhat/SOURSE和/usr/src/redhat/SPECS下。
3。 build源码包
#cd /usr/src/redhat/SPECS
#rpmbuild -bp --target i686 kernel-2.6.spec
该命令将会把内核源码树放到目录
/usr/src/redhat/BUILD/kernel-2.6.15/kernel-2.6.15.686
4。 配置内核
Fedora Core 5附带的内核配置文件在内核源码树的configs/目录下。
例如,i686 SMP 配置文件被命名为
configs/kernel-version-i686-smp.config。
但我的PC机为i686,单CPU,所以不是SMP,应该选的内核配置文件是:kernel-2.6.15-i686.config
注意:如果你的PC是单CPU的,而选 configs/kernel-version-i686-smp.config进行内核配置,则在建立代码树后运行后面的insmod hello.ko会失败,失败原因我在文件/var/log/messages中找到如下:
Nov 23 04:55:02 localhost kernel: hello: version magic '2.6.15-1.2054_FC5 SMP 686 REGPARM 4KSTACKS gcc-4.1' should be '2.6.15-1.2054_FC5 686 REGPARM 4KSTACKS gcc-4.1'
一对比:
'2.6.15-1.2054_FC5 SMP 686 REGPARM 4KSTACKS gcc-4.1'
'2.6.15-1.2054_FC5 686 REGPARM 4KSTACKS gcc-4.1‘
看出区别了吧,原因是我选的配置文件不对。我一开始就犯了这个错误错误,结果不得不又从头开始进行漫长的编译。
注意:如果你的PC是单CPU的,而选 configs/kernel-version-i686-smp.config进行内核配置,则在建立代码树后运行后面的insmod hello.ko会失败,失败原因我在文件/var/log/messages中找到如下:
Nov 23 04:55:02 localhost kernel: hello: version magic '2.6.15-1.2054_FC5 SMP 686 REGPARM 4KSTACKS gcc-4.1' should be '2.6.15-1.2054_FC5 686 REGPARM 4KSTACKS gcc-4.1'
一对比:
'2.6.15-1.2054_FC5 SMP 686 REGPARM 4KSTACKS gcc-4.1'
'2.6.15-1.2054_FC5 686 REGPARM 4KSTACKS gcc-4.1‘
看出区别了吧,原因是我选的配置文件不对。我一开始就犯了这个错误错误,结果不得不又从头开始进行漫长的编译。
使用下列命令来将需要的配置文件复制到合适的位置,用来编译:
#cp configs/kernel-version-i686.config .config你也可以在 /lib/modules/version/build/.config 这个位置找到与您当前的内核匹配的 .config 文件。因为build是个连接,其连接目标就是/usr/src/redhat/BUILD/kernel-2.6.15/linux-2.6.15.i686
用以下命令调出内核配置菜单。
#make menuconfig
配置如下:
Loadable module support --->
[*] Enable loadable module support
[*] Module unloading
[ ] Module versioning support (EXPERIMENTAL)
[*] Automatic kernel module loading
5。 修改Makefile
每个内核的名字都包含了它的版本号,这也是 uname -r 命令显示的值。内核Makefile 的前四行定义了内核的名字。为了保护官方的内核不被破坏,Makefile经过了修改,以生成一个与运行中的内核不同的名字。在一个模块插入运行中的内核前,这个模块必须针对运行中的内核进行编译。为此,你必须编辑内核的Makefile。
例如,如果 uname -r 返回字符串 2.6.15-1.2054_FC5,就将 EXTRAVERSION 定义从:
EXTRAVERSION = -prep
修改为:
EXTRAVERSION = -1.2054_FC5
也就是最后一个连字符后面的所有内容。
6。 编译内核
在目录/usr/src/redhat/BUILD/kernel-2.6.15/linux-2.6.15.i686下即Makefile所在的目录使用下面命令编译内核:
#make bzImage 编译内核
#make modules 编译模块
#make modules_install 安装模块这一步可是一个漫长的过程啊,花去我差不多一个小时。
7。 完成“内核树”的安装
以上这一步如果没什么错误,到此就完成了内核代码树的建立。
目录“/usr/src/redhat/BUILD/kernel-2.6.15/kernel-2.6.15.686/”中就是所谓的“内核代码树”,同时“/lib/modules/2.6.15-1.2054_FC5/build”是个符号链接,也指向这个目录,所以这里也可以叫做“内核代码树”。
本文来自:http://blog.chinaunix.net/u1/51650/showart_428982.html 《linux设备驱动程序》学习笔记(2)
- (转载)2.6内核的编译及内核树的建立---fedora core 5
- fedora core 5内核编译
- Fedora Core 5 内核模块编译
- Fedora 14 下内核编译 最新内核 kernel 2.6.38以及删除自己编译的内核
- Fedora 20 为内核建立可用的源码树
- 编译Linux内核:基于Fedora 10的Linux内核编译
- Fedora Core 5 内核源代码安装手记及模块编程
- 内核树的建立
- Linux内核的编译及内核升级(redhat)
- Fedora Core 5 内核源代码安装手记
- Fedora Core 5 内核源代码安装
- Linux 2.6 内核的模块编译环境的建立
- Fedora Core 4 环境下编译内核攻略
- linux内核树的建立 (转)
- linux内核树的建立
- linux内核树的建立
- linux内核树的建立
- linux内核树的建立
- 共享内存实例 :
- 关于InvocationHandler接口
- 35岁以前成功必须戒除的9大恶习
- 最重要的 10 几个J2EE 最佳实践
- 动态库和静态库和运行时库和引入库的区别
- (转载)2.6内核的编译及内核树的建立---fedora core 5
- linux对文件操作命令集合
- 身份证、出生日期、年龄转换
- VC开发辅助工具大收集
- mysql高难度问题:随机查看数据中的记录,并且后在的不能重复前面的?
- php编辑xml文件的三种简单实用方法
- Delphi中根据分类数据生成树形结构的方法
- 摘自网络上总结出的一些开源的技术
- 利用itext创建pdf表格文件(java)