欢迎来到天天文库
浏览记录
ID:55709261
大小:232.50 KB
页数:16页
时间:2020-05-26
《树莓派驱动学习-字符设备驱动(LED).doc》由会员上传分享,免费在线阅读,更多相关内容在应用文档-天天文库。
1、从上次hello world程序中,我们已经搭建好了驱动学习相关的环境搭建,为接下来的设备驱动做好了准备。同时通过最简单的hello world程序,学习了模块的初始化和退出,知道了如何编写***_init和***_exit函数,知道了如何通过内核打印函数printk输出相关信息。Linux中的设备驱动分三大类:字符设备、块设备、网络设备。本篇文章讨论字符型设备程序如何编写,通过简单的LED驱动程序介绍相关知识。下篇文章介绍杂项设备(misc)驱动程序的编写,这在实际项目中很常用,相当于字符设备的简化版。首先附上完整程序:[plain] viewplai
2、ncopy1.
/********************************************************************************************* 2.* File: led_driver.c 3.* Author: Fawen Xu 4.* Desc: led driver code 5.* History: May 9th 2015 6.***********************************3、**********************************************************/ 7.#include 8.#include 9.#include 10.#include 11.#include 12.#include 13.#include 14.#include 4、delay.h> 15.#include 16.#include 17.#include 18.#include 19.#include 20.#include 21.#include 22. 23.MODULE_AUTHOR("Fawen Xu"); 24.MODULE_LICENSE("Dual BSD/GPL"); 25.5、 26.static unsigned int led_major=0; 27.static unsigned int bcm2835_gpio_baseaddr; 28. 29.module_param(led_major,int,0); 30. 31.#define LED_MAGIC 'k' 32.#define LED_ON_CMD _IO(LED_MAGIC,1) 1.#define LED_OFF_CMD _IO(LED_MAGIC,2) 2. 3.//#define BCM2835_PERI_BASE 6、 0x 4.//#define BCM2835_PERI_BASE 0x7e 5.#define BCM2835_GPIO_BASE 0x 6.#define BCM2835_GPIOReg_GPFSEL0 0x 7.#define BCM2835_GPIOReg_GPSET0 0xc 8.#define BCM2835_GPIOReg_GPCLR0 0x 9.#define BCM2835_GPIO_FSEL_INP 0x 10.#define BCM2837、5_GPIO_FSEL_OUTP 0x 11.#define RPI_BPLUS_GPIO_J8_12 18 12. 13.int bcm2835_gpio_fsel(int pin, int mode) 14.{ 15. volatile int shift,value; 16. volatile int *bcm2835_gpio_fsel_addrp = bcm2835_gpio_baseaddr + (pin/10)*4; 17. //printk("In bcm2835_gpio_f8、sel function:"); 18. //printk(" p
3、**********************************************************/ 7.#include 8.#include 9.#include 10.#include 11.#include 12.#include 13.#include 14.#include 4、delay.h> 15.#include 16.#include 17.#include 18.#include 19.#include 20.#include 21.#include 22. 23.MODULE_AUTHOR("Fawen Xu"); 24.MODULE_LICENSE("Dual BSD/GPL"); 25.5、 26.static unsigned int led_major=0; 27.static unsigned int bcm2835_gpio_baseaddr; 28. 29.module_param(led_major,int,0); 30. 31.#define LED_MAGIC 'k' 32.#define LED_ON_CMD _IO(LED_MAGIC,1) 1.#define LED_OFF_CMD _IO(LED_MAGIC,2) 2. 3.//#define BCM2835_PERI_BASE 6、 0x 4.//#define BCM2835_PERI_BASE 0x7e 5.#define BCM2835_GPIO_BASE 0x 6.#define BCM2835_GPIOReg_GPFSEL0 0x 7.#define BCM2835_GPIOReg_GPSET0 0xc 8.#define BCM2835_GPIOReg_GPCLR0 0x 9.#define BCM2835_GPIO_FSEL_INP 0x 10.#define BCM2837、5_GPIO_FSEL_OUTP 0x 11.#define RPI_BPLUS_GPIO_J8_12 18 12. 13.int bcm2835_gpio_fsel(int pin, int mode) 14.{ 15. volatile int shift,value; 16. volatile int *bcm2835_gpio_fsel_addrp = bcm2835_gpio_baseaddr + (pin/10)*4; 17. //printk("In bcm2835_gpio_f8、sel function:"); 18. //printk(" p
4、delay.h> 15.#include 16.#include 17.#include 18.#include 19.#include 20.#include 21.#include 22. 23.MODULE_AUTHOR("Fawen Xu"); 24.MODULE_LICENSE("Dual BSD/GPL"); 25.
5、 26.static unsigned int led_major=0; 27.static unsigned int bcm2835_gpio_baseaddr; 28. 29.module_param(led_major,int,0); 30. 31.#define LED_MAGIC 'k' 32.#define LED_ON_CMD _IO(LED_MAGIC,1) 1.#define LED_OFF_CMD _IO(LED_MAGIC,2) 2. 3.//#define BCM2835_PERI_BASE
6、 0x 4.//#define BCM2835_PERI_BASE 0x7e 5.#define BCM2835_GPIO_BASE 0x 6.#define BCM2835_GPIOReg_GPFSEL0 0x 7.#define BCM2835_GPIOReg_GPSET0 0xc 8.#define BCM2835_GPIOReg_GPCLR0 0x 9.#define BCM2835_GPIO_FSEL_INP 0x 10.#define BCM283
7、5_GPIO_FSEL_OUTP 0x 11.#define RPI_BPLUS_GPIO_J8_12 18 12. 13.int bcm2835_gpio_fsel(int pin, int mode) 14.{ 15. volatile int shift,value; 16. volatile int *bcm2835_gpio_fsel_addrp = bcm2835_gpio_baseaddr + (pin/10)*4; 17. //printk("In bcm2835_gpio_f
8、sel function:"); 18. //printk(" p
此文档下载收益归作者所有