![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
驱动开发
文章平均质量分 94
Feiffer_Hu
Android wifi framework工程师、单片机工程师、嵌入式初级驱动工程师、BSP_Sensor驱动工程师
展开
-
10.14、驱动开发 -- input子系统
input子系统简介1、 Input驱动程序是linux输入设备的驱动程序,分成游戏杆(joystick)、鼠标(mouse和mice)、事件设备(event)。其中事件驱动程序是目前通用的驱动程序,可支持键盘、鼠标、触摸屏等多种输入设备。2、 输入子系统驱动分成三层3、 input驱动程序的主设备号是13、次设备号的分布如下:a) joystick游戏杆:0~16b) mouse鼠标: 32~62c) mice鼠标: 63d) 事件设备: 64~954、 2.6内核中定义的支持的类型#原创 2020-06-13 17:30:59 · 381 阅读 · 0 评论 -
10.13、驱动开发 -- spi总线
SPI英语Serial Peripheral interface的缩写,顾名思义就是串行外围设备接口。是Motorola首先在其MC68HCXX系列处理器上定义的。SPI接口主要应用在 EEPROM,FLASH,实时时钟,AD转换器,还有数字信号处理器和数字信号解码器之间。SPI,是一种高速的,全双工,同步的通信总线,并且在芯片的管脚上只占用四根线,节约了芯片的管脚,同时为PCB的布局上节省空间,提供方便,正是出于这种简单易用的特性,现在越来越多的芯片集成了这种通信协议,比如AT91RM9200.SP原创 2020-06-13 17:13:46 · 647 阅读 · 0 评论 -
10.12、驱动开发 -- i2c总线
I2C协议2条双向串行线,一条数据线SDA,一条时钟线SCL。SDA传输数据是大端传输,每次传输8bit,即一字节。支持多主控(multimastering),任何时间点只能有一个主控。总线上每个设备都有自己的一个addr,共7个bit,广播地址全0.系统中可能有多个同种芯片,为此addr分为固定部分和可编程部份,细节视芯片而定,看datasheet。I2C位传输数据传输:SCL为高电平时,SDA线若保持稳定,那么SDA上是在传输数据bit;若SDA发生跳变,则用来表示一个会话的开始或结束(后面讲..原创 2020-06-13 17:02:22 · 405 阅读 · 0 评论 -
10.11、驱动开发 -- platform总线与字符设备
总线: 1:n 设备 驱动分离dts 代码如何识别一个属性,属于驱动还是属于设备中断 --设备驱动对象—驱动如果每个硬件都拥有 一个不同的属性,那么该属性属于 硬件/设备硬件专有的东西,放在 私有数据里面 dev_pri , 设备树如果 所有的硬件,都拥有相同的属性, 那么该属性 属于 驱动驱动拥有的东西, 放在全部变量即可.如果你想 将字符设备 融入 总线, 你需要 区分 字符设备中,那些属于驱动,那么属于设备1.设备号主设备号[] 驱动次设备号 设备2.字符设备对象 设备3.cl原创 2020-06-13 16:39:32 · 953 阅读 · 0 评论 -
10.10、驱动开发 -- platform总线
基本概念平台总线三要素:平台总线、平台设备、平台驱动平台总线原则:先分离,后合并分离:将设备信息封装成 platform_device,将驱动信息封装成 platform_driver,并为各自起名称,然后将 platform_device 中的 struct device 和 platform_driver 中的 struct device_driver 分别注册到设备链表和驱动链表中。int platform_device_register(struct platform_device *p原创 2020-06-13 16:33:06 · 454 阅读 · 1 评论 -
10.9、驱动开发 -- 内存
MMU内存管理单元memory manage unit内存 管理 单元内核/用户看到的都是虚拟地址, 物理RAM使用的是 物理地址.内核中空间分配:1、usrvoid *malloc(int size)当系统无法满足你的请求大小的时候, 进程会在 malloc内部睡眠.当资源满足的时候,进程被唤醒.2、kernelvoid *kmalloc(size_t size,gfp_t flags) flags: GFP_KERNEL: 告诉内核,当前环境可以睡眠, 如果你申请的空间...原创 2020-06-09 22:32:37 · 148 阅读 · 0 评论 -
10.8、驱动开发 -- 系统时钟
时间:绝对时间: 2020.6.9 23:59:59相对时间: 时间计量取决于 参考点 相对时间内核是如何计时:int jiffies; 一开机jiffies=0, 每隔一定的时间jiffies++;一秒钟,jiffies累加多少次呢??? 精确度(不高)x86 1000次/s 每次1ms 1msARM9 100次/s 10ms 10msARM-A53 200-500次/s不同的cpu 一秒钟jiffies累加的次数,是不确定的. 为了统一,内核 定义了 HZ这个宏.HZ 表示, 当...原创 2020-06-09 22:24:40 · 313 阅读 · 0 评论 -
10.7、驱动开发 -- 中断
软件和硬件交互方式:轮询: 软件主动反复的去读取硬件寄存器 效率很低,做很多无用功,浪费CPU资源中断: 硬件主动通知软件,发生了事件!!!硬件创建一个按键中断修改设备树文件:vim arch/arm/boot/dts/exynos4412-fs4412.dts1、添加 key2node{ compatible = "key 2"; interrupt-parent = <&gpx1>; //在gpx1 interrupts = <1 2&g.原创 2020-06-06 17:32:22 · 322 阅读 · 0 评论 -
10.6、驱动开发 -- IO模型、阻塞与非阻塞、同步与异步
IO模型: 一种通信的模型IO, input output 其实就是 ###通信####为了解决#通信#过程中,出现的问题.IO模型: 网络编程阻塞一个运行的进程 去访问资源,发现资源不满足,于是进程 ## 主动睡眠## 等待资源满足,被唤醒.当资源(一般伴随中断)到来的时候, (中断)去唤醒等待的进程.##睡眠###,不消耗定义并初始化一个##等待队列###运行的进程发现资源不满足, 主动将自己挂载到等待队列上去. 然后让内核重新调度.某个执行单元将数据送达, 然后唤醒等待.原创 2020-06-05 18:17:16 · 283 阅读 · 0 评论 -
10.5、驱动开发 -- 内核同步
内核的 同步/并发 /竞态/锁竞态: 多个执行单元,同时访问 同一个资源,会造成 竞争状态.生活中的例子:我们使用锁 来解决 同时访问的问题.在访问之前,加锁 锁可以保护 资源一个时刻,只被一个进程访问访问在访问完之后,解锁计算机中,多个执行单元1.SMP 对称多处理器 说白了,就是 一个cpu有多个核.2. 进程的抢占 一个进程会抢占另一个进程的执行. 单核处理一样出问题3. 中断/中断下半部分 抢占进程.内核中的锁:1、原子变量: i++有三条汇编指令构成,如果多个线程同时执行i+原创 2020-06-05 17:54:13 · 139 阅读 · 0 评论 -
10.4、驱动开发 -- 字符设备
一、基本概念linux系统,一切皆文件,字符设备就是实现一切皆文件,用户可以通过访问文件的方式,来访问硬件/内核。驱动:硬件 = 1:n 一个驱动程序,可以管理很多硬件给驱动程序 分配一个主设备号, 给该驱动管理的每个硬件 分配一个次设备号。同一类硬件,使用相同的驱动,所以 拥有相同的主设备号。设备号devno,请求取 主设备major, 次设备号minor:major = devno >> 20;minor = devno<<12>.原创 2020-06-05 17:46:16 · 286 阅读 · 0 评论 -
Linux 设备驱动开发 —— platform设备驱动应用实例解析
前面我们已经学习了platform设备的理论知识Linux 设备驱动开发 —— platform 设备驱动 ,下面将通过一个实例来深入我们的学习。 一、platform 驱动的工作过程 platform模型...转载 2020-05-25 09:46:36 · 457 阅读 · 0 评论 -
Linux 设备驱动开发 —— platform 设备驱动
一、platform总线、设备与驱动 在Linux 2.6 的设备驱动模型中,关心总线、设备和驱动3个实体,总线将设备和驱动绑定。在系统每注册一个设备的时候,会寻找与之匹配的驱动;相反的,在系统每注册一个驱动的时候,会寻找与之匹配的设备,而匹配由总线完成。 一个现实的Linux设...转载 2020-05-25 09:39:22 · 705 阅读 · 0 评论 -
Gsensor的驱动流程 -- 基于IIC
(一) XXXX — 内核加载驱动模块是调用:XXXX_init() 方法:a) 调用gsensor_fetch_sysconfig_para()解析sys_config1.fex文件,读取到IIC的地址等,并赋值给u_i2c_addr.normal_i2c;b) 调用总线的设备驱动加载函数–i2c_add_driver开始向IIC注册driver i2c_add_driver(&XXXX _driver);;c) 完成注册后将调用XXXX_probe()方法 — 针对设备做初始化:i.原创 2020-05-22 16:49:25 · 906 阅读 · 0 评论 -
Gsensor的驱动流程笔记 -- 基于platform
(一) 基本概念a) 平台总线三要素:平台总线、平台设备、平台驱动b) 平台总线原则:先分离,后合并c) 分离:将设备信息封装成 platform_device,将驱动信息封装成 platform_driver,并为各自起名称,然后将 platform_device 中的 struct device 和 platform_driver 中的 struct device_driver 分别注册到设备链表和驱动链表中。int platform_device_register(struct platfor原创 2020-05-22 16:34:42 · 402 阅读 · 0 评论 -
Linux 字符设备驱动--PWM的蜂鸣器
Linux 字符设备驱动学习一、基本概念linux系统,一切皆文件,字符设备就是实现一切皆文件,用户可以通过访问文件的方式,来访问硬件/内核。驱动:硬件 = 1:n 一个驱动程序,可以管理很多硬件给驱动程序 分配一个主设备号, 给该驱动管理的每个硬件 分配一个次设备号。同一类硬件,使用相同的驱动,所以 拥有相同的主设备号。设备号devno,请求取 主设备major, 次设备号minor:major = devno >> 20;minor = devno&l原创 2020-05-22 11:50:50 · 989 阅读 · 0 评论 -
10.3、驱动开发 -- 内核模块
内核模块如果将驱动程序 融入到内核源码中, 当驱动修改的时候,内核需要重新编译,重新烧写!!!内核模块机制: 允许 驱动程序和操作系统分离. 将驱动程序写入写入模块内部, 模块可以动态的加入内核,或者动态的离开内核. 动态: 操作系统运行的时候. 优点: 大部分功能都喜欢写入模块!!!内核只需要保留最基本的功能,需要某个功能的时候,将他的模块动态的加进来.不需要的删除.模块的编写modules.c文件/*************原创 2020-06-05 17:30:01 · 252 阅读 · 0 评论 -
10.2、驱动开发 -- 一切皆文件
一切皆文件:一切硬件都是文件原创 2020-06-05 17:18:37 · 259 阅读 · 0 评论 -
10.1、驱动开发 -- C语言面向对象设计
面向对象的思想对象:凡是占据一定空间的事物,世界是对象之间的交互而进行的.类:不占空间,是 对象的抽象概念对象: 属性[静态] + 动作/方法/函数[动态]面向对象特性封装: 包装,将对象的 属性和方法 打包在一起,形成一个 类class cat { char name[32]; int weight; ........... void maimeng(void); .......原创 2020-06-05 17:15:14 · 598 阅读 · 0 评论