Linux驱动设计——字符杂项设备
杂项设备
struct miscdevice{int minor; //杂项设备的此设备号(如果设置为MISC_DYNAMIC_MINOR,表示系统自动分配未使用的minor)const char *name;const stuct file_operations *fops;//驱动主题函数入口指针struct list_head list;struct device *parent;struct device *this device;const char *nodename;(在/dev下面创建的设备驱动节点)mode_t mode;
};
1 #include <linux/miscdevice.h> 2 #include <linux/delay.h> 3 #include <asm/irq.h> 4 #include <mach/regs-gpio.h> 5 #include <mach/hardware.h> 6 #include <linux/kernel.h> 7 #include <linux/module.h> 8 #include <linux/init.h> 9 #include <linux/mm.h> 10 #include <linux/fs.h> 11 #include <linux/types.h> 12 #include <linux/delay.h> 13 #include <linux/moduleparam.h> 14 #include <linux/slab.h> 15 #include <linux/errno.h> 16 #include <linux/ioctl.h> 17 #include <linux/cdev.h> 18 #include <linux/string.h> 19 #include <linux/list.h> 20 #include <linux/pci.h> 21 #include <linux/gpio.h> 22 #include <asm/uaccess.h> 23 #include <asm/atomic.h> 24 #include <asm/unistd.h> 25 26 27 #define DEVICE_NAME "leds" 28 29 #define IOCTL_LED_ON 1 30 #define IOCTL_LED_OFF 0 31 32 static unsigned long led_table [] = 33 { 34 S3C2410_GPB(5), 35 S3C2410_GPB(6), 36 S3C2410_GPB(7), 37 S3C2410_GPB(8), 38 }; 39 40 static unsigned int led_cfg_table [] = 41 { 42 S3C2410_GPIO_OUTPUT, 43 S3C2410_GPIO_OUTPUT, 44 S3C2410_GPIO_OUTPUT, 45 S3C2410_GPIO_OUTPUT, 46 }; 47 48 static int gt2440_leds_ioctl( 49 // struct inode *inode, 50 struct file *file, 51 unsigned int cmd, 52 unsigned long arg) 53 { 54 if (arg > 4) 55 { 56 return -EINVAL; 57 } 58 59 switch(cmd) 60 { 61 case IOCTL_LED_ON: 62 // 设置指定引脚的输出电平为0 63 s3c2410_gpio_setpin(led_table[arg], 0); 64 return 0; 65 66 case IOCTL_LED_OFF: 67 // 设置指定引脚的输出电平为1 68 s3c2410_gpio_setpin(led_table[arg], 1); 69 return 0; 70 71 default: 72 return -EINVAL; 73 } 74 } 75 76 static struct file_operations dev_fops = { 77 .owner = THIS_MODULE, 78 .unlocked_ioctl = gt2440_leds_ioctl, 79 }; 80 81 static struct miscdevice misc = { 82 .minor = MISC_DYNAMIC_MINOR, 83 .name = DEVICE_NAME, 84 .fops = &dev_fops, 85 }; 86 87 static int __init dev_init(void) 88 { 89 int ret; 90 91 int i; 92 for (i = 0; i < 4; i++) 93 { 94 s3c2410_gpio_cfgpin(led_table[i], led_cfg_table[i]); 95 s3c2410_gpio_setpin(led_table[i], 0); 96 } 97 98 ret = misc_register(&misc); 99 100 printk (DEVICE_NAME" initialized\n"); 101 102 return ret; 103 } 104 105 static void __exit dev_exit(void) 106 { 107 misc_deregister(&misc); 108 } 109 110 module_init(dev_init); 111 module_exit(dev_exit); 112 113 MODULE_LICENSE("GPL"); 114 MODULE_AUTHOR("www.e-online.cc"); 115 MODULE_DESCRIPTION("LEDS control for GT2440 Board");
View Code
转载于:https://www.cnblogs.com/kwseeker-bolgs/p/4472438.html
Linux驱动设计——字符杂项设备相关推荐
- Linux驱动(14)--字符类设备与驱动
字符类设备 1. 静态申请字符类设备号 1.1 所需函数与头文件 1.2 源码与注释 1.3 运行结果 2. 动态申请字符类设备号 2.1 所需函数与头文件 2.2 源码与注释 2.3 运行结果 3. ...
- linux misc device字符杂项设备驱动
杂项设备也是在嵌入式系统中用得比较多的一种设备驱动.miscdevice共享一个主设备号MISC_MAJOR(即10),但次设备号不同.misc设备其实就是特殊的字符设备,主设备编号采用10,并且可自 ...
- linux 杂项设备,Linux下自动创建节点的字符杂项设备 misc_register
Linux下自动创建节点的字符杂项设备 misc_register admin • 2020 年 01 月 07 日 杂项设备 Linux里面的misc杂项设备是主设备号为10的驱动设备 定义头文件: ...
- 【linux驱动之字符设备驱动基础】
linux驱动之字符设备驱动基础 文章目录 linux驱动之字符设备驱动基础 前言 一.开启驱动学习之路 二.驱动预备知识 三.什么是驱动? 3.1 驱动概念 3.2 linux 体系架构 3.3 模 ...
- linux用户空间flash驱动,全面掌握Linux驱动框架——字符设备驱动、I2C驱动、总线设备驱动、NAND FLASH驱动...
原标题:全面掌握Linux驱动框架--字符设备驱动.I2C驱动.总线设备驱动.NAND FLASH驱动 字符设备驱动 哈~ 这几天都在发图,通过这种方式,我们希望能帮大家梳理学过的知识,全局的掌握Li ...
- linux驱动之字符设备
linux驱动之字符设备 linux驱动设备分类 linux驱动分为了三种驱动: 字符设备: 字符设备和应用程序之间是以字节进行进行数据交换的.在进行数据交换的时候数据是以一定顺序进行传输的,传输是实 ...
- Linux驱动之 字符设备 ioctl接口使用
字符设备ioctl接口使用: Linux驱动编写除了对设备进行读写数据之外,通常还希望可以对设备进行控制. 从应用层传递一些命令参数,并在驱动层实现相应设备操作,这时候就用到了 ioctl函数: 应用 ...
- Linux驱动之字符设备驱动
系列文章目录 第一章 Linux入门之驱动框架 第二章 Linux驱动之字符设备驱动 文章目录 系列文章目录 前言 一.认识字符设备驱动 1.基本概念 2.基本概念 二.字符设备旧框架 1.注册和注销 ...
- Linux驱动设计——硬件基础
Linux 驱动设计之硬件基础 0.开篇说明 本片内容主要来源于宋宝华老师<Linux设备驱动开发> 1.处理器 目前主流的通用处理器(GPP)多采用SoC(片上系统)的芯片设计方法,集成 ...
最新文章
- 编程语言java-并发(锁)
- golang中的接口
- spring里头各种获取ApplicationContext的方法
- boost::describe模块实现string转enum的测试程序
- Python 列表List的定义及操作
- 关于显示和隐藏DIV标签
- 8位二进制数的原码、反码、补码以及它能表示的范围
- 全面质量管理体系方案
- php环境搭建phpeclipse
- 向量空间的基和维数例题_向量空间的基与维数.ppt
- SpringBoot整合腾讯云COS
- 外部方式启动AndroidStudio模拟器
- 怎么用diskgenius扩大c盘,超简单。
- Keras.metrics中的 accuracy 总结
- 数据标注工具下载中遇到的各种问题
- linux shell编程从入门到精通pdf_SHELL脚本编程入门
- 文件目录自动生成工具--Dir Tree Noter
- 用户管理“明星”工具——在线客服系统
- 使用 gitbook 制作 pdf 电子书
- 防止进入后含有edittext的界面自动弹出软件盘
热门文章
- Hyperledger Fabric 1.0 实战开发系列 第一课 系统环境搭建
- mysql sail_MySQL使用小记
- Syszuxpin中文输入法移植
- mysql sys exec_mysql提权lib_mysqludf_sys执行sys_exec出现32256的问题解决办法
- Too many files open; check that FILES = 20 in your CONFIG.SYS file 解决方案
- ECCV 2020《Linguistic Structure Guided Context Modeling for Referring Image Segmentation》论文笔记
- 51单片机的配p10端口c语言,stc12c5a16s2的单片机的p5口做普通端口怎么定义?
- ssh 与 telnet 有何不同?_Secure Shell(SSH)介绍
- 20210614 什么是状态?什么是状态空间?
- [Java复习02] 集合框架 Collection