主题 : tiny4412的pwm驱动编译成模块后,无法insmod提示 device or resource busy 复制链接 | 浏览器收藏 | 打印
级别: 新手上路
UID: 125646
精华: 0
发帖: 3
金钱: 15 两
威望: 3 点
贡献值: 0 点
综合积分: 6 分
注册时间: 2016-05-31
最后登录: 2016-07-08
楼主  发表于: 2016-06-21 22:56

 tiny4412的pwm驱动编译成模块后,无法insmod提示 device or resource busy

开发板:tiny4412

本人最近在学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占用情况  就是告诉我没有占用  
请教各位 这个问题怎么解决  谢谢