Driver:LED灯操作、内核空间和用户空间的数据交互、ioctl函数、设备文件安装与销毁

1、LED灯操作
用户空间执行open时,led1亮;执行close时,led1灭。
电路原理图:
    led1 —> GPIOC12
如何控制:
    cpu datasheet 特殊功能寄存器

在linux下操作GPIO管脚有两种方式:
    1)像裸板开发一样通过’指针 + 位操作‘来完成特殊功能寄存器的设置。
        问题在于:/* 要将特殊功能寄存器的物理地址转换成虚拟地址。*/
    2)通过GPIO库函数的方式
        在内核中提供了操作GPIO管脚的库函数,其使用有固定的套路:
        a)申请管脚;
           intgpio_request(unsigned gpio, const char *label);
                功能:向内核申请GPIO资源
                gpio:GPIO软件编号
                name:标识
        b)使用管脚;
            intgpio_direction_output(int gpio, int value);
                功能:设置GPIO为输出口,并且输出value值
                gpio:GPIO软件编号
                value:管脚状态,1和0代表高低电平
            intgpio_direction_inputput(int gpio);
                功能:设置GPIO为输入口
                gpio:GPIO软件编号
            voidgpio_set_value(int gpio, int value);
                功能:设置GPIO的状态为value
                gpio:GPIO软件编号
                value:管脚状态
            intgpio_get_value(int gpio);
                功能:获取GPIO的状态,返回值为状态信息
                gpio:GPIO软件编号
                返回值:非0 – 高电平;0 – 低电平            
        c)释放管脚;
            voidgpio_free(unsigned gpio);
                功能:释放GPIO资源
                gpio:GPIO软件编号

<GPIO软件编号>

验证:
    把内核自带的led驱动去掉,重新烧写内核到开发板,再验证新的led驱动。
    $:’ make menuconfig
        Device Drivers  —> 
        Character devices  —> 
               < > My led driver  // 没有就不用管
            -*- LED Support  —> 
               < >   LED Support for GPIO connected LEDs
               < >   PWM driven LED Support  
               [ ]   LED Trigger support       来源:不才Jerry

声明:本站部分文章及图片转载于互联网,内容版权归原作者所有,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!

上一篇 2017年2月2日
下一篇 2017年2月2日

相关推荐