我在为水声调制解调器开发 Linux 驱动程序时遇到了一些麻烦。我项目的总体思路是将 IPv6 引入水下网络。预期的结果是水下传感器网络可以从任何典型的互联网设备访问。为了实现和实现我的目标,我必须为调制解调器提供一个驱动程序,以便我可以使用 Linux 内核提供的路由协议。但是,由于水下通信和典型射频通信的差异,我必须对数据包进行一些处理,包括分片、报头压缩和网状路由。但是所有这些过程都应该是透明的,并且调制解调器应该用作任何其他网络接口。
调制解调器可以通过串口与计算机通信。但是我必须使用pl2303 USB转串口转换器来连接它。另外,驱动调制解调器的设备不仅是计算机,还有一个叫做 Gumstix 的嵌入式 Linux 系统。我尝试了几种不同的方法来做到这一点,但我无法实现我的最终目标。
第一个解决方案是制作一个纯用户模式驱动程序。它可以很容易处理,但我无法创建像 eth0 这样的接口,也无法通过它 ping 通。更糟糕的是,我必须自己实现所有 IPv6 标准,我认为这实际上是在浪费时间。
第二种解决方案是制作纯内核模式驱动程序。优点是我可以利用现有的代码来处理 IPv6 和上层的东西,我可以有一个漂亮的界面。但不建议在内核模式下将串口作为文件打开。尽管我尝试过这样做,但我总是收到一些垃圾字节。
后来我尝试了第三种解决方案。我制作了一个从串行端口发送和接收的守护程序,并使用网络链接套接字与内核中的驱动程序进行通信。我想知道有没有司机这样做。但是如果任何用户想要使用我的驱动程序,他们必须为他们的设备编译并手动启动它。此外,进程间通信不可靠,我不知道内核是否收到了我的数据包。