我需要为Linux设备驱动程序定义通信协议。Protobufs看起来非常不错,而且有一个活跃的C端口。在Linux设备驱动程序中使用protobufs是否可能? 显然,普通的c代码将无法工作,因为它会进行malloc调用等操作。是否有针对内核的protobufs实现?如果有一种可插拔的解决方案,将C库移植到内核中需要多少工作量?额外问题:在编写Windows驱动程序时,答案是否显著不同?
理论上,您可以这样做 - 但实际上没有任何意义。协议缓冲区是为了简化在使用不同表示形式的二进制数据的不同机器和语言之间传输数据的任务而创建的 - 但内核驱动程序和用户空间之间的接口位于同一机器上(通常是相同的语言 - 即使在另一种语言中编写应用程序代码时,用户空间侧也通常使用C语言库)。这意味着不会出现不同的表示问题 - 您可以简单地在头文件中定义struct并将其通过内核/用户空间边界传递。