自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(22)
  • 资源 (8)
  • 收藏
  • 关注

转载 浮点数的二进制表示(IEEE 754标准)

浮点数是我们在程序里常用的数据类型,它在内存中到底是怎么样的形式存在,是我了解之前是觉得好神奇,以此记录,作为学习笔记。现代计算机中,一般都以IEEE 754标准存储浮点数,这个标准的在内存中存储的形式为:对于不同长度的浮点数,阶码与小数位分配的数量不一样,如下:对于32位的单精度浮点数,数符分配是1位,阶码分配了8位,尾数分配了是23位。 根据这个标准,我们来尝试把一...

2018-07-31 20:20:59 677

转载 浅析Linux内核同步机制(转)

原文地址:https://blog.csdn.net/fzubbsc/article/details/37736683?utm_source=tuicool&utm_medium=referral 很早之前就接触过同步这个概念了,但是一直都很模糊,没有深入地学习了解过,近期有时间了,就花时间研习了一下《linux内核标准教程》和《深入linux设备驱动程序内核机制》这两本书的相关章节。...

2018-07-30 23:50:19 3153

原创 request_irq和free_irq的使用

static inline int __must_checkrequest_irq(unsigned int irq, irq_handler_t handler, unsigned long flags, const char *name, void *dev){ return request_threaded_irq(irq, handler, NULL, flags, na...

2018-07-29 23:29:43 8043

原创 linux驱动input子系统学习七(总结)

input子系统本身的注册:input_init(void) class_register(&input_class); /* sysfs的class下出现input文件夹 */ input_proc_init(); /* 初始化input的proc文件系统 */ register_chrdev(INPUT_M...

2018-07-29 20:24:44 838

原创 linux驱动input子系统学习六(数据传输流程)

上一篇博客中曾使用input_report_key函数来上报键值和按键状态,现在我们就分析一下它的上报流程。 可以看系统提供了很多来上报各种信息的函数(适用,键盘,鼠标,触摸屏等各种上报信息)它们都是掉用同一的接口input_enent来实现的,所以input_event才是我们分析的重点。static inline void input_report_key(struct i...

2018-07-29 19:06:27 1283

原创 linux驱动input子系统学习五(输入设备驱动层)

输入设备驱动层就是主要由驱动工程师根据具体设备来实现了,既可以实现的很复杂又各种read,write,open等等。也可以实现的很简单。我这里是学习就根据系统给的参考readme实现一份简单的按键值得上报驱动。在documentation文件夹下找到input文件夹,里面有两个主要的文档input.txt和input_programming.txt其中input.txt主要讲述来input...

2018-07-29 16:53:30 1513

原创 linux驱动input子系统学习四(输入事件驱动层)

输入事件层目前系统帮我们区分了三种,通用各种类型输入类设备的evdev,主流,也是将来大方向mousedev,joydev。 我们学习就以evdev来学习,将来使用通用性也更高。一、首先是框架性的调用输入核心层实现的input_register_handler和input_unregister_handler来注册evdev层。static struct input_ha...

2018-07-28 23:47:33 1647

原创 linux驱动input子系统学习三(输入核心层)

输入核心层,是input子系统实现的核心。对下(设备驱动层),提供设备注册接口,输入信息反馈接口。对上(事件驱动层),提供事件注册接口,等。 一.先学习input子系统自己的实现。注册input子系统本身很简单只需要在sysfs中注册号相应的设备类和主设备号即可。下面有难度的是初始化input子系统的proc文件系统,但这不是我们这次分析的核心,也不是必须的,所以proc文...

2018-07-28 15:27:19 1564

原创 device_create和device_add区别

在学习linux驱动的时候经常遇到device_create和device_add两个函数,因为这两个函数都是属于驱动底层的,所以平时很少关注。但最近准备写一个简单驱动框架练手,所以到底用那个来创建出相应的设备,所以准备学习一下这两个的区别,并做好记录。 1.首先看一下device_create函数,注释写的很清楚,创建一个设备,并注册它到sysfs中。提供了强大的格式化注册接口。...

2018-07-28 12:04:34 8331

原创 linux驱动input子系统学习二(框架)

input输入子系统如何工作?例如以一次鼠标按下事件为例子来说明我们的input输入子系统的工作过程:设备驱动层:当我们按下鼠标左键的时候就会触发中断(中断是早就注册好的),就会去执行中断所绑定的处理函数,在函数中就会去读取硬件寄存器来判断按下的是哪个按键和状态 ---->将按键信息上报给input core层  ---> input core层处理好了之后就会上报给inp...

2018-07-26 22:47:34 4196

原创 linux驱动input子系统学习一(基础知识)

一.Linux中的input子系统介绍Input驱动程序是linux输入设备的驱动程序,分成游戏杆(joystick)、鼠标(mouse和mice)、键盘(keyboard)、事件设备(event)。其中事件设备驱动程序是目前通用的驱动程序,可支持键盘、鼠标、触摸屏等多种输入设备。Linux input 子系统将一个输入设备的输入过程分成了设备驱动(input device driver...

2018-07-25 23:48:25 3509 2

原创 Linux 的timer学习和使用

在linux中如果想周期性的干一些事情,或在固定某个时间干一件事情,可以使用内核定时器来完成。比如:按键扫描等 。 下面先看内核定时器的数据组成。struct timer_list { /* * All fields that change during normal runtime grouped to the * same cacheline */ struc...

2018-07-25 20:55:04 12009

原创 linux内核的链表的实现

在Linux内核中,绝大对数的数据结构都是通过链表来连接的,所以链表在内核中起着异常重要的作用。在Linux中链表的使用是以一个非常巧妙的,非常有意思的方式来实现的。这种使用方式和我们平时在传统数据结构课程所教导的使用有很大的差异。先看一下最终使用时的结构。下面我先来分析一下linux内核对于链表的实现。里面好多的操作我本人都是通过画图方式理解的。大家也可以尝试。下面是双向链表的基...

2018-07-24 00:13:22 7017

原创 srtruct input_event学习

srtruct input_event结构体是linux输入子系统的向应用层传递的接口。在一个输入设备中,每发生一次输入事件,srtruct input_event就会被填充。/* * The event structure itself */struct input_event { struct timeval time; /* 表示输入时的时间 */ __u16 ty...

2018-07-22 19:49:17 2538

原创 platform驱动模型使用总结

platform平台总线驱动的编写主要分为两个部分:一个是platform_device部分,主要是提供设备本身对驱动处理所要求的参数。另一个是platform_driver部分,主要是利用platform_device这边传递过来的参数提供对硬件的初始化,以及构建sys文件系统接口,方便应用程序操作驱动。 首先我们看platform_device部分要提供的数据封装和传递。p...

2018-07-21 18:13:17 2021

原创 copy_to_user和copy_form_user函数分析

学习驱动比较常用的两个函数,copy_to_user和copy_form_user。 因为传参都是传的地址,单因为内核空间不能直接访问用户空间的内存,所以内核空间要使用用户空间参数。必须进行地址转换。而这连个函数就是负责把对应用空间进程的内存和内核空间的内存地址转换。 首先我们先分析copy_to_usercopy_to_user函数的作用是把内核空间的参数拷贝拷贝到用户空间,...

2018-07-21 14:46:19 2986

原创 三星framebuffer驱动代码分析

 一、总述本驱动是基于三星的s5pv210处理器分析,对于三星平台所有的framebuffer驱动基本都是一样。对应于s5pv210中的内部外设Display Controller (FIMD)模块。framefuffer驱动是基于字符设备驱动,在使用platform总线封装编写。二、驱动源码的分布1、驱动代码的源文件分布:(1):drivers/video/samsung...

2018-07-20 00:47:56 1021

原创 arm的mmu学习

1.什么是mmuMMU是Memory Management Unit的缩写,中文名是内存管理单元,它是中央处理器(CPU)中用来管理虚拟存储器、物理存储器的控制线路,同时也负责虚拟地址映射为物理地址,以及提供硬件机制的内存访问授权,多用户多进程操作系统。物理地址:(英语:physical address),也叫实地址(real address)、二进制地址(binary address),...

2018-07-17 23:00:47 10810 1

原创 利用linux驱动思想实现s5pv210的I2C控制器操作

本文章主要参考自韦东山老师的新一期裸板视屏中I2C章节I2C控制器主要分为两个点,公共接口实现和平台接口实现先看一下公共接口实现#ifndef __I2C_CONTROLLER_H__#define __I2C_CONTROLLER_H__struct i2c_msg { const char *name; unsigned int addr; /* 7bit */ int flags...

2018-07-13 00:05:03 581

原创 利用linux驱动思想实现s5pv210的lcd控制器

本文章主要参考自韦东山老师的新一期裸板视屏中LCD显示章节最近在看驱动,发现部分。韦老师的裸机部分已经使用了驱动的操作分层和数据分离的思想,回来再刷一遍,顺便做好记录。1.LCD的扫描显示原理大家可以看下面这篇文章,讲的特别清晰,我就不重复。http://www.cnblogs.com/shangdawei/p/4760933.html2.S5PV210的LCD组成因为S5PV210的LCD支持很...

2018-07-08 18:02:16 829

原创 内核同步机制-信号量(semaphore)

   Linux的信号量是一种睡眠锁,这个不同于自旋锁.如果有一个任务试图获得一个已经被占用的信号量时,信号量会将其推进一个等待队列,然后让其睡眠,此时处理器能重获自由,而去执行其他代码.当持有信号量的进程将信号量释放后,处于等待队列中的那个进程会被唤醒,并获得该信号量.  信号量的睡眠特性,使得信号量适用于锁会被长时间持有的情况;只能在进程上下文中使用,因为中断上下文中是不能被调度的;另外当...

2018-07-01 23:16:28 865

原创 软链接和硬链接的区别

注:本文参考了https://www.ibm.com/developerworks/cn/linux/l-cn-hardandsymb-links/现代操作系统为解决信息能独立于进程之外被长期存储引入了文件,文件作为进程创建信息的逻辑单元可被多个进程并发使用。在 UNIX 系统中,操作系统为磁盘上的文本与图像、鼠标与键盘等输入设备及网络交互等 I/O 操作设计了一组通用 API,使他们被处理时...

2018-07-01 17:56:33 522

USB_HID的两篇官方文档

Device Class Definition for Human interface Devices和 HID Usage Tables两篇官方文章,保存起来,已被更换电脑后用

2019-01-10

read-copy-update

linux锁机制的经典文档,read - copy - update。来自linux社区。

2018-09-25

输入子系统编程模板

尴尬,我自己的某个博客要用。这个东西我不想设置分数的,结果不能为0分。

2018-07-29

51单片机移植的ucosii嵌入式操作系统

对ucosii中不必要的内容进行了裁剪。因为51单片机的idata很小,这份代码用了51单片内部的idata作为当前运行任务的任务栈,其它没被运行的任务的栈则被放置在内存较大的xdata区。但因为51单片机的汇编语句少,简单,可以作为其他处理器移植ucosii的模版和参考,同时也是学习51单片机递增以及高级应用的实例。

2018-07-22

基于51单片机移植的ucosii的代码

对ucosii中不必要的内容进行了裁剪。这份代码用了51单片内部的idata作为任务栈,因为51单片机的idata很小,所以这份代码可以运行的任务数量比较少。但因为51单片机的汇编语句少,简单,可以作为其他处理器移植ucosii的模版和参考。

2018-07-22

基于51单片机写的一个多任务切换的简易OS

里面代码是本人亲自手写的一个基于51单片机的多任务切换代码,核心代码只有不到200行,可以从代码层面方便单片机开发者了解任务切换的原理和使用,里面没有使用任何复杂的算法。

2018-07-22

linux0.11源代码

里面包含有linux0.11版本的原版代码和 赵炯博士对里面所有代码的注释。

2018-07-22

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除