当我们从 user-space 调用任何套接字时,内核如何知道要调用哪个驱动程序?
How kernel know which driver to be called when we are calling any socket from user-space?
我在用户space 中使用IWD 作为无线守护进程。已加载驱动程序和固件。
当 IWD 使用 nl80211
调用套接字时,它会传递给 nl80211
而不是内核 space 中的 cfg80211
。在内核 space 他们如何知道调用哪个驱动程序或将请求传递给哪个驱动程序?
使用此创建套接字:
fd = socket(PF_NETLINK, SOCK_DGRAM | SOCK_CLOEXEC | SOCK_NONBLOCK, NETLINK_GENERIC);
而这个fd是用来向内核传递请求的space.
[编辑]
这段代码中使用了类似套接字的概念:How to use netlink socket to communicate with a kernel module?
它使用相同的套接字创建和调用在用户space 和内核space 之间进行通信。
正如@stark 在评论中所解释的那样:
您正在使用 NETLINK_GENERIC 协议,因此将调用 Generic Netlink 代码。另一个问题是使用注册协议 31 的 user-written 模块。wiki.linuxfoundation.org/networking/generic_netlink_howto
我在用户space 中使用IWD 作为无线守护进程。已加载驱动程序和固件。
当 IWD 使用 nl80211
调用套接字时,它会传递给 nl80211
而不是内核 space 中的 cfg80211
。在内核 space 他们如何知道调用哪个驱动程序或将请求传递给哪个驱动程序?
使用此创建套接字:
fd = socket(PF_NETLINK, SOCK_DGRAM | SOCK_CLOEXEC | SOCK_NONBLOCK, NETLINK_GENERIC);
而这个fd是用来向内核传递请求的space.
[编辑]
这段代码中使用了类似套接字的概念:How to use netlink socket to communicate with a kernel module?
它使用相同的套接字创建和调用在用户space 和内核space 之间进行通信。
正如@stark 在评论中所解释的那样:
您正在使用 NETLINK_GENERIC 协议,因此将调用 Generic Netlink 代码。另一个问题是使用注册协议 31 的 user-written 模块。wiki.linuxfoundation.org/networking/generic_netlink_howto