我可以在内核中使用 protobufs 吗?
我需要使用 Linux 设备驱动程序定义通信协议。 Protobufs 看起来非常不错,并且有一个 活动 C 端口。
是否可以在 Linux 设备驱动程序中使用 protobuf?
显然,普通的 C 代码将无法工作,因为它会进行 malloc 调用等。是否有针对内核的 protobufs 实现?
如果解决方案有所下降,那么移植一个 C 库以供内核使用需要花费多少精力?
额外问题:使用 Windows 驱动程序编写时,答案是否有显着不同?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
理论上,你可以这样做——但这样做确实没有任何意义。创建协议缓冲区是为了简化在使用不同二进制数据表示形式的不同机器和语言之间传输数据的任务 - 但内核驱动程序和用户空间之间的接口位于同一台机器上(通常是相同的)语言 - C 语言库通常在用户空间端使用,即使在用另一种语言编写应用程序代码时也是如此。
这意味着不会出现不同的表示问题 - 您可以简单地在头文件中定义结构并将其跨内核/用户空间边界传递。
In theory, you could do this - but there really isn't any point in doing so. Protocol Buffers was created to ease the task of transferring data between different machines and languages that use different representations for binary data - but the interface between a kernel driver and userspace is on the same machine (and typically the same language - a C language library is usually used on the userspace side, even when writing application code in another language).
This means that the different representation issue doesn't arise - you can simply define
struct
s in header files and pass those across the kernel/userspace boundary.