问题1:error: linux/config.h: No such file or directory
在编ldd3的模块时,提示找不到此文件,在/include/linux下确实没有,网上搜索了下,有人说此文件在2.6.19后的内核不存在了,注释掉即可,显然这是不可行的,既然包含此头文件那么肯定要用里面的东西,后搜索到一个外国人的提问,正是这个问题,回答如下:
=======================================================================
The config.h is now called autoconf.h. You could make a symbolic link to solve this:
Code:
cd /usr/src/linux-headers-2.6.27-7-generic/include/linux
ln -s autoconf.h config.h
符号链接是个好东西,得进一步了解了解。
符号链接是个好东西,得进一步了解了解。
问题2:scull/pipe.c:131: error: ‘TASK_INTERRUPTIBLE’ undeclared (first use in this function)
原因缺少头文件 #include <linux/sched.h> 添加后即可通过编译 !
问题3:/home/linux/xz/test/ldd3/examples/scull/access.c: In function ‘scull_u_open’:
/home/linux/xz/test/ldd3/examples/scull/access.c:106: error: dereferencing pointer to incomplete type
/home/linux/xz/test/ldd3/examples/scull/access.c:106: error: dereferencing pointer to incomplete type
原因缺少头文件 #include <linux/sched.h> 添加后即可通过编译 !
问题4:access.c:109: error: ‘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
问题5:
CFLAGS
CFLAGS += $(DEBFLAGS)
CFLAGS += -I$(LDDINC)
修改为:
EXTRA_CFLAGS += $(DEBFLAGS)
EXTRA_CFLAGS += -I$(LDDINC)