Linux驱动
文章平均质量分 78
Odin_Hua
这个作者很懒,什么都没留下…
展开
-
Linux设备树简记
一. 设备树是一种描述硬件设备的方法,描述设备数的文件叫DTS(Device Tree Source),DTS采用树形的结构描述板级设备在设备树出现之前,板级硬件设备的相关信息都被编译进Linux内核中,导致内核代码臃肿且难以维护,所以引入了设备树,将内核与硬件设备代码解耦。.dtsi文件(板级公共文件,使用时类似头文件)描述的是如SOC级信息:SOC有几个CPU、主频是多少、各个外设的控制信息等;.dts文件描述的是板级信息:IIC设备、SPI设备等;一个完整设备树文件是由1个dts+n个d原创 2021-04-09 10:03:22 · 152 阅读 · 0 评论 -
Linux并发和竞争简记
一. 并发与竞争Linux系统并发(访问同一个共享资源)产生的原因多线程并发访问抢占式并发访问,调度程序可以在任意时刻抢占正在运行的线程中断服务程序的并发访问SMP(多核)核间并发访问Linux并发和竞争的几种解决方法:原子操作,自旋锁,信号量,互斥体二. 原子操作:不能再进一步分割的操作,一般用于变量或位操作Linux内核使用atomic_t 的结构体来完成整型数据的原子操作,该结构体定义在源码目录include/linux/types.h typedef st原创 2021-04-14 11:47:18 · 84 阅读 · 0 评论 -
GPIO字符设备驱动框架
一.字符设备和驱动字符设备是指使用字节流进行操作的设备。驱动是位于内核空间的,所以用户空间(应用程序)要想操作某个设备时,则需要通过系统调用(如c库函数)的方法,实现对驱动的调用,从而实现操作设备。Linux驱动有两种运行方式直接编译进Linux内核,随操作系统启动而自动运行将驱动编译成模块,动态地加载、卸载驱动模块二. 当动态地加载卸载驱动模块时,需要向Linux内核注册驱动模块加载卸载的操作函数module_init(xxx_init); //注册驱动模块加载函原创 2021-04-09 10:02:18 · 292 阅读 · 0 评论 -
Linux电源管理 — RPM
一. 简介RPM全称Runtime Power Management,即运行时电源管理。主要是用于设备运行时的电源管理,由kernel统一管理,当设备处于空闲状态时,挂起设备;而当设备需要被使用时,使设备恢复进入正常工作状态。二. 伪代码示例/*Test 驱动模块结构体*/struct TestDev_t{ dev_t dev_num; //设备号 struct cdev TestCdev; //使用Linux内核下cdev结构体,描述一个字符设备 struct class原创 2021-11-27 21:52:25 · 1261 阅读 · 0 评论 -
pinctrl和gpio子系统
一. 裸机驱动与Linux驱动裸机下GPIO驱动的编写,是用户通过直接操作寄存器来实现的;Linux内核提供了pinctrl和gpio子系统,用于GPIO驱动的开发。Linux驱动框架讲究驱动的分离和分层,pinctrl和gpio子系统就是该思想下的产物,驱动分离与分层其实就是按照面向对象编程的设计思想而设计的设备驱动框架。大多数SOC的pin都支持复用,如果采用用户直接操作寄存器来配置pin,繁琐且易出现问题(如pin复用),pinctrl子系统就是为了解决这些问题的;我们只需在设备树上原创 2021-04-09 10:03:56 · 176 阅读 · 0 评论 -
Linux阻塞和非阻塞IO
一. 阻塞和非阻塞简介IO指的是输入/输出的意思,即应用程序对驱动程序的输入/输出操作若应用程序不能获取到设备资源阻塞式IO会将应用程序对应的线程挂起,直到获取到设备资源非阻塞式IO则不会挂起对应线程,而是一直轮询等待,直到获取到设备资源或直接放弃阻塞IO示意图非阻塞IO示意图应用程序阻塞式和非阻塞式访问驱动程序/* 对于驱动设备,默认是以阻塞的方式打开的 */fd = open("/dev/xxx_dev", O_RDWR);/* 若想以非阻塞式方式打开,需原创 2021-05-22 17:19:59 · 304 阅读 · 0 评论 -
Linux字符设备驱动结构
一、内核模块字符设备驱动属于内核模块,而内核模块主要由模块加载函数、模块卸载函数和模块许可证声明组成。模块加载/卸载函数:当通过insmod/rmmod命令加载/卸载模块时,模块的加载/卸载函数会自动被内核执行。static int __init xxx_init(void);static int __exit xxx_exit(void); module_init(xxx_init); //指定模块加载函数xxx_initmodule_exit(xxx_exit);原创 2021-11-13 17:39:45 · 801 阅读 · 0 评论 -
platform设备驱动
111原创 2021-11-16 22:32:43 · 565 阅读 · 0 评论 -
Linux字符设备驱动—GPIO驱动
一. pinctrl和gpio子系统要想驱动一个设备,就必须先初始化设备,然后再进行相关操作对于Linux下的GPIO字符设备驱动,可以使用pinctrl子系统进行初始化初始化完成后,对GPIO的操作又可以使用GPIO子系统留出的API函数二. Linux设备树简记设备树是描述板级设备信息的文件要想驱动某个设备,就必须在设备树中添加设备节点的描述信息三. GPIO字符设备驱动框架当设备已经添加进设备树节点,就可以根据设备的具体情况以及驱动框架编写驱动了以上是我在学习过程中的总结原创 2021-04-09 10:04:57 · 295 阅读 · 0 评论 -
Linux中断简记——IMX6ULL示例
一. IMX6ULL裸机中断配置好中断相关外设及初始化GIC中断控制器。在IRQ异常服务函数中,使用GIC控制器、cp15协处理器,获取当前发生的中断相关信息。跳转到中断处理函数中,执行对应的中断服务函数。返回至IRQ异常服务函数,退出至程序被打断处继续执行。 二. Linux中断——Linux内核提供了完善的中断框架配置好设备节点的中断信息,Linux内核会根据这些信息初始化相关中断初始化相关设备,以及加载设备、创建设备节点文件从设备树中获取中断号,初始化上半部中断服务函原创 2021-04-24 15:15:51 · 513 阅读 · 0 评论