linux 编译驱动程序 没有生成ko文件 大家帮看下 5C

系统:centos
内核:5.3.7

代码:
sockopt_test.h

#ifndef __SOCKOPT_TEST_H_
#define __SOCKOPT_TEST_H_

#define SOCKOPT_BASE                 (10240)
#define SOCKOPT_SET_MIN              ((SOCKOPT_BASE) + 1)
#define SOCKOPT_SET_BUFFER                ((SOCKOPT_BASE) + 1)
#define SOCKOPT_SET_MAX              ((SOCKOPT_BASE) + 2)

#define SOCKOPT_GET_MIN              ((SOCKOPT_BASE) + 1)
#define SOCKOPT_GET_BUFFER                ((SOCKOPT_BASE) + 1)
#define SOCKOPT_GET_MAX              ((SOCKOPT_BASE) + 2)

#endif

sockopt_test.c:

#include <linux/init.h>
#include <linux/module.h>
#include <linux/netfilter.h>
#include "sockopt_test.h"

#define BUFFER_LEN_MAX 1024
static char buffer[BUFFER_LEN_MAX];

/* setsockopt 回调处理函数 */ 
int setsockopt_handler(struct sock *sk, int optval, void __user *user, unsigned int len)
{

        switch(optval)
        {
            case SOCKOPT_SET_BUFFER:
                if ( copy_from_user((void*)&buffer, user, len) != 0 ) 
                {
                        return -EFAULT;
                }

                break;
            default:
                printk(KERN_INFO "invalid setsockopt opt : %d\n", optval);
                return -EFAULT;
        }

        printk(KERN_INFO "buffer[]: %s\n", buffer);
        return 0;
}

/* getsockopt 回调处理函数 */  
int getsockopt_handler(struct sock *sk, int optval, void __user *user, int *len)
{
        unsigned int cpy_len;

        cpy_len = *len > BUFFER_LEN_MAX ? BUFFER_LEN_MAX : *len;
        switch(optval)
        {
            case SOCKOPT_GET_BUFFER:
                if(copy_to_user(user, (void*)&buffer[0], cpy_len) != 0) 
                {
                        printk(KERN_INFO "getsockopt_handler fail \n");
                        return -EFAULT;
                }

                    break;
            default:
                    printk(KERN_INFO "unrecognized getsockopt optvalue : %d\n", optval);
                    return -EFAULT;
        }

        return 0;
}

/* 定义nf_sockopt_ops结构体 */ 
static struct nf_sockopt_ops sockopt_ops_test =
{
        .pf                     = PF_INET,
        .set_optmin             = SOCKOPT_SET_MIN,
        .set_optmax             = SOCKOPT_SET_MAX,
        .set                    = setsockopt_handler,
        .get_optmin             = SOCKOPT_GET_MIN,
        .get_optmax             = SOCKOPT_GET_MAX,
        .get                    = getsockopt_handler,
};

static __init int sockopt_test_init(void)
{
        int result;
        /* 注册sockopt */
        result = nf_register_sockopt(&sockopt_ops_test);
        if(result != 0) 
        {
                printk("register sockopt error!\n");
        }

        printk("sockopt_test register success !\n");
        return 0;
}

static __exit void sockopt_test_exit(void)
{
        /* 注销sockopt */
        nf_unregister_sockopt(&sockopt_ops_test);
        printk("sockopt_test unregister\n");
}

module_init(sockopt_test_init);
module_exit(sockopt_test_exit);

MODULE_LICENSE("GPL");
MODULE_AUTHOR("Stone");

MakeFile:

obj-m :=sockopt_test.o  
KERNEL :=/usr/src/kernels/linux-5.3.7/  
PWD :=$(shell pwd)  
modules :  
    $(MAKE) -C $(KERNEL) M=$(PWD) modules  
.PHONEY:clean  
clean :  
    rm -f *.o *.ko

编译结果:
图片说明

2个回答

$(MAKE)  前面应该是 TAB键,当前摘录的代码是4个空格。 
jiaoyi8483
jiaoyi8483 是tab键没错,这是我从txt复制的,但在代码里是tab.好烦 这个问题难了我几天了
3 个月之前 回复

图片说明
只改了Makefile中 kernel的路径,可以生成.ko文件。

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问

相似问题

2
一堆.c和.h文件 怎么编译生成exe文件呢
1
vs编译生成的程序,程序运行比vc生成的程序,运行时间慢
2
文件名像1.1之类的C/C++文件经过vscode编译为何生成不了exe文件?
1
vs2017的win32控制台应用程序生成的预编译文件不是stdafx.h,而是pch.h?
1
代码在经历过编译之后,提示没有找到资源文件
0
怎么在wins系统上交叉编译生成linux(不是嵌入式平台,想找一个gcc交叉编译器)文件?
1
Dev-C++编译简单程序后可执行文件超过1M?
2
配置Linux编译环境时出现arm-linux-gnueabihf-gcc: fatal error: no input files问题
3
gradle build 编译生成的jar 包和源码不一致
0
linux下编译的Qt程序如何加载输入法插件。
3
用visual studio2019编译Linux程序,点调试后显示无法连接到远程服务
1
Linux sh文件中调用外部程序的问题
0
Linux下为什么在编译时指定了动态库路径但为什么还要先将动态库复制到/lib/下面
3
编译Linux程序出现“对‘pthread_create’未定义的引用”。
2
Intel ISPC编译器生成的.h与.obj文件如何使用?
1
如何使用codewarrior的编译工具,在windows下自动编译
1
为什么在ubuntu中eclipse编译c程序时makefile文件报错"recipe for target failed"
2
VS2019无法启动程序 系统找不到指定的文件???
1
code blocks可以编译但是到Linux里的vim时无法编译成功是怎么回事?
1
编译内核驱动程序,没有报错但没有生成ko文件,请大家帮看下