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

发布于 2024-11-06 00:36:42 字数 417 浏览 1 评论 0 原文

我需要使用 Linux 设备驱动程序定义通信协议。 Protobufs 看起来非常不错,并且有一个 活动 C 端口

是否可以在 Linux 设备驱动程序中使用 protobuf?
显然,普通的 C 代码将无法工作,因为它会进行 malloc 调用等。是否有针对内核的 protobufs 实现?

如果解决方案有所下降,那么移植一个 C 库以供内核使用需要花费多少精力?

额外问题:使用 Windows 驱动程序编写时,答案是否有显着不同?

I need to define a communication protocol with a Linux device driver. Protobufs look very nice, and there is an active C port.

Is it possible to use protobufs in a Linux device driver?
Obviously the vanilla c code will not work as it makes malloc calls, etc. Is there protobufs implementation that targets the kernel?

If there is a drop in solution, how much effort is it to port a C library for use in the kernel?

Bonus question: Are the answers significantly different when writing with windows drivers?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

最美的太阳 2024-11-13 00:36:42

理论上,你可以这样做——但这样做确实没有任何意义。创建协议缓冲区是为了简化在使用不同二进制数据表示形式的不同机器和语言之间传输数据的任务 - 但内核驱动程序和用户空间之间的接口位于同一台机器上(通常是相同的)语言 - 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 structs in header files and pass those across the kernel/userspace boundary.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文