Debian 64位。内核3.18.x
Litterally努力了解如何初始化网络驱动程序。
我的意思是如何选择要设置的标志。我现在挖掘内核几天来训练自己。卡设置是我唯一遗漏的一点。
我以intel 82574为例。我下载了卡片的数据表,看到了很多信息,但没有提供如何设置硬件的线索。
从何处开始以了解要设置的标志?数据表没有帮助我(我不是很有经验,但愿意学习)。
请给我一个起点,一个提示或任何来帮助我了解已经编写的开源驱动程序中发生了什么。
开发人员如何知道如何初始化他的网站? (是重新发明轮子的时间)
答案 0 :(得分:0)
您需要阅读处理特定NIC的内核模块的源代码。
编辑:当然,要开发这样的模块,您通常只需使用数据表或应用程序节点中指定的寄存器映射;通常,制造商自己开发他们的Linux驱动程序,因此驱动程序开发人员甚至可能与开发芯片组的人相同(因为有一个平台可以测试它是非常方便的 - 它不可能测试硬件没有喜欢一个驱动程序的东西,所以你不妨写一个合适的驱动程序)。
此外,设备通常附带代码示例 - 没有人会根据他未见过的IC构建设备。
如果您既没有正确的文档也没有来源,那么您只能进行逆向工程 - 这是一个非常大的领域。
答案 1 :(得分:0)
使用英特尔82574网络适配器的示例,英特尔提供了用于构建Linux驱动程序的源代码的zip文件。驱动程序就像所有驱动程序一样,它挂钩到OS API for Networking。
Linux网络API是linux.org网站上的文档,并在流行的Linux网站上讨论过,如lwn.org。以下是使用名为NAPI的网络API的网络驱动程序的lwn章节的链接。
https://static.lwn.net/images/pdf/LDD3/ch17.pdf
您将在Intel igb驱动程序源代码中注意到NAPI net_device数据结构是首先设置的内容之一。它将驱动程序注册到OS。这样,操作系统知道在加载/卸载驱动程序时,或者需要发送/接收数据时要调用哪个igb函数。
igb函数读取/修改/写入控制和监视器件的82574存储器映射寄存器中的必要位。设备寄存器均记录在英特尔网站上的82574数据表中。几乎所有像Broadcom / Chelsio / Mellanox / Marvell这样的网络公司都是如此。
希望有所帮助。