我应该为此编写设备驱动程序吗?

时间:2011-11-22 13:08:30

标签: linux device-driver linux-device-driver

我正在计划一个小爱好项目,在带有GPIO的SBC上运行Linux。我的想法是在GPIO引脚上产生PWM输出,并允许每个引脚作为/dev中的文件提供,与GPIO引脚相同。我希望能够以与GPIO相同的方式使用PWM设备。

所以我想我想写一个设备驱动程序,它似乎符合要求。

唯一的问题是,由于我将通过/dev/GPIO访问引脚,因此我的程序可以存在于用户空间中。 '可以存在于用户空间中'通常意味着' 存在于用户空间中'。

我确信这可以写成用户空间守护程序或内核空间设备驱动程序,或其他东西。

最好的办法是什么?

2 个答案:

答案 0 :(得分:1)

这取决于SBC上微控制器的内置功能。如果您确定在其架构中已经没有建立PWM模块,那么我想您需要转换GPIO引脚才能执行此操作。

This project may be of interest.

答案 1 :(得分:1)

解决此问题的最简单方法是通过“/ dev / mem”文件从用户空间直接访问设备。在这种情况下,您不需要在内核空间区域中编写任何驱动程序代码。使用“/ dev / mem”文件,您可以使用来自用户空间应用程序的物理地址直接访问您的设备。

用户空间应用程序中的初始设置将是:

  • 在读写模式下打开“/ dev / mem”文件(使用open()系统调用)。
  • 内存将“/ dev / mem”文件描述符与设备物理地址偏移量映射到进程虚拟内存地址空间(使用mmap()系统调用)。
  • 开始使用虚拟地址(mmap()返回访问设备 价值)该设备。

此方法存在风险,因为通过“/ dev / mem”文件访问设备时不知道内存管理器。其他方法是在内核空间中为您的设备安装设备驱动程序,然后编写用户空间应用程序,这将是一个安全的设备访问。