免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1954 | 回复: 1
打印 上一主题 下一主题

内核模块的函数间调用问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2016-05-06 15:54 |只看该作者 |倒序浏览
两个模块,其中一个模块调用另一个模块中的函数发送TCP包给服务器。
模块1,实现和服务器的连接,EXPORT出让模块2调用的函数func,函数实现如下:
unsigned int func(u8 MicNr, u16 FrameNr, void *data, u32 len)
{
    int ret = 0;
#if 1
    struct kvec vec;
    struct msghdr msg;

    vec.iov_base = data;
    vec.iov_len  = len;

    memset(&msg,0,sizeof(msg));

    ret = kernel_sendmsg(sock,&msg,&vec,1,len); /*sock 全局变量,已经和服务器连接上 */
    if(ret<0)
    {
        printk("client: kernel_sendmsg error(%d)!\n", ret);
        return ret;
    }
    else if(ret!=len)
    {
        printk("client: ret!=(%d)", len);
    }
}
模块2调用func发送数据。
结果内核会崩溃。
不清楚是什么原因。。。各位大神有何见解?

论坛徽章:
0
2 [报告]
发表于 2016-05-09 14:17 |只看该作者
虽然我没有写过内核模块,但我几年的码龄直觉告诉我 struct msghdr msg; 为什么没有做初始化?然后我瞄了一眼kernel_sendmsg 函数,发现会把第三个参数赋值给第二个参数的msg_iov,并把第四个参数赋值给第二个参数的msg_iovlen。然后我看了下msghdr 结构体发现还有其他成员没有赋值,如果我没猜错,你可能需要把这些成员初始化一下。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP