分享

LDD3 scull模块的编译问题

 败败0619 2012-08-02

编译后出现如下错误提示:

        error: linux/config.h: No such file or directory
我的系统内核版本是2.6.38的,config.h这个头文件貌似在2.6.19的内核版本后就没有了,搜了搜网上的文章,有些人说打过patch的没问题,这是肯定的,如果不打patch,就只有改代码了,又有人说只要在access.c中添加 #include <linux/sched.h>和#include <linux/capability.h>就能通过编译,不过,出现了如下错误:
        error: 'struct task_struct' has no member named 'uid'
        error: 'struct task_struct' has no member named 'euid'
        
下面是我的解决办法:

    1. 在 pipi.c 文件中添加 #include <linux/sched.h>

    2. 去掉 main.c 中的 #include <linux/config.h>或者在/usr/src/linux-source-2.6.38-15-generic/include/linux/下自己的创建一个config.h文件,内容可空也可写成如下:
#ifndef _CONFIG_H_
#define _CONFIG_H_

#endif

    3. 在 access.c 文件中添加 #include <linux/sched.h>

    4. 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
    5. 将Makefile中的
    CFLAGS += $(DEBFLAGS)

      CFLAGS += -I$(LDDINC)

      修改为:

      EXTRA_CFLAGS += $(DEBFLAGS)

     EXTRA_CFLAGS += -I$(LDDINC)

原因是在2.6的内核的版本中所有的 EXTRA_ 变量只在所定义的Kbuild Makefile中起作用。EXTRA_ 变量可 以在Kbuild Makefile中所有命令中使用。    $(EXTRA_CFLAGS) 是用 $(CC) 编译C源文件时的选项。

    例子:          

# drivers/sound/emu10kl/Makefile  

  EXTRA_CFLAGS += -I$(obj)         

 ifdef DEBUG              

EXTRA_CFLAGS += -DEMU10KL_DEBUG          

endif    

该变量是必须的,因为顶层Makefile拥有变量 $(CFLAGS) 并用来作为整个源代码树的编译选项。

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多