13 tszy208

尚未进行身份认证

暂无相关简介

等级
TA的排名 15w+

GIC驱动代码分析

一、前言GIC(Generic Interrupt Controller)是ARM公司提供的一个通用的中断控制器。GIC通过AMBA(Advanced Microcontroller Bus Architecture)这样的片上总线连接到一个或者多个ARM processor上。本文主要分析了linux kernel中GIC中断控制器的驱动代码。具体的分析方法是按照source code为索引...

2018-12-14 14:29:36

RFID技术总结

技术简介:    射频识别技术RFID(Radio Frequency Identification),又称为电子标签、无线射频识别,是一种非接触式的自动识别技术,通过无线电讯号识别特定目标并读写相关数据而无需识别系统与特定目标之间建立机械或光学接触。可用于识别高速运动物体并可同时识别多个标签,过程中无需人工干预,操作快捷方便。可工作于各种环境,实现对各类物体或设备(人员、物品)在不同状态

2017-11-14 18:23:41

三次握手四次挥手的原理

TCP是面向连接的,无论哪一方向另一方发送数据之前,都必须先在双方之间建立一条连接。在TCP/IP协议中,TCP 协议提供可靠的连接服务,连接是通过三次握手进行初始化的。三次握手的目的是同步连接双方的序列号和确认号 并交换 TCP窗口大小信息。1.第一次握手:建立连接。客户端发送连接请求报文段,将SYN位置为1,Sequence Number为x;然后,客户端进入SYN_SEND状态,等待

2017-09-26 11:04:55

VIM命令图

2017-09-16 11:01:16

GTK学习笔记之Linux下Gtk环境搭建

下面介绍下Ubuntu 环境下具体的安装过程: 1、配置安装gcc/g++/gdb/make 等基本编程工具(必须装好) 刚装好的Ubuntu系统中已经有GCC了,但是这个GCC几乎什么文件都不能编译,因为缺少一些必须的头文件,所以要安装build-essential这个软件包。 可以在新立得里面搜索build-essential或输入下面命令: sudo apt-get instal

2017-08-08 15:48:18

Linux platform

从 Linux 2.6 起引入了一套新的驱动管理和注册机制 :Platform_device 和 Platform_driver 。Linux 中大部分的设备驱动,都可以使用这套机制 ,  设备用 Platform_device 表示,驱动用 Platform_driver 进行注册。 Linux platform driver 机制和传统的 device driver

2017-07-14 10:57:31

Linux SPI

Linux的SPI子系统采用主机驱动和外设驱动分离的思想,首先主机SPI控制器是一种平台设备,因此它以platform的方式注册进内核,外设的信息是以boardinfo形式静态定义的,在创建spi_master时,会根据外设的bus_num和主机的bus_num是否相等,来选择是否将该外设挂接在该SPI主控制器下。先看SPI子系统中几个关键的数据结构:struct spi_master用来

2017-07-11 11:04:33

linux IIC

关于probe函数Linux中总线、设备、驱动这3者是非常重要的数据结构,它们互相之间都有联系一旦一个设备和一个驱动能够匹配上,就会执行驱动里的probe。总之一句话,probe函数作为driver的最基本的函数指针,一旦你的device和driver匹配(match,由总(bus)来完成,匹配工作发生在device_register()和drvier_register()的时候),probe函数

2017-07-07 09:25:57

linux 设备管理之 mem proc sysfs devfs udev

Jack:淫龙,Linux实现的设备管理机制是什么样子的呢?我:在2.4内核里,主流的解决方案是devfs。Jack:我知道。在2.6里,devfs已经被udev替代了。我:这种说法是不准确的,是一种外行看热闹的说法。Jack:怎么说?我:让我给你讲一讲proc文件系统的起源吧。听完了,你自然就明白了。Jack:proc文件系统?穿越了。我:在很久很久很久以前,Linux内核的所有代码都是写死的,

2017-07-07 09:25:54

设备I/O 端口和I/O 内存的访问

几乎每一种外设都是通过读写设备上的寄存器来进行的,通常包括控制寄存器、状态寄存器和数据寄存器三大类,外设的寄存器通常被连续地编址。根据CPU体系结构的不同,CPU对IO端口的编址方式有两种:  (1)I/O映射方式(I/O-mapped)  典型地,如X86处理器为外设专门实现了一个单独的地址空间,称为"I/O地址空间"或者"I/O端口空间",CPU通过专门的I/O指令(如X86的IN和OUT指令

2017-07-07 09:25:51

内存和IO访问

一、1 .内存空间和IO空间 x86 CPU下存在IO空间 的概念,等于IO端口(外设寄存器)和IO内存(外设内存)。IO空间可寻址16位达到64K2.统一编址和独立地址CPU访问各种外设有2种方式:一种是类似于访问内存的方式,即把外设的寄存器当作一个内存地址来读写,从而以访问内存相同的方式来操作外设寄存器,这时,IO与内存统一编址,IO的地址与内存的地址在同一个地址空间下,这种编址方式叫做IO与

2017-07-07 09:25:48

ARM MMU工作原理剖析

一、MMU的产生      许多年以前,当人们还在使用DOS或是更古老的操作系统的时候,计算机的内存还非常小,一般都是以K为单位进行计算,相应的,当时的程序规模也不大,所以内存容量虽然小,但还是可以容纳当时的程序。但随着图形界面的兴起还用用户需求的不断增大,应用程序的规模也随之膨胀起来,终于一个难题出现在程序员的面前,那就是应用程序太大以至于内存容纳不下该程序,通常解决的办法是把程序分割成许多称为

2017-07-07 09:25:45

什么叫总线 地址总线、数据总线、控制总线

总线:我们知道,一个电路总是由元器件通过电线连接而成的,在模拟电路中,连线并不成为一个问题,因为各器件间一般是串行关系,各器件之间的连线并不很多,但计算机电路却不一样,它是以微处理器为核心,各器件都要与微处理器相连,各器件之间的工作必须相互协调,所以就需要的连线就很多了,如果仍如同模拟电路一样,在各微处理器和各器件间单独连线,则线的数量将多得惊人,所以在微处理机中引入了总线的概念,各个器件共同享用

2017-07-07 09:25:42

linux内核模块

首先,一个内核模块,就是一个ELF文件。内核本身也是一个ELF文件。一个模块,可能是一个协议,一个文件系统,一个驱动,一种具体的应用,等等任何东西。也可能是多种东西的组合。内核在运行时,通过动态加载/卸载内核模块,可以动态扩展/删减内核的功能。每个模块在编译时(假设模块名为xxx),会自动生成一个xxx.mod.c的文件,该文件会链接到xxx模块中去。Linux使用下方把模块内部的变量或函数声明为

2017-07-07 09:25:39

信号

1       信号本质软中断信号(signal,又简称为信号)用来通知进程发生了异步事件。在软件层次上是对中断机制的一种模拟,在原理上,一个进程收到一个信号与处理器收到一个中断请求可以说是一样的。信号是进程间通信机制中唯一的异步通信机制,一个进程不必通过任何操作来等待信号的到达,事实上,进程也不知道信号到底什么时候到达。进程之间可以互相通过系统调用kill发送软中断信号。内核也可以因为内部事件而

2017-07-07 09:25:36

linux输入子系统

Linux 系统提供了input 子系统,按键、触摸屏、键盘、鼠标、摇杆等输入都可以利用input 接口函数来实现设备驱动。input子系统仍然是字符设备驱动程序,但是代码量减少很多,input子系统只需要完成两个工作:初始化和事件报告struct input_dev *xx_dev;xx_init(){   xx_dev = input_allocate_device();      input

2017-07-07 09:25:33

异步和同步

异步通知,就是信号,信号类似于在软件层次上对中断机制的一种模拟。原来上,系统收到一个信号和一个中断是一样的。同步和异步的区别是是否步调一致,同步等返回结果,异步不等返回结果。阻塞和非阻塞是指等结果返回前的两种处理方式,阻塞会挂起睡眠,非阻塞不睡眠直接返回结果。1、概念剖析相信很多从事linux后台开发工作的都接触过同步&异步、阻塞&非阻塞这样的概念,也相信都曾经产生过误解,比如认为同步就是阻塞、异

2017-07-07 09:25:30

Linux软中断机制

中断服务程序往往都是在CPU关中断的条件下执行的,以避免中断嵌套而使控制复杂化。但是CPU关中断的时间不能太长,否则容易丢失中断信号。为此, Linux将中断服务程序一分为二,各称作“Top Half”和“Bottom Half”。前者通常对时间要求较为严格,必须在中断请求发生后立即或至少在一定的时间限制内完成。因此为了保证这种处理能原子地完成,Top Half通常是在CPU关中断的条件下执行的。

2017-07-07 09:25:27

x86和arm在原子操作上的差别

x86和arm在原子操作上有些差别,下面一代码的形式来说明区别:首先比较单核:          由于x86是CISC指令集,允许在一条指令里进行两次内存操作,所以对i++,i__这些操作在单核条件下是原子,当然必须得是显示使用addl r,%1这种,就可在一条指令里完成读,写操作。       而arm属于RISC指令集,在一次指令执行期间只能有一次内存操作,所以像i++,i--这些需要先读取内

2017-07-07 09:25:22

Linux阻塞和非阻塞

阻塞(休眠)调用是没有获得资源则挂起进程,被挂起的进程进入休眠状态,调用的函数只有在得到结果之后才返回,进程继续。非阻塞(休眠)是不能进行设备操作时不挂起,或返回,或反复查询,直到可以进行操作为止,被调用的函数不会阻塞当前进程,而会立刻返回。因为阻塞的进程会进入休眠状态,因此,必须确保有一个地方能够唤醒休眠的进程。唤醒进程的地方最大可能发生在中断里面,因为硬件资源获得的同时往往伴随着一个中断。使用

2017-07-07 09:25:19

查看更多

勋章 我的勋章
  • 阅读者勋章Lv1
    阅读者勋章Lv1
    授予在CSDN APP累计阅读博文达到3天的你,是你的坚持与努力,使你超越了昨天的自己。