上下文
Debian 64位内核3.18.x
很难理解网络驱动程序是如何初始化的。
我的意思是如何选择要设置的旗子。为了训练自己,我挖了几天的内核。卡的设置是我唯一错过的点。
我以英特尔82574为例。我下载了卡片的数据表,看到了很多信息,但对如何设置硬件却一无所知。
问题
从哪里开始以知道设置什么标志?数据表并没有帮助我(我不是很有经验,但愿意学习)。
请给我一个起点,一个提示或任何来帮助我理解在已经编写的开源驱动程序中发生了什么。
开发人员如何知道如何初始化他的nic?(,是的,重新发明理解的时间)
发布于 2015-02-08 11:45:59
您需要阅读处理特定NIC的内核模块的源代码。
编辑:当然,要开发这样的模块,您通常只需使用数据表或应用程序节点中指定的寄存器映射;通常,制造商自己开发linux驱动程序,因此驱动程序开发人员甚至可能与开发芯片组的人相同(因为在没有驱动程序之类的东西的情况下测试硬件是非常方便的--所以您也可以编写适当的驱动程序)。
此外,设备通常会附带代码示例--没有人会基于他从未见过的IC来构建设备。
如果您无法访问适当的文档或源,则只能进行反向工程--这是一个非常大的领域。
发布于 2015-11-06 07:41:14
使用英特尔82574网络适配器的示例,Intel提供了用于构建Linux驱动程序的源代码的压缩文件。驱动程序就像所有的驱动程序一样,它连接到OS进行网络连接。
是linux.org站点上的文档,并在流行的lwn.org等Linux站点上进行了讨论。下面的链接指向lwn关于使用名为NAPI的网络API的网络驱动程序的章节。
https://static.lwn.net/images/pdf/LDD3/ch17.pdf
您将在Intel驱动程序源代码中注意到,NAPI net_device数据结构是设置的第一件事之一。它将驱动程序注册到操作系统中。这样,操作系统就知道在加载/卸载驱动程序或需要发送/接收数据时调用哪个igb函数。
igb函数在控制和监视设备的82574内存映射寄存器中读取/修改/写入必要的位。这些设备寄存器都记录在英特尔网站上的82574张数据表中。几乎所有的网络公司都是如此,比如Broadcom/切尔西奥/Mellanox/Marvell。
希望能帮上更多忙。
https://stackoverflow.com/questions/28393504
复制相似问题