zoukankan      html  css  js  c++  java
  • 设备驱动程序代码高版本内核问题解决

    • 操作系统版本

    root@ubuntu:~/vm_disk_dpdk/study/drive/examples/scull# sudo lsb_release -a

    No LSB modules are available.

    • Distributor ID: Ubuntu

    Description:    Ubuntu 14.04.3 LTS
    Release:        14.04
    Codename:       trusty
    root@ubuntu:~/vm_disk_dpdk/study/drive/examples/scull# uname -a
    Linux ubuntu 3.13.0-66-generic #108-Ubuntu SMP Wed Oct 7 15:20:27 UTC 2015 x86_64 x86_64 x86_64 GNU/Linux

    • 问题一:scripts/Makefile.build:49: *** CFLAGS was changed in "/home/enjoy/vm_disk_dpdk/study/drive/examples/scull/Makefile". Fix it to use ccflags-y.  Stop.

    change
     CFLAGS += $(PSTN_DEF) -Wall -O $(INCLUDES) -fno-common -DTARGET_CATAWBA
    to
     EXTRA_CFLAGS += $(PSTN_DEF) -Wall -O $(INCLUDES) -fno-common -DTARGET_CATAWBA
    and try 

    you could use something like this:
    sed -i 's/^CFLAGS/EXTRA_CFLAGS/' Makefile

    • 问题二:/home/enjoy/vm_disk_dpdk/study/drive/examples/scull/main.c:17:26: fatal error: linux/config.h: No such file or directory

    现在不用config.h,而是autoconf.h

    root@ubuntu:/usr/src/linux-headers-3.13.0-66-generic/include/linux# ln -s ../generated/autoconf.h config.h
    root@ubuntu:/usr/src/linux-headers-3.13.0-66-generic/include/linux# ll config.h 
    lrwxrwxrwx 1 root root 23 Dec 10 01:01 config.h -> ../generated/autoconf.h

    •  问题三:/home/enjoy/vm_disk_dpdk/study/drive/examples/scull/main.c:32:46: fatal error: asm/system.h: No such file or directory

    直接注释,有问题后面接着加别的头文件

    This file was removed in Linux 3.4, commit f05e798ad4c0; its contents have been moved into various other headers.

    It's possible that just removing the #include <asm/system.h> might work, but it's much more likely that your driver is simply incompatible with current Linux versions.

    •  问题四:/home/enjoy/vm_disk_dpdk/study/drive/examples/scull/main.c:556:2: error: unknown field ‘ioctl’ specified in initializer

    这个错误网上搜索发现2.6.38版本内核 file_operation结构体已经删除了ioctl函数,取代的是:
    long (*unlocked_ioctl) (struct file *, unsigned int, unsigned long);
    long (*compat_ioctl) (struct file *, unsigned int, unsigned long);
    file_operation结构体在 include/linux/fs.h定义
    解决方案:
    替换为unlocked_ioctl 即可,注意函数原型,第一个参数不需要(代码中没用到),还有返回值为long类型。

    •  问题五:/home/enjoy/vm_disk_dpdk/study/drive/examples/scull/main.c:652:3: error: implicit declaration of function ‘init_MUTEX’ [-Werror=implicit-function-declaration]

    2.6.25及以后的linux内核版本废除了init_MUTEX函数,新版本使用sema_init函数

    static inline void init_MUTEX (struct semaphore *sem)  
    {  
        sema_init(sem, 1);  
    }  
    •  问题六:include/linux/wait.h:307:31: error: ‘TASK_INTERRUPTIBLE’ undeclared (first use in this function)

    增加头文件:#include <linux/sched.h>

    • 问题七:/usr/src/linux-source-3.2.0/drivers/scull/access.c:98:34: error: ‘SPIN_LOCK_UNLOCKED’未声明(不在函数内)

     将:static spinlock_t scull_u_lock = SPIN_LOCK_UNLOCKED;
    改为:static DEFINE_SPINLOCK(scull_u_lock);

    •  问题八:

    /usr/src/linux-source-3.2.0/drivers/scull/access.c:107:29: 错误: 提领指向不完全类型的指针
    解决办法是在access.c中就加入两个头文件 #include<linux/sched.h>

    • 问题九:‘struct task_struct’ has no member named ‘uid’、‘euid’

    /home/enjoy/vm_disk_dpdk/study/drive/examples/scull/access.c:107:29: error: ‘struct task_struct’ has no member named ‘uid’
    /home/enjoy/vm_disk_dpdk/study/drive/examples/scull/access.c:108:29: error: ‘struct task_struct’ has no member named ‘euid’

    current->uid 修改为 current->cred->uid.val
    current->euid 修改为 current->cred->euid.val

    http://blog.csdn.net/zjq_1990/article/details/51684912

  • 相关阅读:
    Spring MVC+Spring +Hibernate配置事务,但是事务不起作用
    Spring MVC 上传文件
    早安日语1
    Spring MVC学习初篇
    Eclipse中查看JDK源码设置
    Eclipse常见设置及快捷键使用总结(更新中)
    Java中boolean型变量的默认值问题
    [转载]浅析Java中的final关键字
    Eclipse中Outline里各种图标的含义
    [转载]深入理解JAVA的接口和抽象类
  • 原文地址:https://www.cnblogs.com/oracleloyal/p/6003073.html
Copyright © 2011-2022 走看看