jiaoyi8483 2019-10-22 18:47 采纳率: 0%
浏览 1109
已结题

编译内核驱动程序,没有报错但没有生成ko文件,请大家帮看下

系统:centos7.2
内核版本:5.3.7
内核代码:

#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:

  • 写回答

1条回答 默认 最新

  • dabocaiqq 2019-10-24 12:47
    关注
    评论

报告相同问题?

悬赏问题

  • ¥15 js,页面2返回页面1时定位进入的设备
  • ¥50 导入文件到网吧的电脑并且在重启之后不会被恢复
  • ¥15 (希望可以解决问题)ma和mb文件无法正常打开,打开后是空白,但是有正常内存占用,但可以在打开Maya应用程序后打开场景ma和mb格式。
  • ¥15 绘制多分类任务的roc曲线时只画出了一类的roc,其它的auc显示为nan
  • ¥20 ML307A在使用AT命令连接EMQX平台的MQTT时被拒绝
  • ¥20 腾讯企业邮箱邮件可以恢复么
  • ¥15 有人知道怎么将自己的迁移策略布到edgecloudsim上使用吗?
  • ¥15 错误 LNK2001 无法解析的外部符号
  • ¥50 安装pyaudiokits失败
  • ¥15 计组这些题应该咋做呀