【发布时间】:2018-08-07 11:23:25
【问题描述】:
我在编写内核驱动程序方面很陌生,有一些事情让我很困扰。如果你能引导我走向正确的方向,那就太好了。
我正在为设备编写一个模块,该模块必须通过将 GPIO 置于高状态来供电。
在 Documentation/gpio/* 中有文本,说我应该使用 GPIO 框架的新的基于描述符的接口 >。但是如何使用呢? 当我制作像 #include 这样的包含时 它编译,我可以运行驱动程序。但是使用 gpiod_get(...) 只会返回 ffffffffffffffffe。这是有道理的,因为在 linux/gpio/consumer.h 中实现该功能是
静态内联结构 gpio_desc *__must_check gpiod_get(struct device *dev, const char *con_id,enum gpiod_flags 标志){ 返回 ERR_PTR(-ENOSYS); }
函数的实现也存在于 drivers/gpio/devres.c 中。我怎么用那个?
在我看来,我不应该使用那个实现。
我希望你能帮助我,因为这真的很烦人。
【问题讨论】:
-
如果你查看
linux/gpio/consumer.h,它有gpiod_get函数的两个声明:第一个是简单声明,第二个是带定义的声明。第一个对应于启用的CONFIG_GPIOLIB配置选项,并且在drivers/gpio/devres.c中有有用的实现。第二个对应disabled选项,它的实现就是“未实现”。所以你需要启用CONFIG_GPIOLIB选项才能使用GPIO。 -
感谢您的回复。您绝对鼓励我重新考虑我的构建系统,因为 CONFIG_GPIOLIB is 在我的内核 defconfig 中设置。但可能不在我的树外资源中......我会告诉你我到目前为止的结果
标签: linux kernel-module