insmod提示 device or resource,同时提示 busy request GPIO 37 for pwm failed
本人最近在学linux驱动编程 首先入手的是pwm的例子,用的是友善之臂 提供的官方源码
在内核编译的时候 pwm驱动 选择编译成模块,友善之臂提供的官方驱动源码
最后生成了 tiny4412_pwm.ko
但是insmod的时候提示]
request GPIO 37 for pwm failed
insmod:can't insert 'tiny4412_pwm.ko':device or resource busy
我做了下面实验
0.官方的代码应该没有错,我一个字没改
1.直接编译进内核 ==>pwm可以用没有问题,用debugfs查看gpio占用情况
#mkdir /data/debug
#mount -t debugfs debugfs /data/debug
#cd /data/debug
# cat gpio
输出:
GPIOs 37-40,GPD0
gpio-37 (pwm ) in lo
2.编译成模块 就是死活insmod不进去 提示就是设备或资源忙,在用debugfs查看gpio占用情况
==>输出
GPIOs 37-40,GPD0
//这个表示没有占用
我百度了一下有几种情况
1.设备号被占用 ==>排除 官方驱动不应该有错,设备号不会分配错
2.GPIO 37 确实被占用 ==>看了一下驱动的代码确实==>tiny4412_pwm_dev_init(void)函数第一句话就这么写的
static int __init tiny4412_pwm_dev_init(void)
{
int ret;
ret = gpio_request(BUZZER_PMW_GPIO, DEVICE_NAME);
if (ret)
{
printk("request GPIO %d for pwm failed\n,error=%d", BUZZER_PMW_GPIO, ret);
return ret;
}
..
}
我把 上面代码中断 ret 变量打印了出来 是-16 //#define EBUSY 16 /* Device or resource busy */ -16的意思就是被占用
但是debugfs查看gpio占用情况 就是告诉我没有占用
请教各位 这个问题怎么解决 谢谢