我相信我无法完全理解在嵌入式系统中为某些特定设备(例如 GPIO)编写设备驱动程序的好处,因为有替代方法可以完成相同的工作。
您可以通过 sysfs 和设备树访问 GPIO。
- 编写一个新的设备树覆盖并启用它
- 转到 /sys/class/gpio
- 导出所需的 pin 并开始使用它(通过简单的 shell 调用或在 c/c++ 应用程序中)
编写自己的驱动程序。
- 编码真正的功能。
- 将驱动程序公开给用户空间中的节点(如 /dev/tty)。
- 编写另一个 c/c++ 代码来访问驱动程序(也可以通过简单的 shell 调用来访问它)
- 如果您需要任何新功能,请先更改驱动程序,然后再更改代码。(为什么?)
直接使用/dev/mem;
- 包含 mman.h 并使用 /dev/mem 对象来设置或获取 GPIO 状态。
所以,
- 1 -> 将被弃用且缓慢。(好的,对快速原型制作绝对有益)
- 2 -> 比 1 快多少?第一个也是另一个 GPIO 驱动程序,不是吗?
- 3 - >这不是最好和最快的方法吗?
我在上面问了几个问题,但这是我最大的问题;为什么我不应该直接使用第三种解决方案?
选项 2 的优点是您可以在一个地方验证请求。说洗碗机,你可以确保门传感器在你打开水之前说门是关闭的。当然,您可以告诉人们在设置水位之前检查门状态位,但他们都会这样做吗?
选项 1 和 3 的潜在缺点是权限。这取决于嵌入式设备的复杂程度,但您可能希望不同的用户 ID 执行不同的操作,例如,家庭路由器可能有不同的 uid 运行 http 服务器来执行 Web UI 和不同的守护进程操作前面板 LED。虽然 gpio 驱动程序可能具有细粒度的访问控制,但大多数都采用全有或全无的方法。使用选项 2,您可以决定哪些用户可以精细地访问哪些设施。
选项 2 的缺点是它更复杂,通常需要内核中的代码。