在内核3.17.6上编译scull(LDD3)

来源:互联网 发布:美萍数据库密码 编辑:程序博客网 时间:2024/05/30 05:10
由于Linux内核版本更新的原因,《linux设备驱动程序》(v2.6.10)提供的源码无法直接使用,下面是我在linux 3.17.6编译成功的修改步骤,对于内核2.6.30以后均有参考价值。

1. scripts/Makefile.build:46: *** CFLAGS was changed in "examples/scull/Makefile". Fix it to use EXTRA_CFLAGS
解决方法:将 Makefile 中的 CFLAGS 改为 EXTRA_CFLAGS

2. examples/scull/main.c:17:26: error: linux/config.h: 没有该文件或目录
解决方法:将 main.c 中的这条 include 语句注释掉。

3./opt/ldd3_examples/scull/main.c:32:46: fatal error: asm/system.h: No such file or directory
 #include <asm/system.h>  /* cli(), *_flags */
解决方法:将 main.c 中的这条 include 语句注释掉。

4./opt/ldd3_examples/scull/pipe.c: In function 'scull_p_read':
include/linux/wait.h:321:31: error: 'TASK_INTERRUPTIBLE' undeclared (first use in this function)
  ___wait_event(wq, condition, TASK_INTERRUPTIBLE, 0, 0,  \
解决方法:在scull.h添加#include <linux/sched.h>

5./opt/ldd3_examples/scull/access.c:83:2: error: unknown field 'ioctl' specified in initializer
  .ioctl =       scull_ioctl,
解决方法:已没有ioctl成员,注掉即可

6./opt/ldd3_examples/scull/access.c:98:34: error: 'SPIN_LOCK_UNLOCKED' undeclared here (not in a function)
 static spinlock_t scull_u_lock = SPIN_LOCK_UNLOCKED;
解决方法:
//static spinlock_t scull_u_lock = SPIN_LOCK_UNLOCKED;
改为static DEFINE_SPINLOCK(scull_u_lock);

7./opt/ldd3_examples/scull/access.c:106:29: error: 'struct task_struct' has no member named 'uid'
    (scull_u_owner != current->uid) &&  /* allow user */
/opt/ldd3_examples/scull/access.c:107:29: error: 'struct task_struct' has no member named 'euid'
    (scull_u_owner != current->euid) && /* allow whoever did su */
解决方法:
因为内核版本的升级,struct task_struct发生了变动,uid和euid放到了cred域下.
修改,做如下替换
current->uid 替换成current->cred->uid.val
current->euid替换成current->cred->euid.val

0 0