zoukankan      html  css  js  c++  java
  • 点亮led灯程序(驱动部分)

    #include <linux/module.h>

    #include <linux/kernel.h>

    #include <linux/fs.h>

    #include <linux/init.h>

    #include <linux/delay.h>

    #include <asm/uaccess.h>

    #include <asm/irq.h>

    #include <asm/io.h>

    #include <asm/arch/regs-gpio.h>

    #include <asm/hardware.h>

    static  struct  class *firstdrv_class;

    static struct class_device *firstdrv_class_dev;

    volatile  unsigned  long  *gpfcon =NULL;

    volatile  unsigned  long  *gpfdat =NULL;

    static int  first_drv_init(void);

    static  int  first_drv_open(struct  inode  *inode,  struct  file  *file )

    { //printk("first_drv_open ");

    /*配置GPF4,5,6 为输出*/

    //初始状态为输入

    *gpfcon &= ~((0x3<<(4*2) ) |(0x3<<(5*2) ) |(0x3<<(6*2) ));

    *gpfcon |=((0x1<<(4*2) ) |(0x1<<(5*2) ) |(0x1<<(6*2) ));

    return  0;

    }

    static ssize_t  first_drv_write(struct  file  *file ,const  char __user  *buf, size_t  count ,loff_t  *ppos) {

    int val;

    //printk("first_drv_write ");

    copy_from_user( &val, buf, count); //copy_to _user();

    if(val==1) {

    //点灯,低电平点灯

    *gpfdat &=~(1<<4) | (1<<5) |(1<<6);

    } else {

    //灭灯

    *gpfdat |=(1<<4) | (1<<5) |(1<<6);

    }

    return 0;

    } static  struct  file_operations  first_drv_fops=

    {

        .owner=THIS_MODULE,    

       .open = first_drv_open,          

       .write=first_drv_write,

    };

    int  major;

    static int  first_drv_init(void) {

    /* 系统自动分配主设备号 */

    major=register_chrdev(0,"first_drv ",&first_drv_fops );

    //注册驱动程序

    firstdrv_class = class_create(THIS_MODULE, "firstdrv");  

    //创建设备节点

    firstdrv_class_dev= class_device_create(firstdrv_class, NULL, MKDEV(major, 0), NULL, "xyz");

    /*if (unlikely(IS_ERR(firstdrv_class_dev)))    return PTR_ERR(firstdrv_class_dev);*/

    //映射寄存器的地址到内核

    gpfcon =(volatile unsigned long * )ioremap(0x56000050,16);             

    gpfdat=gpfcon+1;

    return  0;

    }

    void  first_drv_exit(void) {

    unregister_chrdev(major,"first_drv");

    //卸载驱动

    class_device_unregister(firstdrv_class_dev);    

    class_destroy(firstdrv_class);  iounmap(gpfcon); }    

    module_init( first_drv_init);

    module_exit(first_drv_exit);

    MODULE_LICENSE("GPL");

  • 相关阅读:
    activity 背景透明
    win系统注册缺少的库 32位系统 64位系统
    android 窗
    wireshark抓包分析
    juqery select 标签
    IOS开发应用之Quartz 2D学习指南
    为什么你总会觉得自己的产品不够好
    日志宝
    Android之Inflate()方法用途+setContentView和inflate区别
    Ralasafe
  • 原文地址:https://www.cnblogs.com/kingqinwang/p/5147379.html
Copyright © 2011-2022 走看看