在我的应用程序中,客户端将在UDP数据包中发送一个命令。 我想在内核中收到这个数据包,并尽快发送它的响应。 我知道我可以通过在linux用户空间中创建应用程序来实现此目的,但是当我在用户空间中收到包时存在延迟。 为了避免这种延迟,我想发送来自内核空间的响应。 我的问题是我如何编写特定的代码在内核空间中运行? 它与编写驱动程序类似吗?或者有任何其他方法来完成这项任务?内核驱动程序通过以太网响应特定的打包
1
A
回答
0
它与编写驱动程序类似吗?
不完全是。网络驱动程序旨在为定义良好的网络堆栈API提供内核和硬件之间来回转发数据包。而且,虽然您的任务可能可以通过编写自定义网络驱动程序或提供具有某些扩展名的现有网络驱动程序来解决,但这可能是一个可疑的选择。
事实上,除了修改内核代码,有一个通常称为内核旁路和/或零拷贝技术解决方案的一把。例如,如果您使用PACKET_MMAP机制,严格来说不是内核旁路,而是Linux内核中的设施,您仍然可以编写用户空间应用程序来为延迟更低的命令提供服务。它允许为从用户区到内核侧的软件Rx和Tx环制作直接内存映射。因此它可以显着减少延迟。但是,该功能假设数据包的数据包为套接字,因此典型的应用程序必须解析Rx上的数据包标头并在Tx本身上准备它们。希望这不是一项艰巨的任务。
此外,存在多种基于user-space drivers概念的真实内核旁路技术。基本上,使用特殊的内核帮助驱动程序来使用户空间中的某些设备资源可用。然后,用户空间驱动程序可以选择这些资源并直接管理NIC,而无需任何内核参与。通常,此类用户空间驱动程序与帮助程序库结合使用,并以框架的形式分发,例如dataplane kit(请在此处找到指向实际网站的链接)。
把它放在一起,最有可能的是你可能会避免任何内核修改来解决你的问题,因为更灵活的技术存在。
相关问题
- 1. UMDF驱动程序可以通过WiX进行打包/发货吗?
- 2. STM32通过以太网上传应用程序/软件
- 3. 通过以太网在设备上运行Android应用程序
- 4. HTTP.SYS内核模式驱动程序
- 5. 内核驱动程序签名
- 6. Windows 7内核驱动程序签名
- 7. 内核驱动程序I2C开发
- 8. Linux I2C内核驱动程序
- 9. 什么是Windows内核驱动程序?
- 10. 通过google打包的应用程序访问网站的DOM
- 11. yocto linux:不能包含TUN/TAP内核驱动程序
- 12. 以太网驱动程序 - 不使用DMA?
- 13. C#谈话以太网卡驱动程序
- 14. Wireshark初学者,捕获以太网驱动程序
- 15. 如何在Android上启用以太网over USB驱动程序?
- 16. 如何通过以太网编程RS232?
- 17. 用户模式和内核驱动程序通信
- 18. 在内核驱动程序中使用Windows过滤平台
- 19. 通过IOCTL将结构传递给内核模式驱动程序
- 20. 以太网交换机设备驱动
- 21. 内核模块到以太网数据包回声
- 22. 在Windows中通过网络与驱动程序通信
- 23. 运行自定义WIN内核驱动程序
- 24. 如何打开特定驱动程序的ETW/WPP?
- 25. 操作系统和驱动程序如何影响OpenCL内核时序?
- 26. 我可以通过编程方式使用OneNote打印机驱动程序吗?
- 27. 更改内核驱动程序中内置的驱动程序的初始化顺序?
- 28. 通过没有驱动程序的网络连接到MySQL
- 29. 如何通过网络驱动程序填充表中的值?
- 30. 通过代码的网络驱动程序高级属性