gpt4 book ai didi

linux - linux网络驱动的问题

转载 作者:太空宇宙 更新时间:2023-11-04 09:47:28 25 4
gpt4 key购买 nike

我在为水声调制解调器开发 Linux 驱动程序时遇到了一些麻烦。我项目的总体思路是将 IPv6 引入水下网络。预期的结果是水下传感器网络可以从任何典型的互联网设备访问。为了实现我的目标,我必须为调制解调器提供驱动程序,以便我可以使用 Linux 内核提供的路由协议(protocol)。然而,由于水下通信和典型射频通信的差异,我必须对数据包进行一些处理,包括分片、报头压缩和网状路由。但是所有这些过程都应该是透明的,并且调制解调器应该用作任何其他网络接口(interface)。

调制解调器可以通过串口与计算机通信。但我必须使用 pl2303 USB 转串口转换器来连接它。此外,驱动调制解调器的设备不仅是计算机,而且是一个名为 Gumstix 的嵌入式 Linux 系统。我尝试了几种不同的方法来做到这一点,但我无法实现我的最终目标。

第一个解决方案是制作纯用户模式驱动程序。它很容易处理,但我无法创建像 eth0 这样的接口(interface),而且我无法通过它执行 ping 操作。更糟糕的是,我必须自己实现所有 IPv6 标准,我认为这实际上是在浪费时间。

第二种解决方案是制作纯内核模式驱动程序。优点是我可以利用现有的代码来处理 IPv6 和上层的东西,而且我可以有一个漂亮的界面。但不建议在内核态下以文件方式打开串口。尽管我尝试这样做,但我总是收到一些垃圾字节。

后来我尝试了第三种解决方案。我制作了一个从串口发送和接收的守护程序,并使用网络链接套接字与内核中的驱动程序进行通信。想知道有没有司机这样做。但是如果任何用户想要使用我的驱动程序,他们必须为他们的设备编译并手动启动它。此外,进程间通信不可靠,我不知道内核是否收到我的数据包。

最佳答案

对于您的第一个解决方案,您可以考虑使用“tap”驱动程序。请参阅内核源代码中的 Documentation/networking/tuntap.txt 以获取完整详细信息,但基本思想是创建一个“tap”网络接口(interface),以及内核堆栈希望通过其发送的任何以太网数据包该接口(interface)实际上已交付给您的用户空间进程;类似地,您的用户空间进程可以将数据包注入(inject) tap 接口(interface),内核会将它们视为已被网络堆栈接收。这将解决您能够将用户空间网络实现粘合到主内核堆栈中的问题。

然而,在内核中实现所有内容也应该是可行的。这毕竟本质上是 PPP 或 SLIP 实现所做的:它们创建一个通过串行接口(interface)运行的网络接口(interface)。这里的关键概念是“线路规程”——而不是尝试在内核驱动程序中打开串行接口(interface),您需要一些用户空间控件来进行打开,然后设置线路规程。您应该能够在主线内核中的 PPP 或 IrDA 之类的东西上对此进行建模(我相信在网上搜索“linux line discipline”会提供一些关于编写一个的文档)。

关于linux - linux网络驱动的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14710953/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com