【问题标题】:Sharing code between Linux kernel and userspace/MCU在 Linux 内核和用户空间/MCU 之间共享代码
【发布时间】:2017-09-19 06:24:19
【问题描述】:

我有一个用于外部 MCU 应用程序的 Linux 驱动程序。驱动程序和 MCU 使用我们自己的协议通过总线进行通信。

我想在内核模块和 MCU 之间共享协议功能的程序代码,但由于无法为内核构建 lib,所以我目前唯一的想法是“尽可能像内核”编写代码然后在平台之间复制整个 .c 文件。

还有其他方法吗? Surly 我不能成为第一个想要这样做的人。

我说的是代码重用,而不是 IPC 机制。

谢谢!

【问题讨论】:

  • 我没听懂你的问题,你的意思是说,某种数据交换机制,比如IPC,还是JSON?没听懂你说的,要在MCU和内核之间共享C代码?
  • 在内核构建过程中使用外部编译对象的唯一方法是运送文件。但是,据我了解,这些文件不能携带代码,只能携带数据。所以,write the code "as kernel as possible" and then just copy the entire .c file between the platforms.。即使内核构建过程可以接受预编译代码,也需要这样的代码;这只会减少单个编译,而不是空间。
  • 你只能分享source code,你可能不应该分享很多。一般来说,尽可能避免编写内核代码。你的问题太宽泛了;您应该对其进行编辑以提供更多详细信息和上下文。您想到什么驱动程序,什么协议? MCU 到底是什么??
  • 确保您可以在 Makefile 级别执行此操作:对于 MCU,您需要使用交叉编译器,对于内核模块,您需要使用本机编译器。您可以在common/mcu/module/ 目录中组织源文件。仅将 Makefile 放在 mcu/module/ 中。另外,我很确定可以为内核构建一个库,然后将其与模块静态链接。
  • 这可能是一个尝试当且仅当他们都运行相同的操作系统(Linux)的想法。

标签: c linux linux-kernel shared-libraries linux-device-driver


【解决方案1】:

它需要一些硬件抽象,因此实现协议的代码需要尽可能通用,而不需要任何硬件特定的细节。 实现该协议的文件可以具有初始化、退出、读取、写入和中断等功能。硬件实现本身(gpio、内存、总线)可以通过在调用 init 函数时注册的函数指针进行访问。目录结构可以像@smbear 建议的那样设置

【讨论】:

    猜你喜欢
    • 2012-03-02
    • 2011-12-16
    • 2018-06-08
    • 1970-01-01
    • 2016-10-12
    • 1970-01-01
    • 2016-08-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多