Chinaunix首页 | 论坛 | 博客
  • 博客访问: 575950
  • 博文数量: 836
  • 博客积分: 10000
  • 博客等级: 上将
  • 技术积分: 4995
  • 用 户 组: 普通用户
  • 注册时间: 2008-08-22 16:55
文章分类

全部博文(836)

文章存档

2008年(836)

我的朋友

分类: LINUX

2008-08-22 17:45:52

 
LinuxDeviceDriver(ldd)是本内核开发入门书籍.其中scull是第一个例子模块.所以学习scull是很重要的.由于内核开发变动较快.所以ldd书中的一些例子已经不能在现有开发环境中编译了.本文说明如何在fedora7平台修改scull程序,使他能够顺利编译.
Fedora安装时没有内核开发的部分.所以我们先要安装内核开发相关包.

1在fedoar官方站点的ftp中下载和你自己内核版本相同的源代码和devel包
比如我通过uname-r命令看到我的内核版本是2.6.22.1-41.fc7
于是就下载
kernel-devel-2.6.22.1-41.fc7
kernel-2.6.21-1.3194.fc7.src.rpm
然后安装这两个包.kernel-devel可以直接安装.如果要装src的话还要rpmbuild一下.把补丁打进去.具体方法网上有很多关于内核编译的文章.

2.下载ldd第三版的源代码

接着把它解压缩tarzxvfexamples.tar.gz
进入scull目录
我们可以看到有main.c文件
打开他.删除include中的linux/config.h由于在2.6.19版本以后config.h文件被取消了.所以以后有config.h的地方都会报错
接下来再make,还是有错.发现是if(!capable(CAP_SYS_ADMIN))这里.CAP_SYS_ADMIN找不到.在网上查一下,发现这个宏是定义在linux/capability.h中的
于是加#include
再编译还是不通过.原因还是有宏没有定义.不过这次是在access.c中.
根据未定义的宏查找.发现他们在inux/capability.h和sched.h.两个文件中

在access.c中加入
#include
#include
改正了这些以后
make回车

下面是输出
make-C/lib/modules/2.6.22.1-41.fc7/buildM=/home/hide1713/Desktop/kernel/examples/scullLDDINC=/home/hide1713/Desktop/kernel/examples/scull/../includemodules
make[1]:Enteringdirectory`/usr/src/kernels/2.6.22.1-41.fc7-i686''
CC[M]/home/hide1713/Desktop/kernel/examples/scull/access.o
LD[M]/home/hide1713/Desktop/kernel/examples/scull/scull.o
Buildingmodules,stage2.
MODPOST1modules
CC/home/hide1713/Desktop/kernel/examples/scull/scull.mod.o
LD[M]/home/hide1713/Desktop/kernel/examples/scull/scull.ko
make[1]:Leavingdirectory`/usr/src/kernels/2.6.22.1-41.fc7-i686''

看到这样就是编译好了.

我们用chmod xscull_loadscull_unload把这俩个脚本变为可执行
./scull_load
/sbin/lsmod
怎么样.顺利装入内核了吧.上面的内容是我凭记忆写的.如果和实际情况有出入请还是按照上面的方法.先差是哪个定义引起的.再把对应的头文件加入就行了

阅读(393) | 评论(0) | 转发(0) |
0

上一篇:Linux 压缩解压缩

下一篇:体验Suse Linux

给主人留下些什么吧!~~