字符设备驱动(一)
2014-10-19 23:55
141 查看
框架图:
#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_open(struct inode *inode,struct file *filp) { //printk("fist_drv_open\n"); /*配置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 *filp,const char __user *buf,size_t count,loff_t *ppos) { int val; 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); } //printk("fist_drv_write\n"); 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) { //register_chrdev(111,"first_drv",&first_drv_fops); // if first args 0, the sysytm auto give the dervice number major=register_chrdev(0,"first_drv",&first_drv_fops); firstdrv_class=class_create(THIS_MODULE,"firstdrv"); if(IS_ERR(firstdrv_class)) return PTR_ERR(firstdrv_class); 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; } static 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");
相关文章推荐
- Linux应用程序访问字符设备驱动详细过程【转】
- 字符设备驱动-异步通知
- linux设备驱动开发学习之旅--支持多设备的字符设备驱动
- Linux 字符设备驱动开发基础(四)—— ioctl() 函数解析
- 字符设备驱动 架构分析
- 字符设备驱动
- 第16章 驱动开发之字符设备驱动程序框架
- 韦东山驱动视频笔记——4.字符设备驱动程序之异步通知
- Linux设备驱动第六篇:高级字符驱动操作之iotcl
- “手把手教你学linux驱动开发”OK6410系列之02---虚拟字符设备
- Linux设备驱动学习(4)-字符设备驱动
- Linux 字符设备驱动结构(二)—— 自动创建设备节点
- 阻塞型字符设备驱动及例子
- Linux字符设备驱动
- 重新理解字符设备驱动的编写,针对2.6接口
- Linux设备驱动之简单字符设备驱动开开发
- 字符设备驱动与块设备驱动、网络设备驱动的区别
- Linux字符设备驱动简介
- 字符设备驱动(一)
- 字符设备驱动、平台设备驱动、设备驱动模型、sysfs的比较和关联