c - 我如何通过网络代理 mmap 读取和写入?

标签 c linux embedded kernel mmap

我正在开发用于在嵌入式 ARM 系统上控制 mmap 设备的软件,但遇到了一些可用的调试和开发工具不够用的情况。即,诸如 valgrind 和更高端线程分析器之类的检测工具不可用。

我想做的是在 x86 机器上编译我的代码,使用相同大小映射一个“虚拟”内存段,然后通过网络将这些读/写代理到嵌入式机器,然后嵌入式机器可以做出相应的响应.

我意识到这可能需要一个客户端/服务器机制,而且速度会非常慢,但是拥有这个选项的好处将使 mmap 接口(interface)本身之外的机制(异步事件处理、线程管理)可用于使用 x86 开发的仪器工具会非常有用。

我在一些用于模拟的 ASIC 开发中听说过这种技术,但从未使用过提供这种功能的任何东西。这里的关键点是我想在两个平台上使用相同的代码,而不必重写一堆东西,或者必须编写一个包含任何硬件处理逻辑的内核模块。我想通过mmap把所有的设备控制逻辑都保留在userland

最佳答案

如果您考虑清楚,基本上可以归结为实现远程文件系统。

  • “最简单的”可能是如果你 嵌入式设备可以实现 NFS 客户端的简单版本 一边,mmap 一个文件在你的 台式机
  • 反过来也应该是可能的, 即拥有 nfs 服务器模块 在您的嵌入式系统上运行并 将类似 /dev/shm 的内容作为 nfs 挂载点导出到您的桌面。

对于这两种方法(任何其他使用 mmap 的方法),您都必须非常小心数据同步。但是只要你有一个典型的调试设置,基本上只有一个编写器和一个读取器,这是可行的。如果这变得更复杂,可以使用作为 nfs 扩展的远程文件锁定。

关于c - 我如何通过网络代理 mmap 读取和写入?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3796414/

相关文章:

C - 查找结构的大小

linux - 从源代码构建 glibc 而不是编译 ldconfig

嵌入式板支持包

c - cortex-m0 上 ISR 的终止函数

c - 在 C 中使用 bool 比较的问题

c++ - 如何在 MFC 对话框按钮上设置管理权限图标?

c - 如何使用 amqp C 库发送长度为 N 的 char*?

linux - 将命令回显到 cron 而不执行

linux - 如何在 Linux 上静默安装 IBM BPM 8.5.6

我可以将两个端口的位相加来形成新的位序列吗?