我可以用protobuf在内核中使用吗?

7
我需要为Linux设备驱动程序定义通信协议。Protobufs看起来非常不错,而且有一个活跃的C端口
在Linux设备驱动程序中使用protobufs是否可能? 显然,普通的c代码将无法工作,因为它会进行malloc调用等操作。是否有针对内核的protobufs实现?
如果有一种可插拔的解决方案,将C库移植到内核中需要多少工作量?
额外问题:在编写Windows驱动程序时,答案是否显著不同?
1个回答

7
理论上,您可以这样做 - 但实际上没有任何意义。协议缓冲区是为了简化在使用不同表示形式的二进制数据的不同机器和语言之间传输数据的任务而创建的 - 但内核驱动程序和用户空间之间的接口位于同一机器上(通常是相同的语言 - 即使在另一种语言中编写应用程序代码时,用户空间侧也通常使用C语言库)。
这意味着不会出现不同的表示问题 - 您可以简单地在头文件中定义struct并将其通过内核/用户空间边界传递。

6
Protobuf相较于普通的结构体有两个优势:(1)结构体无法保证向后兼容性,我曾看到过一些关于结构体破坏性变更的错误报告。(2)有些数据稍后需要保留并检查,例如perf_event_open结构体。它们基本上是从内核缓冲区复制到文件,并且很难处理。(3)Protobuf允许稀疏序列化/反序列化。 - Elazar Leibovich

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接