Linux驱动
迷失0
这个作者很懒,什么都没留下…
展开
-
Linux总线设备驱动模型学习
Linux总线驱动模型主要在2.6以后内核提出 功能:主要对热插拔、跨平台移植性的要求支持 当外部设备接入总线后,总线会与挂载到总线上的每个驱动一一进行匹配,如果匹配上就调用被匹配上的驱动。 Linux内核中,总线由bos_type结构表示,定义在 struct bus_type { const char *name; 总线名称 int (*mat原创 2015-06-27 13:31:55 · 629 阅读 · 0 评论 -
linux_I2C学习一
一、I2C总线结构: I2C总线是由PHILIPS公司开发的两线式串行总线,用于连接微控制器及其外围设备。 I2C总线只有两根双向信号线。 SDA:Serial Data Line-数据线 SCL:Serial Clock-时钟线 I2C总线协议规定:从设备采用 7位的地址。 D7~ D1:从设备地址。 D0位:数据传送方向位,为“0”时表示主设备向从设备原创 2015-07-09 13:39:37 · 490 阅读 · 0 评论 -
linux_I2C学习三(I2C子系统)
一、Linux--I2C子系统 1. I2C核心 I2C 总线和 I2C 设备驱动的中间枢纽,它提供了 I2C 总线驱动和设备驱动的注册、注销方法等。 2. I2C控制器驱动 I2C CPU对 I2C控制器的驱动实现, 控制器可在 CPU 外部, 也可以集成在 CPU 内部。 3. I2C设备驱动 对 I2C从设备的驱动实现,如AT24C02的驱动。 二、linu原创 2015-07-09 16:08:03 · 610 阅读 · 0 评论 -
Linux-FLASH驱动设计四
在Linux内核中MTD子系统为NORFLASH、和NANDFLASH设备提供统一的接口,从而使得FLASH驱动设计简化。 #cat /proc/mtd :可以查看分区,dev目录下以“mtd”打头的设备文件对应相应的分区。 MTD子系统结构图: MTD子系统简化了FLASH驱动的编写、让驱动更加规范。原创 2015-06-29 13:59:54 · 458 阅读 · 0 评论 -
Linux_USB驱动程序设计学习
Linux_USB软件系统架构构成: usb主控制驱动(USB Host Controller Driver):为USB主控制器提供驱动 usb核心(USB Core):为usb主控制器和usb设备驱动连接起桥梁作用 usb设备驱动(USB Client Driver):为连接到usb主机的设备提供驱动 USB设备组成结构: usb设备包括配置(c原创 2015-08-09 23:32:38 · 740 阅读 · 0 评论 -
Linux 硬中断和软中断
概述 从本质上来讲,中断是一种电信号,当设备有某种事件发生时,它就会产生中断,通过总线把电信号发送给中断控制器。 如果中断的线是激活的,中断控制器就把电信号发送给处理器的某个特定引脚。处理器于是立即停止自己正在做的事, 跳到中断处理程序的入口点,进行中断处理。 (1) 硬中断 由与系统相连的外设(比如网卡、硬盘)自动产生的。主要是用来通知操转载 2015-10-11 10:53:43 · 6543 阅读 · 0 评论 -
Linux-3.0.35输入子系统
Programming input drivers ~~~~~~~~~~~~~~~~~~~~~~~~~ 1. Creating an input device driver ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1.0 The simplest example ~~~~~~~~~~~~~~~~~~~~~~~~ Here comes a very simp原创 2015-10-12 11:22:46 · 856 阅读 · 0 评论 -
Linux中断分层工作队列学习
Linux中断嵌套处理: 概念:当一种类型的中断发生时又产生另外一种中断 慢速中断:当处理中断函数时,中断总开关是不关闭的,允许别的中断产生。 1.不同中断设备:处理中断开始。。。。。。发生另外中断,执行发生的中断,执行完成,返回之前的中断处理函数继续执行。。。。 2.相同类型设备:处理中断开始。。。。。。发生另外中断,忽略发生的中断,继续执行之前的中断函数,造成中原创 2015-06-26 16:33:41 · 926 阅读 · 0 评论 -
Linux使用定时器消抖
按键去抖动的方法主要有两种,一种是硬件电路去抖动;另外一种就是软件延时去抖。而延时又一般分为两种,一种是for循环等待,另一种是定时器延时。在操作系统中,由于效率方面的原因,一般不允许使用for循环来等待,只能使用定时器。 Linux内核使用struct timer_list来描述一个定时器: { struct list_head entry; unsigned long expi原创 2015-06-26 16:49:33 · 1022 阅读 · 0 评论 -
Linux阻塞型驱动设计
当一个设备无法立刻满足用户的读写请求时驱动程序应当(缺省地)阻塞进程,使他进入等待(睡眠)状态(释放资源,提高程序运行的效率),直到请求可以得到满足。 对于驱动的读写规范,驱动的读写都要按照阻塞模型设计。 进程进入等待队列后会进入睡眠状态。 内核等待队列定义、初始化: 1.定义等待队列:wait_queue_head_t my_queue 2.初始化等待队列:init_w原创 2015-06-26 20:33:40 · 552 阅读 · 0 评论 -
Linux按键驱动编写
#include <linux/module.h> #include <linux/init.h> #include <linux/miscdevice.h> #include <linux/interrupt.h> #include <linux/io.h> #include <linux/fs.h> #include <asm/uaccess.h> #define GPFCON 0x560000原创 2015-06-26 20:06:28 · 475 阅读 · 0 评论 -
Linux copy_to_user、copy_from_user使用
copy_from_user函数原型:static inline unsigned long copy_from_user(void *to, const void __user *from, unsigned long n) { if (access_ok(VERIFY_READ, from, n)) n = __arch_copy_from_user(to, from,原创 2015-06-26 20:30:59 · 6103 阅读 · 0 评论 -
欢迎使用CSDN-markdown编辑器
欢迎使用Markdown编辑器写博客本Markdown编辑器使用StackEdit修改而来,用它写博客,将会带来全新的体验哦: Markdown和扩展Markdown简洁的语法 代码块高亮 图片链接和图片上传 LaTex数学公式 UML序列图和流程图 离线写博客 导入导出Markdown文件 丰富的快捷键 快捷键 加粗 Ctrl + B 斜体 Ctrl + I 引用 Ctrl原创 2015-06-26 20:02:36 · 297 阅读 · 0 评论 -
Linux-FLASH驱动设计一
块设备概念: 字符设备是指访问的最小单位为一个字节,块设备是指能以块为单位进行访问的设备,块大小一般是512字节的整数倍(不同系统大小不同)。常见的块设备包括硬件,SD卡,光盘等。块设备访问一个字节方法:首先以一个块为大小读取硬件数据出来,然后再做相应的处理。 块设备驱动系统架构: VFS系统架构: VFS是对各种具体文件系统的一种封装,为用户程序访问文件提原创 2015-06-28 22:08:52 · 410 阅读 · 0 评论 -
Linux-FLASH驱动设计二
块设备驱动系统分析: 功能:把内存划出512k,然后利用驱动程序做成块设备进行相应的访问。 #include #include #include #include #include /* printk() */ #include /* kmalloc() */ #include /* everything... */ #include /* error codes原创 2015-06-28 22:44:51 · 391 阅读 · 0 评论 -
Linux-FLASH驱动设计三
#include #include #include #include #include static int major = 0; static int sect_size = 512; //指明每个扇区大小为512 static int nsectors = 1024; struct blk_dev { int size;原创 2015-06-29 13:57:39 · 418 阅读 · 0 评论 -
Linux输入子系统模型
Linux输入子系统模型: Input Device Driver:输入设备驱动,需要用户自己实现 Input Core:输入子系统核心部分,Linux内核已经做好 Input Event Driver:输入时间驱动,Linux内核已经做好 Hardware:输入设备 任何一次输入事件,如鼠标移动, 按键按下,都需要通过InputDeviceDriver- >InputC原创 2015-06-28 13:32:42 · 532 阅读 · 0 评论 -
Linux平台总线设计
平台总线(Platform bus)是Linux2.6内核加入的一种虚拟总线,其优势在于采用了总线的模型对设备与驱动进行了管理,这样提高了程序可移植性。 用户不用自己创建虚拟总线,可直接调用此总线使用。 通过平台总线机制开发设备驱动流程图: 平台设备匹配函数: /** * platform_match - bind platform device to platfor原创 2015-06-27 14:44:26 · 536 阅读 · 0 评论 -
Linux TTY子系统学习笔记
TTY子系统重要结构体: struct tty_driver { int magic; /* magic number for this structure */ struct kref kref; /* Reference management */ struct cdev cdev; struct module *owner; const char *driver_name;原创 2015-12-12 17:18:24 · 928 阅读 · 0 评论