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