红联Linux门户
Linux帮助

scull的编译

发布时间:2008-09-17 15:45:05来源:红联作者:chris078426
我也是刚刚才做完的这个驱动程序,做为linux初学者,和大家分享一下,高手就不用看了。下面是从本站找的,但是我
也是照上面说的做的,没有办法编译通过,找也好长时间,哈哈,本人能力有限。
我在编译的时候出的错是:错误:(5ty(
access.c:106: 错误:提领指向不完全类型的指针
TASK_INTERRUPTIBLE
错误:提领指向不完全类型的指针
我的解决办法是把所有的(main.c and pipe.c下的)头文件都copy到access.c中,在编译,。。。。。。。。。。。)3):o5:ty(通过了。希望能对你有帮助。
Fedora 7下编译 linux设备驱动3ed scull模块 Linux Device Driver(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第三版的源代码
http://examples.oreilly.com/linuxdrive3/examples.tar.gz
接着把它解压缩 tar zxvf examples.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/../include modules
make[1]: Entering directory `/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
Building modules, stage 2.
MODPOST 1 modules
CC /home/hide1713/Desktop/kernel/examples/scull/scull.mod.o
LD [M] /home/hide1713/Desktop/kernel/examples/scull/scull.ko
make[1]: Leaving directory `/usr/src/kernels/2.6.22.1-41.fc7-i686'

看到这样就是编译好了.

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







测试:
insmod scull.ko
test the scull >/dev/scull
dd if=/dev/scull of=test.test
lsmod /*能看到scull*/
rmmod scull /**/
lsmod
cat test.test
能看到>前面输入的字符。:987w(1
文章评论

共有 1 条评论

  1. zidscen 于 2008-09-17 15:50:58发表:

    路过学习一下