按照惯例,我是应该先写一些本章的收获的,不过太晚了。

在看完第三章之后开始编译,错误一堆,几乎崩溃,幸亏经过不断的百度,总算解决了问题,我发现

我遇到问题比较多,算是集中七个龙珠了吧,感谢先行的大神们。

1. CFLAGS was changed in "examples/scull/Makefile". Fix it to use EXTRA_CFLAGS.  Stop.

由于LDD3使用的是2.6.10内核,很多东西已经发生了变化,这里提示我们修改Makefile中的CFLAGS,用EXTRA_CFLAGS代替,照它说的做就可以。

2、提示找不到文件linux/config.h:

在2.6.19开始的内核中删除了config.h文件,因此只要在mian.c中注释掉#include<linux/config.h>即可。

3. unknown field ‘ioctl’ specified in initializer

linux2.6.29和linux2.6.38的内核在file_operations结构发生了变化,否则在linux2.6.38内核中,继续使用.ioctl成员,编译时就会报错:error: unknown field 'ioctl' specified in initializer,struct file_operations结构体定义在include/linux/fs.h文件中。

linux2.6.38内核取消了原有的ioctl成员,添加来新的成员

  1. long (*unlocked_ioctl) (struct file *, unsigned int, unsigned long);    原来的ioctl 但是返回值变为long
  2. long (*compat_ioctl) (struct file *, unsigned int, unsigned long); 内核空间64位,用户空间32位

会出现 warning: initialization from incompatible pointer type

出现此种warnning 的原因  “不兼容的指针类型初始化”

是你定义的函数类型与接口函数的类型不一样,如把返回值 long 定义成了 int

这两个问题都对驱动有影响。

static const struct file_operations 。。。 = {
。。。。。。
   .unlocked_ioctl = 。。。,
。。。。。。
};

4. 错误: 隐式声明函数‘init_MUTEX’ [-Werror=implicit-function-declaration]

在新版本的linux内核中,init_mutex已经被废除了,新版本使用sema_init函数。

注意:多处调用这个函数。

5.error: ‘TASK_INTERRUPTIBLE’ undeclared (first use in this function)
原因缺少头文件 #include <linux/sched.h> 添加后即可通过编译 !
注意:多处调用这个函数。
 
6. error: ‘SPIN_LOCK_UNLOCKED’ undeclared here (not in a function)
 
是说SPIN_LOCK_UNLOCKED不被认识了,其实也是被废弃了,改用DEFINE_SPINLOCK即可,如
/*static spinlock_t scull_w_lock = SPIN_LOCK_UNLOCKED;*改成下面到方式/
static DEFINE_SPINLOCK(scull_w_lock);
注意:还有scull_u_lock,scull_c_lock做同样的修改。
 
7. ‘struct task_struct’ has no member named ‘uid’
struct task_struct定义在include/linux/sched.h中,原来task_struct结构体定义有所改动,将uid和euid等挪到 cred中,见            
       include/linux/sched.h和include/linux/cred.h。
    因此只需要将报error的代码所在的文件做如下修改
    current->uid 修改为 current->cred->uid
    current->euid 修改为 current->cred->euid
 
总算集齐了七龙珠,模块运行起来了,虽然七个问题的解决方法都是网上都有的,但是我还是没有在同一篇文章中全都遇到他们,所以写下来。

linux3.0.4编译LDD中的scull全过程的更多相关文章

  1. android4.0浏览器在eclipse中编译的步骤

    工程源码: 注意: 如果下载已经修过的源码,只要进行3.4.8步骤就应该可以了. eclipse版本:adt-bundle-windows (Android Developer Tools Build ...

  2. VS2015+OpenGL4.0开发编译时弹出错误:glaux.lib(tk.obj) : error LNK2019: 无法解析的外部符号 _sscanf,该符号在函数 _GetRegistrySysColors@8 中被引用

    一.问题描述: VS2015+OpenGL4.0开发编译时弹出如下所示的错误: 1>glaux.lib(tk.obj) : error LNK2019: 无法解析的外部符号 _sscanf,该符 ...

  3. linux-3.0内核移植到fl2440开发板(以MINI2440为模板)

    我们的fl2440开发板使用的是s3c2440的芯片,与MINI2440十分相似,因此需要改动的地方不多,移植也比较容易. 1.[weishusheng@localhost kernel]$ sudo ...

  4. linux-3.0下input_dev模型按键驱动

    该代码在FL2440开发板上测试通过,为方便教学,将驱动中的platform_device和platform_driver故意分为两个驱动模块. [guowenxue@centos6 input_kb ...

  5. 在Debian Wheezy 7.3.0上编译安装3.12.14内核

    最近需要对Linux的一个内核模块进行调整实验,故决定先在虚拟机中完成编译调试工作,最后再在真实的系统上进行测试.为了防止遗忘,把过程记录于此. 1. 准备系统环境 首先从官网下载最新版的Virtua ...

  6. Linux内核源码分析--内核启动之(5)Image内核启动(rest_init函数)(Linux-3.0 ARMv7)【转】

    前面粗略分析start_kernel函数,此函数中基本上是对内存管理和各子系统的数据结构初始化.在内核初始化函数start_kernel执行到最后,就是调用rest_init函数,这个函数的主要使命就 ...

  7. Linux内核源码分析--内核启动之(6)Image内核启动(do_basic_setup函数)(Linux-3.0 ARMv7)【转】

    原文地址:Linux内核源码分析--内核启动之(6)Image内核启动(do_basic_setup函数)(Linux-3.0 ARMv7) 作者:tekkamanninja 转自:http://bl ...

  8. Linux内核源码分析--内核启动之(4)Image内核启动(setup_arch函数)(Linux-3.0 ARMv7)【转】

    原文地址:Linux内核源码分析--内核启动之(4)Image内核启动(setup_arch函数)(Linux-3.0 ARMv7) 作者:tekkamanninja 转自:http://blog.c ...

  9. 《LINUX3.0内核源代码分析》第二章:中断和异常 【转】

    转自:http://blog.chinaunix.net/uid-25845340-id-2982887.html 摘要:第二章主要讲述linux如何处理ARM cortex A9多核处理器的中断.异 ...

随机推荐

  1. 【USACO】Milking Cows

    Three farmers rise at 5 am each morning and head for the barn to milk three cows. The first farmer b ...

  2. perl install module as non-root user

    install to local directory. 1. cpan 初始化,不用local::lib,mannual就行,其他auto2. 修改cpan 配置文件 cpan > o conf ...

  3. C# 获取所有打印机

    List<string> print = Cprinter.GetLocalPrinter(); /// <summary> /// 获取所有打印机 /// </summ ...

  4. DHT11温湿度传感器

    一.硬件介绍 RH是相对湿度,是用零点温度来定义的,一般,RH在45%~65%之间最为合适. 注:NTC为热敏电阻,输出为:单总线数字信号,单线双向串行通讯. 注:上拉电阻情况下,配置为开漏输出,可以 ...

  5. Velocity模板中的注释

    Velocity ——VTL模板中的注释 注释允许在模板中包含描述文字,而这些文字不会被放置到模板引擎的输出中.注释是一种有效的提醒自己和向别人解释你的VTL语句要做什么事情的方法.你也可以把注释用来 ...

  6. Eclipse附加项目中的某个jar包的源码

    1.这里以web项目为例,打开项目应用的jar包:如下图 2.在想要引入源码的jar包上右键>属性(Properties)

  7. 51nod1678 lyk与gcd

    容斥定理所以可以用莫比乌斯函数来搞.逆向思维答案等于总和减去和他互质的.那么设f[i]=∑a[j] i|j.ans[i]=sum- ∑mo[j]*f[j] 跟bzoj2440那道题挺像的都是利用莫比乌 ...

  8. 博客已搬家至 hate13.com

      博客园停止更新,新博客链接:hate13.com 欢迎访问~

  9. PDO防注入原理分析以及使用PDO的注意事项 (转)

    我们都知道,只要合理正确使用PDO,可以基本上防止SQL注入的产生,本文主要回答以下两个问题: 为什么要使用PDO而不是mysql_connect? 为何PDO能防注入? 使用PDO防注入的时候应该特 ...

  10. dede 去power by dedecms

    include/dedesql.class.php 下的$arrs1和$arrs2的全注释掉