c - dev_net_set 在 Linux 中有什么作用?

标签 c linux-kernel linux-device-driver

我正在编写一个基于环回驱动程序的简单网络设备驱动程序,并希望注册我的net_device 结构。 Thisthat关于编写网络设备的页面说只调用 register_netdev。但是他们正在用 PCI Express 和其他复杂的东西编写花哨的驱动程序。

因此,如果我只想要环回驱动程序之类的东西,我大概应该将我的代码基于 loopback.c。我的问题是,loopback_net_init 中这段代码的第一行是做什么的:

dev_net_set(dev, net);
err = register_netdev(dev);

显然 net 是由 net_namespace.c 中的这段代码决定的:

register_pernet_device(ops) ...
__register_pernet_operations(list, ops)
   for_each_net(net) ...

这个循环是为了什么?如果我跳过 dev_net_set 调用,可能会出现什么问题?为什么其他人不使用它?

最佳答案

据我所知,net 是一个允许内核与设备交互的结构。您需要它来注册设备并在模块清理功能中将其删除。请查看 linux/net/8021q/下的代码以获取示例。

关于c - dev_net_set 在 Linux 中有什么作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56875655/

相关文章:

c - 直接访问用户空间地址而不是 copy_to_user 是否可行?

linux - localsocket服务器未收到readyread信号

linux - 检查是否可以从linux内核空间访问内存地址

c - 在不连接设备的情况下安装 Linux PCI 驱动程序

c++ - Raspberry Pi C++ 从 Adafruit 的终极 GPS 模块读取 NMEA 语句

c - 错误 : conflicting types for a function

c++ - 与 cstdio 和 std::fstream 相比,为什么 SDL_RWops 在写入文件时表现如此糟糕?

写入文件成功时的回调,C

linux - 处理/proc/pid/fd/# 链接的创建和删除的 Linux 内核代码在哪里?

linux-kernel - 将物理设备映射到用户空间中的指针