我需要定义一个与 Linux 设备驱动程序的通信协议(protocol)。 Protobufs看起来很不错,还有一个active C port .
是否可以在 Linux 设备驱动程序中使用 protobufs?
显然,vanilla c 代码将无法工作,因为它会调用 malloc 等。是否有针对内核的 protobufs 实现?
如果解决方案有所下降,移植一个 C 库以在内核中使用需要付出多少努力?
奖励问题:使用 Windows 驱动程序编写时答案是否有显着差异?
最佳答案
理论上,您可以这样做 - 但这样做确实没有任何意义。 Protocol Buffers 的创建是为了简化在不同机器和语言之间传输数据的任务,这些机器和语言使用不同的二进制数据表示形式 - 但内核驱动程序和用户空间之间的接口(interface)在相同机器上(通常是相同的语言 - C 语言库通常在用户空间端使用,即使在用另一种语言编写应用程序代码时也是如此。
这意味着不会出现不同的表示问题 - 您可以简单地在头文件中定义 struct
并将它们传递到内核/用户空间边界。
关于我可以在内核中使用 protobufs 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5904452/