【发布时间】:2016-06-27 05:01:31
【问题描述】:
我正在尝试在 linux 内核中运行 linux 内核模块。 但是发生了什么,有时它成功并运行,有时插入模块失败并出现错误:
insmod: ERROR: could not insert module netlinkKernel.ko: No child processes
内核日志显示打印失败
Error creating socket nl_sk
我认为这是一个常见错误,我认为它与模块无关。
我只是在模块中创建两个 netlink 套接字。当我评论第二个套接字创建行时,使用一个 netlink 套接字,模块工作正常,但是在下面的代码中粘贴两个时,它已经给出了这个错误,然后再次,当我尝试使用一个 netlink 套接字的模块时,然后它也失败了,我必须重新启动系统。
static int __init hello_init(void) {
printk("Entering: %s\n",__FUNCTION__);
// This is for 3.6 kernels and above.
struct netlink_kernel_cfg cfg = {
.input = hello_nl_recv_msg,
};
struct netlink_kernel_cfg cfg1 = {
.input = hello_nl_recv_msg1,
};
nl_sk = netlink_kernel_create(&init_net, NETLINK_USER, &cfg);
nl_sk1 = netlink_kernel_create(&init_net, NETLINK_USER1, &cfg1);
//nl_sk = netlink_kernel_create(&init_net, NETLINK_USER, 0, hello_nl_recv_msg,NULL,THIS_MODULE);
if(!nl_sk)
{
printk(KERN_ALERT "Error creating socket nl_sk.\n");
return -10;
}
if(!nl_sk1)
{
printk(KERN_ALERT "Error creating socket nl_sk1.\n");
return -10;
}
return 0;
}
有人能解释一下吗?
【问题讨论】:
标签: linux sockets kernel netlink