在内核3.17.6上编译scull(LDD3)

本文针对《linux设备驱动程序》(v2.6.10)的源码,在Linux3.17.6环境下进行适配编译。详细介绍了因内核版本升级导致的编译错误及解决方案,包括Makefile配置调整、头文件引入修正等。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

由于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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值