作者热门文章
- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我是设备驱动程序开发的新手。我正在尝试访问 MPC837xERDB 评估板的 GPIO。
我已将其内核升级到 linux-2.6.28.9
并启用对 mpc8xxx_gpio.c
的支持。在启动时,它成功检测到两个 gpio
Controller 。
现在我的问题是如何使用它与 gpio
引脚通信?我是否必须修改 mpc8xxx_gpio.c
文件中的代码才能使用 gpios
做任何我想做的事情,或者我可以使用标准的 gpio
API在内核中提供(gpio_request()
/gpio_free()
)。我也尝试了标准内核 API,但它失败了。这是我的代码:
#include <linux/module.h>
#include <linux/errno.h> /* error codes */
#include <linux/gpio.h>
static __init int sample_module_init(void)
{
int ret;
int i;
for (i=1; i<32; i++) {
ret = gpio_request(i, "Sample Driver");
if (ret) {
printk(KERN_WARNING "sample_driver: unable to request GPIO_PG%d\n", i);
//return ret;
}
}
return 0;
}
static __exit void sample_module_exit(void)
{
gpio_free(9);
}
MODULE_LICENSE("GPL");
module_init(sample_module_init);
module_exit(sample_module_exit);
它给出了以下 O/P:
[ 617.075329] sample_driver: unable to request GPIO_PG1
[ 617.080418] sample_driver: unable to request GPIO_PG2
[ 617.085470] sample_driver: unable to request GPIO_PG3
[ 617.090522] sample_driver: unable to request GPIO_PG4
[ 617.095574] sample_driver: unable to request GPIO_PG5
[ 617.100625] sample_driver: unable to request GPIO_PG6
[ 617.105676] sample_driver: unable to request GPIO_PG7
[ 617.110727] sample_driver: unable to request GPIO_PG8
[ 617.115779] sample_driver: unable to request GPIO_PG9
[ 617.120830] sample_driver: unable to request GPIO_PG10
[ 617.125968] sample_driver: unable to request GPIO_PG11
[ 617.131106] sample_driver: unable to request GPIO_PG12
[ 617.136245] sample_driver: unable to request GPIO_PG13
[ 617.141383] sample_driver: unable to request GPIO_PG14
[ 617.146521] sample_driver: unable to request GPIO_PG15
[ 617.151660] sample_driver: unable to request GPIO_PG16
[ 617.156798] sample_driver: unable to request GPIO_PG17
[ 617.161936] sample_driver: unable to request GPIO_PG18
[ 617.167074] sample_driver: unable to request GPIO_PG19
[ 617.172213] sample_driver: unable to request GPIO_PG20
[ 617.177351] sample_driver: unable to request GPIO_PG21
[ 617.182489] sample_driver: unable to request GPIO_PG22
[ 617.187628] sample_driver: unable to request GPIO_PG23
[ 617.192767] sample_driver: unable to request GPIO_PG24
[ 617.197905] sample_driver: unable to request GPIO_PG25
[ 617.203042] sample_driver: unable to request GPIO_PG26
[ 617.208182] sample_driver: unable to request GPIO_PG27
[ 617.213319] sample_driver: unable to request GPIO_PG28
[ 617.218458] sample_driver: unable to request GPIO_PG29
[ 617.223597] sample_driver: unable to request GPIO_PG30
[ 617.228735] sample_driver: unable to request GPIO_PG31
[ 617.233873] sample_driver: unable to request GPIO_PG32
谁能给我提供示例代码或其他东西。实际上我正在尝试设置 GPIO 引脚号。 9 为低电平有效,因为它连接到板上的 LED。
最佳答案
来自你的另一个问题:
# ls /sys/class/gpio/ -la
drwxr-xr-x 4 root root 0 Jan 1 00:00 .
drwxr-xr-x 24 root root 0 Jan 1 00:00 ..
--w------- 1 root root 4096 Jan 1 00:10 export
drwxr-xr-x 3 root root 0 Jan 1 00:00 gpiochip192
drwxr-xr-x 3 root root 0 Jan 1 00:00 gpiochip224
--w------- 1 root root 4096 Jan 1 00:00 unexport
您有两个 GPIO 引脚 block 。一个 block 从编号 192 开始,另一个从 224 开始。在上面的代码中,您试图请求 GPIO 0-31,这在您的平台上不存在。
您可以通过查看每个 gpiochip*
目录中的 ngpio
文件来了解每个 block 中有多少个 GPIO。
关于linux - 如何使用mpc8xxx_gpio.c设备驱动,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3458782/
我是一名优秀的程序员,十分优秀!