我在编译kernel使用netlink函数的旧模块时遇到编译器错误.
int
init_module()
{
/* Initialize the Netlink kernel interface */
nl_sk = netlink_kernel_create(&init_net, 17, 0, recv_cmd, NULL, THIS_MODULE);
if(!nl_sk)
{
printk(KERN_INFO "failed to initialize system (error: 1001)\n");
return -ENOMEM;
}
....
Run Code Online (Sandbox Code Playgroud)
以前它工作正常,但现在我收到此错误.
error: too many arguments to function 'netlink_kernel_create'
Run Code Online (Sandbox Code Playgroud)
OS信息
uname -a
Linux ibrar-ahmed 3.8.0-17-generic #27-Ubuntu SMP Sun Apr 7 19:39:35 UTC 2013 x86_64 x86_64 x86_64 GNU/Linux
Run Code Online (Sandbox Code Playgroud) 我是Linux内核模块编程的新手.从我到目前为止阅读的材料中,我发现用户程序有3种方式来请求服务或与Linux内核模块通信
问题:我们还有哪些其他选项可用于用户程序和Linux内核模块之间的通信?
嗨,我一直在努力让Netlink套接字适用于3.2 linux内核,但我似乎无法弄清楚如何做到这一点.我查看了Netlink套接字基础知识的示例,但似乎我找到的所有示例都是针对2.6内核的.
我想要找到的是如何使用Netlink套接字将信息从内核模块发送到用户模式应用程序,反之亦然?
任何帮助将不胜感激.谢谢!
我有几个需要与用户空间交互的内核模块。因此,每个模块都有一个 Netlink 套接字。
我的问题是这些套接字相互干扰。这是因为它们都注册到同一个 Netlink 地址族(因为一开始可用的地址族不多 - 最大值为 32,并且超过一半已经被保留),而且因为它们都将自己绑定到相同的 pid(内核 pid - 零)。
我希望地址家族有更多的空间。或者,更好的是,我希望可以将我的套接字绑定到其他 pid。如果一次只能打开 32 个套接字,为什么 Netlink 是首选的用户内核通道?
netlink 地址(端口)由 32 位整数组成。端口 0(零)是为内核保留的,指的是每个 netlink 协议族的内核端套接字。其他端口号通常指用户空间拥有的套接字,尽管这不是强制的。
最后一个说法现在看来是一个谎言。内核使用常量作为 pid,并且不导出更多通用函数:
if (netlink_insert(sk, 0))
goto out_sock_release;
Run Code Online (Sandbox Code Playgroud)
我想我可以重新编译内核并增加地址族限制。但这些是内核模块;我不应该这样做。
我错过了什么吗?
我正在开发一个内核模块,它通过netlink将消息发送到用户空间.
要创建消息(发送邮件): skb_out = nlmsg_new(msg_size,0);.
在发送第一条消息之后,在发送第二条消息之前,我尝试释放skb_out,nlmsg_free(skb_out)但此函数导致内核崩溃.
要么
这里是源代码之后:
skb_out = nlmsg_new(msg_size,0);
if(!skb_out)
{
printk(KERN_ERR "Failed to allocate new skb\n");
return;
}
nlh=nlmsg_put(skb_out,0,0,NLMSG_DONE,msg_size,0);
NETLINK_CB(skb_out).dst_group = 0; /* not in mcast group */
strncpy(nlmsg_data(nlh),msg,msg_size);
res=nlmsg_unicast(nl_sk,skb_out,pid);
if(res<0)
{
printk(KERN_INFO "Error while sending bak to user\n");
}
nlmsg_free(skb_out);
Run Code Online (Sandbox Code Playgroud) 我正在编写一个使用netlink的Linux驱动程序来在用户空间和内核空间之间进行通信.但是我找不到一些有用的资料,因为netlink已经从Linux内核> = 2.6.24改变了.谁可以给我一些关于如何创建netlink套接字的建议.提前致谢!