Linux - Nic 的标志配置
Linux - Nic's flags configuration
上下文
Debian 64 位。内核 3.18.x
很难理解网络驱动程序是如何初始化的。
我的意思是如何选择设置哪个标志。我在内核中挖掘了好几天来训练自己。卡片设置是我唯一想念的地方。
我以intel 82574为例。我下载了该卡的数据表,看到了很多信息,但没有关于如何设置硬件的线索。
问题
从哪里开始 知道要设置什么标志?数据表对我没有帮助(我不是很有经验但愿意学习)。
请给我一个起点、提示或任何东西,以帮助我理解已经编写的开源驱动程序中发生了什么。
开发人员如何知道如何初始化他的网卡? (是的,重新发明轮子的时候明白了)
您需要阅读处理特定 NIC 的内核模块的源代码。
编辑:当然,要开发这样的模块,您通常只需使用数据 sheet 或应用程序节点中指定的寄存器映射;通常,制造商自己开发 linux 驱动程序,因此驱动程序开发人员甚至可能是开发芯片组的人(因为拥有一个测试平台真的很方便——如果没有某些东西就无法测试硬件 喜欢一个驱动程序,所以你不妨写一个合适的驱动程序)。
此外,设备通常带有代码示例 -- 没有人会基于他从未见过的 IC 来构建设备。
如果您既无法访问适当的文档也无法访问源代码,则只能进行逆向工程 - 这是一个非常大的领域。
使用英特尔 82574 网络适配器的示例,英特尔提供了用于构建 Linux 驱动程序的源代码的 zip 文件。该驱动程序与所有驱动程序一样,它连接到 OS API 以进行网络连接。
Linux 网络 API 是 linux.org 站点上的文档,并在 lwn.org 等热门 Linux 站点上进行了讨论。下面是 link 到 lwn 的关于网络驱动程序的章节使用名为 NAPI 的网络 API。
https://static.lwn.net/images/pdf/LDD3/ch17.pdf
您会在 Intel igb 驱动程序源代码中注意到 NAPI net_device 数据结构是最先设置的内容之一。它使用 OS 注册驱动程序。这样 OS 知道在 loading/unloading 驱动程序或需要 send/receive 数据时调用哪个 igb 函数。
igb 函数 read/modify/write 82574 的内存映射寄存器中控制和监视设备的必要位。设备寄存器都记录在英特尔网站上提供的 82574 数据表中。这通常是几乎所有网络公司的情况,例如 Broadcom/Chelsio/Mellanox/Marvell.
希望对您有所帮助。
上下文
Debian 64 位。内核 3.18.x
很难理解网络驱动程序是如何初始化的。
我的意思是如何选择设置哪个标志。我在内核中挖掘了好几天来训练自己。卡片设置是我唯一想念的地方。
我以intel 82574为例。我下载了该卡的数据表,看到了很多信息,但没有关于如何设置硬件的线索。
问题
从哪里开始 知道要设置什么标志?数据表对我没有帮助(我不是很有经验但愿意学习)。
请给我一个起点、提示或任何东西,以帮助我理解已经编写的开源驱动程序中发生了什么。
开发人员如何知道如何初始化他的网卡? (是的,重新发明轮子的时候明白了)
您需要阅读处理特定 NIC 的内核模块的源代码。
编辑:当然,要开发这样的模块,您通常只需使用数据 sheet 或应用程序节点中指定的寄存器映射;通常,制造商自己开发 linux 驱动程序,因此驱动程序开发人员甚至可能是开发芯片组的人(因为拥有一个测试平台真的很方便——如果没有某些东西就无法测试硬件 喜欢一个驱动程序,所以你不妨写一个合适的驱动程序)。
此外,设备通常带有代码示例 -- 没有人会基于他从未见过的 IC 来构建设备。
如果您既无法访问适当的文档也无法访问源代码,则只能进行逆向工程 - 这是一个非常大的领域。
使用英特尔 82574 网络适配器的示例,英特尔提供了用于构建 Linux 驱动程序的源代码的 zip 文件。该驱动程序与所有驱动程序一样,它连接到 OS API 以进行网络连接。
Linux 网络 API 是 linux.org 站点上的文档,并在 lwn.org 等热门 Linux 站点上进行了讨论。下面是 link 到 lwn 的关于网络驱动程序的章节使用名为 NAPI 的网络 API。
https://static.lwn.net/images/pdf/LDD3/ch17.pdf
您会在 Intel igb 驱动程序源代码中注意到 NAPI net_device 数据结构是最先设置的内容之一。它使用 OS 注册驱动程序。这样 OS 知道在 loading/unloading 驱动程序或需要 send/receive 数据时调用哪个 igb 函数。
igb 函数 read/modify/write 82574 的内存映射寄存器中控制和监视设备的必要位。设备寄存器都记录在英特尔网站上提供的 82574 数据表中。这通常是几乎所有网络公司的情况,例如 Broadcom/Chelsio/Mellanox/Marvell.
希望对您有所帮助。