【问题标题】:Can hardware registers be mapped to userspace硬件寄存器可以映射到用户空间吗
【发布时间】:2013-11-01 13:43:54
【问题描述】:

我正在飞思卡尔 MPC8306 上开发 LED 驱动器。在驱动程序代码中,我对 GPIO 寄存器进行 ioremap 并在重新映射的 GPIO 寄存器地址上调用 remap_pfn_range,然后在用户空间调用 mmap 以将 GPIO 寄存器映射到用户空间。我以前没有这样做过,我想知道这种方法是否有效。有人可以帮助我吗?提前致谢。

【问题讨论】:

  • 如果您想要的是用户空间,那么使用/sys/class/gpio 界面会简单得多。为什么要重新发明轮子,请参阅elinux.org/GPIO

标签: linux-kernel driver powerpc


【解决方案1】:

您应该使用/dev/mem 接口来访问GPIO 寄存器。在另一个嵌入式板上通过 GPIO 控制 LED 的一个很好的参考是 here

【讨论】:

    【解决方案2】:

    一种更简单的方法可能只是直接在您的用户空间程序中mmap 的相关偏移量/dev/mem。这允许您通过查找来访问物理内存布局。

    AFAIK,这就是 RaspberryPi 开发人员为使 GPIO 内存映射 I/O 寄存器可用于用户空间程序所做的工作。

    【讨论】:

    • big 警告说,有些事情在用户空间中是不安全的,除非你确定你是 only 的人在做访问,例如寄存器的读-修改-写。 (在 rPi 上更有趣,因为您应该在切换外围设备时使用内存屏障,希望内核代码可以这样做;其他用户空间线程可能不会那么宽容。)
    猜你喜欢
    • 1970-01-01
    • 2013-03-14
    • 2017-01-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-06-07
    • 2019-02-17
    • 1970-01-01
    相关资源
    最近更新 更多