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

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

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

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
总算集齐了七龙珠,模块运行起来了,虽然七个问题的解决方法都是网上都有的,但是我还是没有在同一篇文章中全都遇到他们,所以写下来。

转载于:https://www.cnblogs.com/likeyiyy/p/3525688.html

linux3.0.4编译LDD中的scull全过程相关推荐

  1. CentOS6下Xen 4.1的安装(编译linux3.0内核)

    一.    准备工作 a)    一台计算机(是否支持intel-VT或AMD-V均可) 注:支持intel-VT或AMD-V技术可以实现全虚拟化(full virtualization),不支持的话 ...

  2. linux驱动设备信息失败怎么办,Linux设备驱动程序(LDD)中snull的编译问题 《转》

    对LDD中snull程序,编译的时候会有许多问题,鉴于网上还没有合适的解决办法,做此总结,整理知识.本文在debian6.0上运行通过,内核版本为2.6.32. 学习LDD中网络驱动程序部分,理解sn ...

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

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

  4. c++中结构体套结构体用 = {0}初始化编译报错解决办法(用memset或者={})(error: invalid conversion)

    我这有个结构体: VENC_CHN_ATTR_S venc_chn_attr; /* the attribute of the venc chnl*/ typedef struct rkVENC_CH ...

  5. Apache Atlas 2.0.0编译过程中遇到的问题及解决方案

    Atlas安装依赖: 1.Maven 3.5+,下载安装包解压后配置环境变量即可,详细步骤请自行百度,下载地址:http://maven.apache.org/download.cgi 2.Apach ...

  6. Tiny210 编译Linux3.0.8

    一.编译内核 cp mini210-tvp5150_linux_deconfig .config make 没有出现错误,烧到板上,12寸屏不能显示,修改LCD参数为屏的参数,在arch/arm/ma ...

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

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

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

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

  9. IMX6移植Linux3.0.35内核时需要添加的矩阵按键的平台设备信息

    学习交流加 个人qq: 1126137994 个人微信: liu1126137994 学习交流资源分享qq群: 962535112 本文记录在IMX6开发板上移植鼎芯Linux3.0.35内核时,需要 ...

最新文章

  1. EJS脚本中AES应用
  2. C# -- RSA加密与解密
  3. Linux内核分析 02
  4. 为什么TypedReference在幕后
  5. 科普!程序员分不清万圣节和圣诞节?
  6. (王道408考研操作系统)第三章内存管理-第一节3:覆盖与交换
  7. Javascript button onclick和input type button在form中失效解决方案
  8. 已遭利用的Windows 0day漏洞 CVE-2020-1380分析
  9. api获取控件窗口的矩形大小_DevExpress 通用控件系列(4):SimpleButton
  10. 用计算机按余弦,知道余弦的值怎么用计算器求度数
  11. 千峰JAVA逆战班Day34
  12. 手机屏幕分辨率:物理分辨率和逻辑分辨率
  13. 小游戏项目及分工情况
  14. scheduler_tick函数详解
  15. 立体像对空间前方交会算法
  16. 学好算法,有三重境界
  17. linux php直接输出,linux学习之shell脚本 ------- 输入与输出
  18. Spring入门学习手册 1:最简单的反转控制
  19. 周五周末每天1小时,未成年人网游「防沉迷」靠刷脸、大数据验证身份?
  20. 基于android的流动人口管理移动APP(ssm+uinapp+Mysql)

热门文章

  1. 修改ant design vue中的Icon图标颜色
  2. react(82)--方法写在effects里面
  3. [css] css中的url()要不要加引号?说说你的理解
  4. 前端学习(2834):样式引入
  5. “约见”面试官系列之常见面试题之第七十三篇之js文件中import中加{}和不加{}的区别(建议收藏)
  6. “约见”面试官系列之常见面试题第三十八篇之js常见的继承方式(建议收藏)
  7. 前端学习(1818):前端面试题之封装函数之进行字符串驼峰的命名
  8. 前端学习(1738):前端调试值之快速切换pc和手机端
  9. 前端学习(1403):多人管理23错误unexpected identifier
  10. 前端学习(549):node的 http模块