- 博客(29)
- 资源 (9)
- 收藏
- 关注
转载 test_bit、set_bit和clear_bit
//将addr的第nr(nr为0-31)位置值置为1; //nr大于31时,把高27的值做为当前地址的偏移,低5位的值为要置为1的位数 extern __inline__ int set_bit(int nr,int * addr) { int mask, retval; addr += nr >> 5; //nr大于31时...
2018-03-31 17:27:58 6348
原创 pack 内存对齐操作
#pragma pack(push) //保存对齐状态#pragma pack(4)//设定为4字节对齐#pragma pack(pop)//恢复对齐状态#pragma pack( [show] | [push | pop] [, identifier], n )1,pack提供数据声明级别的控制,对定义不起作用;2,调用pack时不指定参数,n将被设成默认值;3,一旦改变数据类型的alignme...
2018-03-31 09:24:38 552
原创 RESPONSE(x) 宏定义测试代码
#include <iostream>using namespace std;#define LK_STUCK_KEY 111#define LK_SELFTEST_FAILED 112static struct { unsigned char value; unsigned char *name;} lk_response[] = {#define RESPONSE(x) { ...
2018-03-22 14:52:55 186
原创 I2C_ADDRS(addr, addrs...)理解
IIC驱动中的宏定义:/* Internal numbers to terminate lists */#define I2C_CLIENT_END 0xfffeU/* Construct an I2C_CLIENT_END-terminated array of i2c addresses */#define I2C_ADDRS(addr, addrs...) \ ((const unsign...
2018-03-20 19:39:32 2910
转载 linux设备驱动模型 - device/bus/driver
在linux驱动模型中,为了便于管理各种设备,我们把不同设备分别挂在他们对应的总线上,设备对应的驱动程序也在总线上找,这样就提出了deivce-bus-driver的模型,硬件上有许多设备总线,那么我们就在设备模型上抽象出bus概念,相应的device就代表设备,driver表示驱动,在代码中它们对应的结构体下面介绍,对于实际的设备及总线,这些结构体就可以嵌入到实际总线上。1. bus了解bus,...
2018-03-19 20:50:40 555
转载 kset_create_and_add
本文中所有代码都是来自linux内核源文件/lib/kobject.c/** * kset_create_and_add - 创建一个动态的kset 结构并添加到sysfs中 * * @name: kset名称 * @uevent_ops: kset的kset_uevent_ops 结构 * @parent_kobj: kset的付kobject,如果有的话 * * 该方法创建一个动态的kset...
2018-03-19 20:43:28 648
转载 linux设备驱动模型之 kset原理与实例分析
1、 Kset kset是具有相同类型的kobject的集合,在sysfs中体现成一个目录,在内核中用kset数据结构表示,定义为:struct kset {struct list_head list; //连接该kset中所有kobject的链表头spinlock_t list_lock;struct kobject kobj; //内嵌的kobjectstruct kset_uev...
2018-03-19 20:41:30 203
转载 Linux 设备模型基本概念 (一)
1、设备模型引入Linux 2.6内核最初为了应付电源管理的需要,提出了一个设备模型来管理所有的设备。在物理上,外设之间是有一种层次关系的,比如把一个U盘插到笔记本上,实际上这个U盘是接在一个USB Hub上,USB Hub又是接在USB 2.0 Host Controller (EHCI)上,最终EHCI又是一个挂在PCI Bus上的设备。这里的一个层次关系是:PCI->EHCI->...
2018-03-19 20:39:24 195
转载 Linux 设备模型之 (kobject、kset 和 Subsystem)(二)
1、kobject 结构在Linux内核里,kobject是组成Linux设备模型的基础,一个kobject对应sysfs里的一个目录。从面向对象的角度来说,kobject可以看作是所有设备对象的基类,因为C语言并没有面向对象的语法,所以一般是把kobject内嵌到其他结构体里来实现类似的作用,这里的其他结构体可以看作是kobject的派生类。Kobject为Linux设备模型提供了很多有用的功能...
2018-03-19 20:33:41 205
转载 深入理解l内核v4l2框架之video for linux 2(一)
在看了很多关于v4l2驱动的例程之后,想深入研究下linux内核的v4l2框架,顺便把这些记录下来,以备查用。Video for Linux 2 随着一些视频或者图像硬件的复杂化,V4L2驱动也越来越趋于复杂。许多硬件有多个IC,在/dev下生成多个video设备或者其他的诸如,DVB,ALSA,FB,I2C ,IR等等非V4L2的设备。所以,V4L2驱动程序就要为这些硬件设备提供音视频的...
2018-03-19 20:19:28 500
转载 V4L2 driver(一). 整体框架
1.1 从字符设备说起熟悉v4l2用户空间编程的都知道, v4l2编程主要是调用一系列的ioctl函数去对v4l2设备进行打开, 关闭, 查询, 设置等操作. v4l2设备是一个字符设备, 而且其驱动的主要工作就是实现各种各样的ioctl. v4l2的整体框架如下图所示V4L2的整体框架图 上图中, 淡绿色背景为用户空间, 淡蓝色背景为内核空间. 椭圆表示相关的结构体, 子系统或实例. 方框表示相...
2018-03-19 20:18:50 317
转载 V4L2驱动框架
V4L2驱动框架主设备号: 81次设备号: 0-63 64-67 192-223 224-255/dev/videoX 应用层————————————char驱动————————————V4L2————————————具体的驱动————————————硬件应用层的操作都需要有底层V4L2驱动的支持。内核中有一些非常完善的例子。比如:linux-2.6.26内核目录dr...
2018-03-16 21:15:44 281
转载 视频驱动V4L2子系统驱动架构 - ioctl
基于linux4.6.3,最后会附上一张ioctl调用总图,分析代码还是要用图来说明,这样更清晰一点,我就是这么分析的,不过平时分析的图很随便,而且很大,所以就不能在这里呈现,我在这里会贴出一个简略图ioctl详解进入ioctl都是从cdev->ops->ioctl进入的,一般的驱动cdev都是驱动自己初始化的,在v4l2架构中,cdev都已经初始化完成,不需要驱动开发者来初始化,下面...
2018-03-16 21:09:27 653
转载 视频驱动V4L2子系统驱动架构 - 驱动框架
V4L2驱动框架v4l2驱动架构如图所示,v4l2也就是video for linux two,那么也就是说还有One了,v4l2前面还有v4l图中芯片模块对应Soc的各个子模块,video_device结构体主要用来控制Soc的video模块,v4l2_device会包含多个v4l2_subdev ,每个v4l2_subdev 用来控制各自的子模块,某些驱动不需要v4l2_subdev ,依靠v...
2018-03-16 21:05:27 220
转载 V4L2框架分析学习
Author:CJOKContact:cjok.liao#gmail.comSinaWeibo:@廖野cjok 1、概述Video4Linux2是Linux内核中关于视频设备的内核驱动框架,为上层的访问底层的视频设备提供了统一的接口。凡是内核中的子系统都有抽象底层硬件的差异,为上层提供统一的接口和提取出公共代码避免代码冗余等好处。就像公司的老板一般都不会直接找底层的员工谈话,而是找部门经理了解情况...
2018-03-16 21:02:24 256
转载 camera 原理
转载:http://blog.csdn.net/g_salamander/article/details/80868351、Color Filter Array — CFA随着数码相机、手机的普及,CCD/CMOS 图像传感器近年来得到广泛的关注和应用。 图像传感器一般都采用一定的模式来采集图像数据,常用的有 BGR 模式和 CFA 模式。BGR 模式是一种可直接进行显示和压缩等处理的图像数据模式...
2018-03-16 20:53:02 712
转载 Linux platform总线(1):总体框架
PlatForm设备驱动: 一、platform总线、设备与驱动 1.一个现实的Linux设备和驱动通常都需要挂接在一种总线上,对于本身依附于PCI、USB、I2 C、SPI等的设备而言,这自然不是问题, 但是在嵌入式系统里面,SoC系统中集成的独立的外设控制器、挂接在SoC内存空间的外设等确不依附于此类总线。 基于这一背景,Linux发明了一种虚拟的总线,称为platform总线,相应的...
2018-03-16 20:46:35 231
转载 Linux杂项设备驱动
一、Linux杂项设备驱动简介Linux杂项驱动出现的意义在于:有很多简单的外围字符设备,它们功能相对简单,一个设备占用一个主设备号对于内核资源来说太浪费。所以对于这些简单的字符设备它们共用一个主设备号,不同的设备使用不同的次设备号.杂项驱动特点:主设备号相同,次设备号不同在文件系统中自动生成设备节点杂项设备描述结构体struct miscdevice {int minor;//次设备号cons...
2018-03-16 19:23:25 800
原创 misc设备驱动源码
/* * Head entry for the doubly linked miscdevice list */static LIST_HEAD(misc_list);static DEFINE_MUTEX(misc_mtx);/* * Assigned numbers, used for dynamic minors */#define DYNAMIC_MINORS 64 /* like dyn...
2018-03-16 19:21:25 208
转载 register_chrdev深入分析
register_chrdev __register_chrdev(major, 0, 256, name, fops); struct char_device_struct *cd; cd = __register_chrdev_region(major, baseminor, count, name); ...
2018-03-16 19:14:19 1062
原创 字符设备驱动基本流程
一、申请设备号: 1.动态申请设备号(alloc_chrdev_region) 2.静态申请设备号(register_chrdev_region)二、设备注册: 1.为cdev分配空间(cdev_alloc) 2.初始化cdev(cdev_init) 3.将cdev添加进Kernel(cdev_add)三、生成设备节点 1.创建class(class_creat...
2018-03-16 18:47:04 2433 1
转载 spi总线驱动简单代码
spi-bus.c#include <linux/init.h> #include <linux/module.h> #include <linux/kernel.h> #include <linux/device.h> int my_match(struct device *dev, struct device_driver *drv...
2018-03-14 19:04:35 623
转载 Linux SPI总线设备驱动模型详解
随着技术不断进步,系统的拓扑结构越来越复杂,对热插拔、跨平台移植性的要求越来越高,早期的内核难以满足这些要求,从linux2.6内核开始,引入了总线设备驱动模型。其实在linux2.4总线的概念就已经提出来了,直到2.6版本的内核才运用。Linux系统中有很多条总线,如I2C、USB、platform、PCI等。以spi为例,假如有M种不同类型CPU,N中不同SPI外设,在写裸机驱动的时候,M种C...
2018-03-14 18:26:59 361
原创 驱动中常见的队列操作函数
/** * destroy_workqueue - safely terminate a workqueue * @wq: target workqueue * * Safely destroy a workqueue. All work currently pending will be done first. */void destroy_workqueue(struct workqueue_...
2018-03-14 17:52:20 525
原创 两种不同方式的设备释放区别
static void cdev_default_release(struct kobject *kobj){ struct cdev *p = container_of(kobj, struct cdev, kobj); struct kobject *parent = kobj->parent; cdev_purge(p); kobject_put(parent);}static voi...
2018-03-14 14:31:33 208
原创 __register_chrdev_region 指针操作分析
/* * Register a single major with a specified minor range. * * If major == 0 this functions will dynamically allocate a major and return * its number. * * If major > 0 this function will attempt to...
2018-03-14 14:11:58 221
原创 register_chrdev_region源码理解
先贴源代码:/** * register_chrdev_region() - register a range of device numbers * @from: the first in the desired range of device numbers; must include * the major number. * @count: the number of...
2018-03-14 11:53:27 253
转载 Linux之解析鼠标input事件数据
Linux中USB鼠标驱动:http://blog.csdn.net/qq_21792169/article/details/48790745或者直接Linux自带的USB鼠标驱动。/* * 向输入子系统汇报鼠标事件情况,以便作出反应。 * data 数组的第0个字节:bit 0、1、2、3、4分别代表左、右、中、SIDE、EXTRA键的按下情况; * data...
2018-03-13 19:29:27 885
VS2017-吉比特can分析仪二次开发
2019-01-29
VS2017-MFC-生成二维码小程序
2018-12-07
VS2017平台下最简洁的基于C语言开发的串口接收程序测试代码
2018-11-09
VS2017平台下最简洁的基于C语言开发的串口发送程序
2018-11-09
aes加密解密测试代码
2017-10-14
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人