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

标签 c linux-kernel driver protocol-buffers

我需要定义一个与 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/

相关文章:

c - 如何让程序在没有内容可读时自行终止

c - 使用execv在C中拆分文件

CRT 与共享库和应用程序的链接

git - 如何从git获取特定内核版本到外向数字

linux - 如何编写 Linux 驱动模块调用/使用另一个驱动模块?

c++ - Win32_SystemDriver 禁用设备驱动程序

c++ - 将源文件包含在另一个源中

c - 通过杀死 kthread 来恢复 unix 设备驱动程序的最佳选择

linux - dma_mmap_coherent() 映射内存的零拷贝用户空间 TCP 发送

events - Windows 打印机驱动程序中的句柄 "start page"