- 博客(41)
- 资源 (18)
- 收藏
- 关注
原创 USB驱动
1 概述 ######1.1 USB总线拓扑结构USB设备的连接如图19.1所示,对于每个PC来说,都有一个或者多个称为主机(Host)控制器的设备,该主机控制器和一个根集线器(Hub)作为一个整体。这个根Hub下可以接多级的Hub,每个子Hub又可以接子Hub,每个USB设备作为一个结点接在不同级别的Hub上1 USB主机控制器(Host Control)USB Hos...
2018-10-31 20:07:50 1300 1
原创 并发与竞态
并发(Concurrency)指的是多个执行单元同时、并行被执行,而并发的执行单元对共享资源(硬件资源和软件上的全局变量、静态变量等)的访问则很容易导致竞态(RaceConditions)。例如,对于globalmem设备,假设一个执行单元A对其写入3000个字符“a”,而另一个执行单元B对其写入4000个“b”,第三个执行单元C读取globalmem的所有字符。如果执行单元A、 B的写操作按...
2018-10-31 16:03:53 671
原创 记忆搜索
算法导论学习-动态规划之记忆化搜索一. 动态规划动态规划(dynamic programming),与“分治思想”有些相似,都是利用将问题分 为子问题,并通过合并子问题的解来获得整个问题的解。于“分治”的不同之处在 于,对于一个相同的子问题动态规划算法不会计算第二次,其实现原理是将每一个计算过的子问题的值保存在一个表中。二. 记忆化搜索我们常见的动态规划问题,比如流水线调度问题,矩...
2018-10-30 22:57:24 376
原创 分配内存
1 kmalloc()static __always_inline void *kmalloc(size_t size, gfp_t flags)falgs:kzalloc()同kmalloc一样,只是分配的内存预先被清零2 vmalloc()void *vmalloc(unsigned long size)可以分配到很大的的虚拟内存,但是不是连续的内存...
2018-10-27 19:55:19 327
原创 等待队列
在Linux驱动程序中,阻塞进程可以使用等待队列(Wait Queue)来实现。由于等待队列很有用,在Linux 2.0的时代,就已经引入了等待队列机制。等待队列的基本数据结构是一个双向链表,这个链表存储睡眠的进程。等待队列也与进程调度机制紧密结合,能够用于实现内核中异步事件通知机制。等待队列可以用来同步对系统资源的访问。例如,当完成一项工作之后,才允许完成另一项工作。在内核中,等待队列是有很...
2018-10-27 16:55:23 2726
原创 Linux的原子变量
原子变量的操作是一种不可以被打断的操作,原子操作需要硬件支持,因此是架构相关。类似于汇编的一条汇编指令,不可以被分割。两种原子变量:原子整型操作 原子位操作1 原子整型操作有时候需要共享的资源可能只是一个简单的整型数值。例如在驱动程序中,需要对包含一个count的计数器。这个计数器表示有多少个应用程序打开了设备所对应的设备文件。通常在设备驱动程序的open()函数中,将co...
2018-10-27 15:17:45 4319
原创 11.网络设备驱动
网络设备驱动概述与字符设备和块设备不同,网络设备并不对应于/dev目录下的文件,应用程序最终使用套接字完成与网络设备的接口。因而在网络设备身上并不能体现出“一切都是文件”的思想。网络设备驱动4个层次:网络协议接口层 网络设备接口层 提供实际功能的设备驱动功能层 网络设备与媒介层 1 Linux网络设备驱动的结构 ##########1)网络协议接口层向网络层协...
2018-10-25 19:04:32 590
原创 10.块设备驱动
1.正确理解块设备驱动的概念 ###############1.1、块设备和字符设备的差异 @@@@@@(1)块和字符是两种不同的访问设备的策略(2)同一个设备可以同时支持块和字符两种访问策略(3)设备本身的物理特性决定了哪一种访问策略更适合(4)块设备本身驱动层支持缓冲区,而字符设备驱动层没有缓冲(5)块设备驱动最适合存储设备1.2、块设备驱动的特点 @@@@@@@@...
2018-10-24 19:12:46 261
原创 Linux中的IDR机制
IDR机制在Linux内核中指的就是整数ID管理机制。从实质上来讲,这就是一种将一个整数ID号和一个指针关联在一起的机制。1 IDR机制原理 ------------IDR机制适用在那些需要把某个整数和特定指针关联在一起的地方。例如,在1IC总线中,每个设备都有自己的地址,要想在总线上找到特定的设备,就必须要先发送该设备的地址。当适配器要访问总线上的IIC设备时,首先要知道它们的ID号...
2018-10-24 13:37:15 2013
原创 Linux常用C函数
可以参考这个:http://net.pku.edu.cn/~yhf/linux_c//第三章 文件IO******************************************/#define STDIN_FILENO 0#define STDOUT_FILENO 1#define STDERR_FILENO 2函数: fpathconf或pathconf —— ...
2018-10-23 08:30:58 763 1
原创 如何在500w个单词中统计特定前缀的单词有多少个?
参考这个:https://mp.weixin.qq.com/s?__biz=MjM5NTY1MjY0MQ==&mid=2650743528&idx=3&sn=ae59dce7a06faaf6c335ba4abe7348b5&chksm=befeb7a689893eb0883892f8f82c1d2cf92e090c2ee10b99809164fb94cf7934...
2018-10-22 08:32:31 352
原创 9.2 Linux I2C核心、总线与设备驱动
I2C总线仅仅使用SCL、 SDA这两根信号线就实现了设备之间的数据交互,极大地简化了对硬件资源和PCB板布线空间的占用。因此, I2C总线非常广泛地应用在EEPROM、实时钟、小型LCD等设备与CPU的接口中I2C子系统详解###########################I2C总线汇总概览(1)三根通信线:SCL、SDA、GND(2)同步、串行、电平、低速、近距离(3)总线式...
2018-10-21 16:20:41 5236 1
原创 Linux中断,时钟和延时
1 概述 ###############由于中断服务程序的执行并不存在于进程上下文中,所以要求中断服务程序的时间要尽量短。因此, Linux在中断处理中引入了顶半部和底半部分离的机制。另外,内核对时钟的处理也采用中断方式,而内核软件定时器最终依赖于时钟中断。 根据中断的来源,中断可分为内部中断和外部中断内部中断的中断源来自CPU内部(软件中断指令、溢出、除法错误等,例如,操作系...
2018-10-21 08:59:59 2276 1
原创 9.触摸屏驱动移植实战
1.触摸屏驱动概览##########################1.1、常用的2种触摸屏(1)电阻触摸屏。驱动一般分2种:一种是SoC内置触摸屏控制器,一种是外置的专门触摸屏控制芯片,通过I2C接口和SoC通信。(2)电容触摸屏。驱动只有一种,外接专用的电容式触摸屏控制芯片,I2C接口和SoC通信。1.2、X210使用的触摸屏(1)X210V3使用的触摸屏:ft5x06(2)X...
2018-10-20 19:30:23 1837
原创 在驱动中利用中断
1.利用中断号产生中断通过执行中断函数来达到利用中断注册中断:request_irq(unsigned int irq, irq_handler_t handler, unsigned long flags, const char *name, void *dev);irq:中断号handler:中断函数flags:中断类型#define IRQF_TR...
2018-10-20 15:48:29 397
原创 驱动开发误用指针错误:Unable to handle kernel NULL pointer dereference at virtual address
今天弄驱动时,出现这个问题,检查了好久,才发现问题所在地方Unable to handle kernel NULL pointer dereference at virtual address 00000000原因:因为我用到了中断,在中断函数中断我调用了一全局指针P,这个指针在定义时为NULL。由于系统子注册玩中断后会马上检验中断函数,即使当前函数还没执行完。这就带来了一个问...
2018-10-20 15:47:28 5693
原创 8.input子系统基础之按键
1.什么是input子系统1.1、何为输入设备1.2、linux中输入设备的编程模型(1)命令行界面的输入类设备应用接口(2)GUI界面带来的麻烦、不同的输入类设备也会带来麻烦(3)struct input_event1.3、input子系统简介(1)linux的input子系统解决了什么问题(2)input子系统分4个部分:应用层 + input event + input c...
2018-10-17 21:03:33 963
原创 Linux完成量源码解析
一:概述:在驱动程序开发中,一种常见的情况是:一个线程需要等待另一个线程执行完某个操咋后,才能继续执行。前面讲的信号量其实也能够完成这种工作,但其效率比Linux中专门针对这种情况的完成量机制要差些。 Linux中提供了一种机制,实现一个线程发送一个信号通知另一个线程开始完成某个任务,这种机制就是完成量。完成量的目的是告诉一个线程某个事件已经发生,可以在此事件基础上做你想做的另...
2018-10-17 20:54:52 348
原创 图片的属性
首先我们先来理解下位深度与色深这两个概念。 1、位深度指的是存储每个像素所用的位数,主要用于存储 2、色深指的是每一个像素点用多少bit存储颜色,属于图片自身的一种属性Android Bitmap中的Config参数其实指的就是色深Bitmap.Config ARGB_4444:每个像素占四位,即A=4,R=4,G=4,B=4,那么一个像素点占4+4+4+4=16位 Bitmap...
2018-10-17 17:02:31 4010
原创 深入理解函数指针
指针型函数:函数类型 *函数名(形参定义表)int *fun(int x, int y)函数指针:函数类型 (*函数指针名)(形参表)int (*fun) (int x, int y)函数指针数组:函数类型 (*函数指针名[数组元素个数])(形参表)int (*fun [10]) (int x, int y)上面是定义了一个指针数组,数组元素为函数...
2018-10-16 18:13:26 3705
原创 7.framebuffer驱动详解
1.framebuffer介绍1.1、什么是framebuffer(1)裸机中如何操作LCD(2)OS下操作LCD的难点(3)framebuffer帧缓冲(简称fb)是linux内核中虚拟出的一个设备(4)framebuffer向应用层提供一个统一标准接口的显示设备(5)从驱动来看,fb是一个典型的字符设备,而且创建了一个类/sys/class/graphics1.2、frameb...
2018-10-14 19:09:38 2581
原创 Linux的自旋锁spin源码解析
1. 概述——————————————————————在Linux中提供了一些锁机制来避免竞争条件,最简单的一种就是自旋锁。引入锁的机制,是因为单独的原子操作不能满足复杂的内核设计需要。例如,当一个临界区域要在,多个函数之间来回运行时,原子操作就显得无能为力了。Linux中一般可以认为有两种锁,一种是自旋锁,另一种是信号量。这两种锁是为了解决内核中遇到的不同问题开发的。自旋锁的作...
2018-10-14 18:50:18 1253
原创 Linux(内核)信号量源码解析(非系统调用)
1.信号量概述------------------------------------------------Linux中提供了两种信号量,一种用于内核程序中,一种用于应用程序中。由于这里讲解的是内核编程的知识,所以只对内核中的信号量进行详细讲述。自旋锁和信号量的区别:自旋锁:会一直检测是否可以上锁,因此当有锁可用时,自旋锁的反应快速信号量:没有锁后会进行休眠,直到有锁后被...
2018-10-14 17:15:00 1035
原创 s3c的gpio控制接口
经常会遇到这四个,来进行gpio的操作gpio_request(S5PV210_GPD0(2), "GPD0"); //申请gpio,这里会对该gpio进行上锁s3c_gpio_setpull(S5PV210_GPD0(2), S3C_GPIO_PULL_UP); //设置为上升s3c_gpio_cfgpin(S5PV21...
2018-10-14 15:39:02 901
原创 Linux的位图
可以参考:https://www.cnblogs.com/zpcdbky/p/5825849.html 重要宏定义:#define DYNAMIC_MINORS 64 /* like dynamic majors */#define DECLARE_BITMAP(name,bits) \ unsigned long name[BITS_TO_LONGS(bits)]#de...
2018-10-14 10:50:45 763
原创 6.misc类设备与蜂鸣器驱动
1.板载蜂鸣器驱动测试1.1、驱动部分(1)移植内核已经提供了蜂鸣器驱动源码(2)make menuconfig(3)bug排查。修改Makefile中的宏名,最终可以在系统中看到 /dev/buzzer1.2、应用部分(1)应用编写:打开文件+ioctl(2)测试实践2.misc类设备介绍由于Linux驱动倾向于分层设计,所以各个具体的设备都可以找到它归属的类型,从而套...
2018-10-13 19:35:48 456
原创 x210-led.c 解析
#include <linux/module.h>#include <linux/init.h>#include <linux/kernel.h>#include <linux/sched.h>#include <linux/delay.h>#include <linux/platform_device...
2018-10-13 16:01:47 343
转载 DEVICE_ATTR的使用
转载:https://blog.csdn.net/njuitjf/article/details/16849333DEVICE_ATTR的使用使用DEVICE_ATTR,可以在sys fs中添加“文件”,通过修改该文件内容,可以实现在运行过程中动态控制device的目的。类似的还有DRIVER_ATTR,BUS_ATTR,CLASS_ATTR。这几个东东的区别就是,DEVICE_AT...
2018-10-13 15:39:13 155
原创 5.linux设备驱动模型
1.linux设备驱动模型简介1.1、什么是设备驱动模型(1)类class、总线bus、设备device、驱动driver(2)kobject和对象生命周期(3)sysfs(4)udev1.2、为什么需要设备驱动模型(1)早期内核(2.4之前)没有统一的设备驱动模型,但照样可以用(2)2.6版本中正式引入设备驱动模型,目的是在设备越来越多,功耗要求等新特性要求的情况下让驱动...
2018-10-10 10:19:43 20014 2
原创 数组指针和指针数组
指针数组:int *a[5];数组指针:int (*a)[5];指针数组的元素都是int *类型数组指针的类型都是int 类型数组指针的正确用法:int a[2][3]; //二维数组int (*p)[3]; //列元素为3个的数组指针p = a;问1:为啥数组指针要指定列大小问2:能否把 二维数组名 赋值 给二维指针int a[2][3];int *...
2018-10-08 16:23:18 377
原创 linux内核的gpiolib学习
mach-s5pv210\mach-smdkc110.c/* Maintainer: Kukjin Kim <kgene.kim@samsung.com> */.phys_io = S3C_PA_UART & 0xfff00000,.io_pg_offst = (((u32)S3C_VA_UART) >> 18) & 0xfffc,....
2018-10-08 08:45:56 683
原创 Linux内核中的常用宏container_of
Container_of在Linux内核中是一个常用的宏,用于从包含在某个结构中的指针获得结构本身的指针,通俗地讲就是通过结构体变量中某个成员的首地址进而获得整个结构体变量的首地址。 Container_of的定义如下: #define container_of(ptr, type, member) ({ \ const ty...
2018-10-07 19:01:13 244
原创 4.驱动框架入门之LED
1.何谓驱动框架1.1、驱动是谁写的(1)驱动开发工程师(2)内核维护者1.2、驱动编程协作要求(1)接口标准化(2)尽量降低驱动开发者难度1.3、到底什么是驱动框架(1)内核中驱动部分维护者针对每个种类的驱动设计一套成熟的、标准的、典型的驱动实现,然后把不同厂家的同类硬件驱动中相同的部分抽出来自己实现好,再把不同部分留出接口给具体的驱动开发工程师来实现,这就叫驱动框架...
2018-10-05 20:11:07 597
原创 关于【error: expected identifier before ‘(’ token】错误的检查
今天编译一个文件时老是出错,把源头定位到一个结构体中是这样typedef struct GPJ0{ volatile unsigned int GPJ0CON; volatile unsigned int GPJ0DAT;}gpio_reg_r;错误就是:error: expected identifier before '(' token最后在网上找了一下,发现是GPJ...
2018-10-05 18:49:40 27934 1
原创 3.字符设备驱动高级
参考:https://blog.csdn.net/zqixiao_09/article/details/50839042static struct cdev my_cdev; //设备属性结构体static dev_t dev_from; //设备号static struct class *test_class = NULL;test_class =...
2018-10-04 15:17:35 801
原创 GNU C 与 ANSI C 的一些差别
Linux 上可用的 C 编译器是 GNU C 编译器,它建立在自由软件基金会的编程许可证的基础上,因此可以自由发布。 GNU C 对标准 C 进行一系列扩展,以增强标准 C 的功能。1. 零长度和变量长度数组 一般不这样用GNU C 允许使用零长度数组,在定义变长对象的头结构时,这个特性非常有用。例如:struct var_data { int len; char data[0...
2018-10-03 09:53:29 6170
原创 linux下解压命令大全
.tar解包:tar xvf FileName.tar打包:tar cvf FileName.tar DirName(注:tar是打包,不是压缩!)———————————————.gz解压1:gunzip FileName.gz解压2:gzip -d FileName.gz压缩:gzip FileName.tar.gz 和 .tgz解压:tar zxvf FileName.t...
2018-10-02 10:47:22 177
原创 windows未指定字符数组大小的BUG
#include <stdio.h>intmain(void){ char a[] = "123456789"; char b[] = "123"; printf("&a = [%ld] , &b = [%ld]\n", a, b); strcpy(b, a); printf("&a = [%ld] , &b = [%ld
2018-10-02 09:23:26 242
原创 2.字符设备驱动基础
1.开启驱动开发之路1.1、驱动开发的准备工作(1)正常运行linux系统的开发板。要求开发板中的linux的zImage必须是自己编译的,不能是别人编译的。(2)内核源码树,其实就是一个经过了配置编译之后的内核源码。(3)nfs挂载的rootfs,主机ubuntu中必须搭建一个nfs服务器。1.2、驱动开发的步骤(1)驱动源码编写、Makefile编写、编译(2)insmo...
2018-10-01 20:44:26 912 1
原创 1.驱动应该怎么学
1.什么是驱动?驱动就是硬件和应用软件之间的纽带1.1、理解驱动的概念驱动字面意思:驱使硬件设备行动1. 无操作系统时的设备驱动 并不是任何一个计算机系统都一定要有操作系统,在许多情况下,操作系统都不必存在。对于功能比较单一、控制并不复杂的系统,譬如 ASIC 内部、公交车的刷卡机、电冰箱、微波炉、简单的手机和小灵通等,并不需要多任务调度、文件系统、内存管理等复...
2018-10-01 20:26:18 1009
光度立体技术字符识别和缺陷检测
2022-07-30
QT6+CloudCompare显示3D点云
2022-04-27
OCR_Demo3.zip
2021-09-04
QtPluginDemo.zip
2021-03-21
Qt6SerialPort.zip
2021-02-04
Qt实现二维码的编解码
2020-11-07
halcon19可用dll.zip
2020-08-03
qthalcon3d.zip
2020-07-04
draw_qwidget.zip
2019-12-14
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人