一个简单的驱动例子--insmod 有误,求助!

发布于 2022-07-24 19:46:41 字数 1859 浏览 19 评论 8

code:

#include <linux/module.h>
#include <linux/init.h>
#include <linux/kernel.h>
#include <asm/errno.h>
#include <linux/fs.h>
#include <linux/string.h>
#include <linux/slab.h>
#include <asm/unistd.h>
#include <linux/types.h>
#include <sys/syscall.h>
#include <linux/dirent.h>

static int driver_open(struct inode *i, struct file *f)
{
        printk("<1> open function! n");
        return 0;
}

static struct file_operations fops = {
        open:driver_open,
};

int my_init1(void)
{
        if (register_chrdev(30,"p182", &fops))
                return -EIO;
        return 0;
}

void my_cleanup1(void)
{
        unregister_chrdev(30,"p182");
}

module_init(my_init1);
module_exit(my_cleanup1);

Makefile:

KERNELDIR = /usr/src/linux-2.4.20-8

LD = gcc

CFLAGS=-D__KERNEL__ -I$(KERNELDIR)/include -o -Wall

p182.o : p182.c
        $(LD) $(CFLAGS) -c  $^ -o $@
clean:
        rm -f *.o *.core

我的内核版本是2.4.20-8

编译通过,但是insmod p182.o 后,出现提示:

[root@songyw root]# make
gcc -D__KERNEL__ -I/usr/src/linux-2.4.20-8/include -o -Wall -c  p182.c -o p182.o[root@songyw root]# insmod p182.o
p182.o: couldn't find the kernel version the module was compiled for
[root@songyw root]#

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(8

倾城花音 2022-07-24 21:04:24
  1. CFLAGS=-D__KERNEL__ -I$(KERNELDIR)/include -o -Wall

复制代码
改为

  1. CFLAGS=-D__KERNEL__ -DMODULE -I$(KERNELDIR)/include -Wall

复制代码
试试?

纸伞微斜 2022-07-24 21:04:24

还是不行!!!!!

回首观望 2022-07-24 21:04:24

你没有包含:#include <linux/config.h>
把这个包含上就好了。

誰ツ都不明白 2022-07-24 21:04:01

还是上面的例子,修改了几处结果就出错了!

code:

#include <linux/module.h>
#include <linux/init.h>
#include <linux/kernel.h>
#include <asm/errno.h>
#include <linux/fs.h>
#include <linux/string.h>
#include <linux/slab.h>
#include <asm/unistd.h>
#include <linux/types.h>
#include <sys/syscall.h>
#include <linux/dirent.h>
  
MODULE_AUTHOR("SONGYW ");    /* 增加的*/
MODULE_LICENSE("SONGYW ");    /*增加的*/

static int driver_open(struct inode *i, struct file *f)
{
        printk("<1> open function! n");
        return 0;
}

static struct file_operations fops11 = {
        open : driver_open,
};

int my_init1(void)
{
        if (register_chrdev(30,"p182", &fops11))
                return -EIO;
        return 0;
}

void my_cleanup1(void)
{
        unregister_chrdev(30,"p182");
}

module_init(my_init1);
module_exit(my_cleanup1);

Makefile:

KERNELDIR = /usr/src/linux-2.4.8-20

LD = gcc

CFLAGS=-D__KERNEL__ -I$(KERNELDIR)/include -o -Wall

p182.o : p182.c
        $(LD) $(CFLAGS) -c  $^ -o $@
clean:
        rm -f *.o *.core
/////////////////////////////////////////////////////////////

make后:

[root@songyw root]# make
gcc -D__KERNEL__ -I/usr/src/linux-2.4.8-20/include -o -Wall -c  p182.c -o p182.oIn file included from /usr/include/linux/fs.h:23,
                 from p182.c:6:
/usr/include/linux/string.h:8:2: warning: #warning Using kernel header in userland!
p182.c:17: warning: `struct file' declared inside parameter list
p182.c:17: warning: its scope is only this definition or declaration, which is probably not what you want
p182.c:17: warning: `struct inode' declared inside parameter list
p182.c:23: variable `fops11' has initializer but incomplete type
p182.c:24: unknown field `open' specified in initializer
p182.c:24: warning: excess elements in struct initializer
p182.c:24: warning: (near initialization for `fops11')
p182.c:23: storage size of `fops11' isn't known
make: *** [p182.o] Error 1

求助!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
郁闷!!!!!!!!!!!!!!!!!!!!!!!!!!

轻拂→两袖风尘 2022-07-24 21:03:18

有的
[root@songyw linux]# cat version.h
#include <linux/rhconfig.h>
#if defined(__module__smp)
#define UTS_RELEASE "2.4.20-8smp"
#elif defined(__module__BOOT)
#define UTS_RELEASE "2.4.20-8BOOT"
#elif defined(__module__bigmem)
#define UTS_RELEASE "2.4.20-8bigmem"
#else
#define UTS_RELEASE "2.4.20-8"
#endif
#define LINUX_VERSION_CODE 132116
#define KERNEL_VERSION(a,b,c) (((a) << 16) + ((b) << + (c))

耶耶耶 2022-07-24 20:44:50

看看你的kernel源码目录, 有没有生成include/linux/version.h
如果没有,就先编译内核

蘸点软妹酱 2022-07-24 19:54:52

还是不行,还是同样的错误!

尽揽少女心 2022-07-24 19:53:34

加一个

  1. #include <linux/version.h>

复制代码
再试试看

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文