1 / 16
文档名称:

树莓派驱动学习-字符设备驱动(LED).doc

格式:doc   大小:232KB   页数:16页
下载后只包含 1 个 DOC 格式的文档,没有任何的图纸或源代码,查看文件列表

如果您已付费下载过本站文档,您可以点这里二次下载

分享

预览

树莓派驱动学习-字符设备驱动(LED).doc

上传人:mkjafow 2020/6/11 文件大小:232 KB

下载得到文件列表

树莓派驱动学习-字符设备驱动(LED).doc

相关文档

文档介绍

文档介绍:从上次hello world程序中,我们已经搭建好了驱动学****相关的环境搭建,为接下来的设备驱动做好了准备。同时通过最简单的hello world程序,学****了模块的初始化和退出,知道了如何编写***_init和***_exit函数,知道了如何通过内核打印函数printk输出相关信息。Linux中的设备驱动分三大类:字符设备、块设备、网络设备。本篇文章讨论字符型设备程序如何编写,通过简单的LED驱动程序介绍相关知识。下篇文章介绍杂项设备(misc)驱动程序的编写,这在实际项目中很常用,相当于字符设备的简化版。首先附上完整程序:[plain] viewplaincopy</pre><pre name="code" class="plain">/*********************************************************************************************  * File:   * Author:   Fawen Xu  * Desc: led driver code  * History:  May 9th 2015  *********************************************************************************************/  #include <linux/>  #include <linux/>  #include <linux/>  #include <linux/>  #include <linux/>  #include <linux/>  #include <linux/>  #include <linux/>  #include <linux/>  #include <linux/>  #include <linux/>  #include <asm/>  #include <asm/>  #include <asm/>  #include <linux/>    MODULE_AUTHOR("Fawen Xu");  MODULE_LICENSE("Dual BSD/GPL");    static unsigned int led_major=0;  static unsigned int bcm2835_gpio_baseaddr;     module_param(led_major,int,0);    #define LED_MAGIC 'k'  #define LED_ON_CMD _IO(LED_MAGIC,1)  #define LED_OFF_CMD _IO(LED_MAGIC,2)    //#define BCM2835_PERI_BASE           0x  //#define BCM2835_PERI_BASE           0x7e  #define BCM2835_GPIO_BASE           0x  #define BCM2835_GPIOReg_GPFSEL0     0x  #define BCM2835_GPIOReg_GPSET0      0xc  #define BCM2835_GPIOReg_GPCLR0      0x  #define BCM2835_GPIO_FSEL_INP       0x  #define BCM2835_GPIO_FSEL_OUTP      0x  #define RPI_BPLUS_GPIO_J8_12        18    int bcm2835_gpio_fsel(int pin, int mode)  {         volatile int shift,value;      volatile int *bcm2835_gpio_fsel_addrp = bcm2835_gpio_baseaddr + (pin/10)*4;      //printk("In bcm2835_gpio_fsel function:\n");      //printk("  pin = %d, (pin/10)*4= %d",pin,(pin/10)*4);      //printk("  bcm2835_gpio_baseaddr = 0x%x\n", bcm2835_gpio_baseaddr);      //printk("  bcm