中国Linux公社论坛's Archiver

iceboy0037 发表于 2008-12-15 13:29

简单驱动编译问题请教

我在编译下面HELLO时,能够通过,且可正常装载。
#include <linux/init.h>
#include <linux/module.h>
MODULE_LICENSE("Dual BSD/GPL");

static int hello_init(void)
{
        printk("Hello, iceboy !\n");
        return 0;
}

static void hello_exit(void)
{
        printk("Goodbye, iceboy !\n");
}

module_init(hello_init);
module_exit(hello_exit);


但是下面的简单字符驱动,却编译不过。如下:
#define _KERNEL_
#define MODULE

#include <linux/module.h>
#include <linux/kernel.h>
#include <linux/fs.h>

ssize_t test_read(struct file * fp, char *cp , size_t size, loff_t * off)
{
return 0;
}

struct file_operations test = {
read:test_read,
};

int init_module(void)
{
return 0;
}

void cleanup_module(void)
{
}

报的错误是:
xtest.C:23: variable `file_operations test' has initializer but incomplete type
xtest.C:23: storage size of `test' isn't known

我的内核是2.4的,编译环境:
gcc version 3.2.2 20030222 (Red Hat Linux 3.2.2-5)

大侠们,多多指教啊!

还有个问题,加上_kernel_ 就上面一个错,但改成__kernel__时,就一大推头文件包含错误。

iceboy0037 发表于 2008-12-17 15:44

哎,没人愿意帮忙吗 ?

jiangtao9999 发表于 2008-12-17 17:06

帮不了你啊……
第一个问题貌似是变量初始化不对,可能是没有初始化正确。
第二个应该就是纯粹的语法错了。

iceboy0037 发表于 2008-12-18 15:41

感谢楼上的答案!
继续努力解决中。。。

iceboy0037 发表于 2008-12-22 10:29

已解决。
后缀.C改为.c即可!

jiangtao9999 发表于 2008-12-22 11:14

:shock:

页: [1]

Powered by Discuz! Archiver 6.1.0F  © 2001-2007 Comsenz Inc.