Linux驱动
Linux驱动
Paper_Love
这个作者很懒,什么都没留下…
展开
-
Linux-lt8619c.c驱动分析
【代码】Linux-lt8619c.c驱动分析。原创 2024-01-24 22:08:37 · 382 阅读 · 0 评论 -
Linux-rgb接口lcd相关参数讲解
Linux-RGBlcd驱动硬件分析分辨率1920*1080像素格式RGB565RGB888ARGB8888LCD屏幕接口信号线 描述R[7:0] 8 根红色数据线。G[7:0] 8 根绿色数据线。B[7:0] 8 根蓝色数据线。DE 数据使能线。VSYNC 垂直同步信号线。HSYNC 水平同步信号线。PCLK 像素时钟信号线。LCD时间参数HSYNC 行同步信号HSPW/thp 行同步脉宽HOZVAL 显示一行数据所需的时间1024(1024*600分辨率)HBP/t原创 2022-03-04 17:26:07 · 666 阅读 · 0 评论 -
Linux-i2c-oled096屏幕驱动分析
Linux-oled096驱动常用寻址方式页寻址水平寻址垂直寻址页寻址方式代码分析void oled_set_pos(u8 x, u8 y){ oled_write_byte(OLED_CMD, 0xb0 + y); oled_write_byte(OLED_CMD, ((x & 0xf0) >> 4) | 0x10); oled_write_byte(OLED_CMD, x & 0x0f);}第一行代码oled_write原创 2022-02-26 08:35:26 · 819 阅读 · 0 评论 -
Linux GPIO
Linux GPIO中断修改设备树文件1.添加gpio节点2.添加引脚定义Linux GPIO复用修改设备树文件&iomuxc{};注意屏蔽掉不用的功能。原创 2022-04-06 16:38:13 · 658 阅读 · 0 评论 -
Linux USB驱动框架
Linux USB驱动框架USB控制器每个芯片内部都带有USB控制器,每个USB控制器可以支持128个地址,其中0是默认地址,只有在设备枚举的时候才会使用,地址0不会分配给任何一个设备。所以1个USB主控制器最多可以分配127个地址。HS FS LSHS:高速模式FS:全速模式LS:低速模式USB接口接口1:5V接口2:D- 差分信号接口3:D+ 差分信号接口4:GND接口1:5V接口2:D- 差分信号接口3:D+ 差分信号接口4:ID 用于实现OTG功能,通过ID线来判断当前原创 2022-03-12 11:57:45 · 950 阅读 · 0 评论 -
Linux设备驱动模型
设备驱动模型核心kobjectkobject是组成设备模型的基本结构,一个kobject对象就对应sys目录中的一个设备。类似于C++中的基类,它嵌入于更大的对象的对象中–所谓的容器–用来描述设备模型的组件。如bus,devices, drivers 都是典型的容器。这些容器就是通kobject连接起来了,形成了一个树状结构。这个树状结构就与/sys相对应。struct kobject { const char *name; struct list_head entry; struct kob原创 2022-03-08 08:02:23 · 328 阅读 · 0 评论 -
Linux 异步通知
Linux 异步通知阻塞和非阻塞方式都是采取应用程序主动读取数据的方式。最好的方式是驱动程序主动向应用程序发出通知,报告自己可以被访问,然后应用程序从驱动程序中读取或写入数据,类似于中断,这就需要使用异步通知这个机制来完成此功能。异步通知使用信号通知,来模拟硬件上使用的中断,只不过信号是软件层面上的。//信号处理函数sighandler_t signal(int signum, sighandler_t handler)//要设置处理函数的信号signum //信号的处理函数handler原创 2022-01-25 10:11:55 · 1010 阅读 · 0 评论 -
Linux 阻塞和非阻塞IO
Linux 阻塞和非阻塞IO阻塞IO当应用程序对设备驱动进行操作的时候,如果不能获取到设备资源,那么阻塞式IO就会将应用程序对应的线程挂起,直到设备资源可以获取为止。应用程序调用read函数从设备中读取数据,当设备不可用或数据未准备好的时候就会进入到休眠态。等设备可用的时候就会从休眠态唤醒,然后从设备中读取数据返回给应用程序。int fd; int data = 0; fd = open("/dev/xxx_dev", O_RDWR); /* 阻塞方式打开 */ret = read(fd,原创 2022-01-25 09:15:13 · 772 阅读 · 0 评论 -
Linux 音频驱动
Linux 音频驱动修改设备树文件配置Linux图形化文件移植alsa-lib和alsa-utils文件1.获取源文件2.解压文件3.配置文件4.编译文件5.安装文件6.移植文件原创 2022-01-24 17:07:31 · 3092 阅读 · 0 评论 -
Linux uart驱动框架
Linux uart驱动框架串口驱动框架包括两部分struct uart_driverint uart_register_driver(struct uart_driver *uart);void uart_unregister_driver(struct uart_driver *uart);struct uart_portint uart_add_one_port(struct uart_driver *reg, struct uart_port *port);int uart_原创 2021-10-18 17:29:12 · 462 阅读 · 0 评论 -
Linux文件系统
Linux设备文件系统存储介质硬盘 SD卡 U盘 MMC等文件系统ext4 fat ntfs jffs2 nfs等等虚拟文件系统(VFS)虚拟文件系统把不同的文件系统做一个抽象,提供统一的API访问接口,这样用户空间就可以不用关心不同的文件系统不一样的问题了。VFS所提供的这些统一的API,再经过System Call包装起来,用户空间就可以经过SCI的系统调用来操作不同的文件系统。设备文件系统devfs(已弃用)在/dev目录下管理所有的设备2.4 内核使用devfs(设备文件系统)在原创 2021-09-23 11:27:55 · 124 阅读 · 0 评论 -
Linux内核模块
Linux内核模块Linux 使用宏内核,但是宏内核有一个缺点就是扩展性比较差,为了弥补这一缺陷,Linux加入了内核模块,可以方便的加载和卸载内核模块,弥补扩展性差这个缺陷。加载卸载内核模块insmod *.ko 加载内核模块rmmod *.ko 卸载内核模块内核模块的入口和出口module_init(); 入口函数module_exit(); 出口函数内核模块的信息声明MODULE_LICENSE();MODULE_AUTHOR();......原创 2021-08-24 11:13:11 · 579 阅读 · 0 评论 -
Linux 变量和结构体
Linux 变量和结构体/* 设备号 主设备号 次设备号 */dev_t dev #define MAJOR(dev) ((unsigned int) ((dev) >> MINORBITS))#define MINOR(dev) ((unsigned int) ((dev) & MINORMASK))#define MKDEV(ma,mi) (((ma) << MINORBITS) | (mi))/* 字符设备抽象结构体 */struct cdev { s原创 2021-08-18 17:30:56 · 58 阅读 · 0 评论 -
pinctrl子系统和gpio子系统
pinctrl子系统gpio子系统API函数of函数int of_gpio_named_count(struct device_node *np, const char *propname) /* 获取设备树gpios属性中定义了几个gpio信息 */int of_gpio_count(struct device_node *np) /* 获取设备树任意属性中定义了几个gpio信息 */int of_get_named_gpio(struct device_node *np, const char原创 2021-08-12 15:36:57 · 174 阅读 · 0 评论 -
Linux-源码和文件系统目录介绍
Linux根文件组织架构bin : 二进制可执行命令boot : 引导文件 cdrom : dev : 设备特殊文件etc : 系统管理和配置文件 profile : 配置环境变量,对所有用户有效home : 用户主目录lib : 标准程序设计库 lib32 : 32位库 lib64 : 64位库media : 便携式移动设备挂载点mnt : 临时文件系统挂载点opt : 第三方应用程序安装位置proc : 虚拟的目录,是系统内存的映射root : 系统管理员的主目录run原创 2021-08-11 14:04:40 · 172 阅读 · 0 评论 -
LCD设备驱动框架
LCD设备驱动框架原创 2021-08-09 15:26:25 · 63 阅读 · 0 评论 -
Misc杂项设备驱动框架
Linux misc设备驱动框架由于设备号比较紧张,所以一些不相关的设备可以使用同一个主设备号,不同的次设备号。主设备号通常是10。杂项设备结构体struct miscdevice { int minor; const char *name; const struct file_operations *fops; struct list_head list; struct device *parent; struct device *this_device; const struct原创 2021-08-09 15:00:37 · 136 阅读 · 0 评论 -
Linux设备驱动模型
设备驱动模型的核心数据结构kobject结构体宏观上来说,设备驱动模型是一个设备和驱动组成的层次结构。在Linux系统中,kobject结构体是组成设备驱动模型的基本结构。kobject提供了最基本的设备对象管理能力,每一个在内核中注册的kobject对象都对应于sysfs文件系统中的一个目录。struct kobject { const char *name; struct list_head entry; struct kobject *parent; struct kset *ks原创 2021-08-09 10:12:04 · 100 阅读 · 0 评论 -
Linux内外存访问
Linux内外存访问内存分配malloc()和free()在C语言中,经常会遇到malloc()和free()这两个函数冤家。malloc()函数用来进行内存的分配。free()函数用来释放内存。kmalloc()和free()kmalloc()函数用于内核态的内存分配。kmalloc()函数在物理内存中为程序分配一个连续的存储空间。这个存储空间的数据不会被清零,也就是保存内存中原有的数据。void *kmalloc(size_t size, gfp_t flags)/* size参数 最原创 2021-08-09 09:29:10 · 96 阅读 · 0 评论 -
中断与时钟机制
初始化中断具体步骤:获取中断号编写中断服务函数设置中断code类型申请中断释放中断获取中断号设备树中获取中断号:unsigned int irq_of_parse_and_map(struct device_node *dev, int index)GPIO中获取中断号:int gpio_to_irq(unsigned int gpio)编写中断服务函数 inputkeydev.key_irq1[0].handler = key_irq_handler;设置中断code类型 inp原创 2021-07-27 14:48:46 · 1833 阅读 · 0 评论 -
Linux阻塞和同步机制
阻塞和非阻塞原创 2021-08-04 17:31:12 · 191 阅读 · 0 评论 -
Linux并发与竞争
并发是指在操作系统中,一个时间段中有几个程序都处于已启动运行到运行完毕之间,且这几个程序都是 在同一个处理机上运行,但任一时刻点上只有一个程序在处理机上运行。 并发容易导致竞争问题。竞争就是两个或者多个进程同时访问一个资源,从而引起资源的错误。为避免并发对系统资源的影响。可以采用原子变量操作,自旋锁,信号量和互斥信号量。原子变量:原子操作只能对整形变量或者位进行保护。原子变量操作所谓原子变量操作,就是该操作绝不会在执行完毕前被任何其他任务或事件打断。也就是说,原子变量操作是一种不可以被打断的操作。原创 2021-08-04 15:13:17 · 184 阅读 · 0 评论 -
字符设备驱动程序框架
一个字符设备或者块设备都有一个主设备号和次设备号。主设备和次设备号统称为设备号。主设备号用来表示一个特定的驱动程序,次设备号用来表示使用该驱动程序的各设备。以32位机为例,其中高12位表示主设备号,低20位表示次设备号。设备号typedef u_long dev_t;dev_t dev; /* 定义设备号 *//* 设备号 */ #define MKDEV(ma,mi) (((ma) << MINORBITS) | (mi))/* 主设备号 */ #define MAJOR(dev)原创 2021-08-04 07:41:27 · 213 阅读 · 0 评论 -
SPI设备驱动框架
```c#include <linux/module.h>#include <linux/kernel.h>#include <linux/init.h>#include <linux/fs.h>#include <linux/slab.h>#include <linux/uaccess.h>#include <linux/io.h>#include <linux/cdev.h>#includ.原创 2021-07-30 08:10:14 · 101 阅读 · 0 评论 -
IIC设备驱动框架
//定义ap3216c结构体struct ap3216c_dev { dev_t devid; /* 设备号 */ struct cdev cdev; /* cdev */ struct class *class; /* 类 */ struct device *device; /* 设备 */ struct device_node *nd; /* 设备节点 */ int major; /* 主设备号 */ void *private_data; /* 私有数据 */ unsigned sh原创 2021-07-30 08:08:23 · 156 阅读 · 0 评论 -
Input 输入设备驱动框架
输入事件类型目录:/include/uapi/linux/input.h文件目录:/drivers/input/input.cstruct input_dev结构体申请input设备 input_allocate_device()释放input设备 input_free_device()注册input设备 input_register_device()卸载input设备 input_unregister_device()3种设置事件和事件值得方法/* 第一种方法 */__set_bit(原创 2021-07-29 16:39:04 · 86 阅读 · 0 评论 -
Platform平台设备驱动框架
platform驱动框架://设备结构体struct device {};//驱动结构体struct device_driver {};//平台设备驱动框架struct platform_driver { int (*probe)(struct platform_device *); int (*remove)(struct platform_device *); void (*shutdown)(struct platform_device *); int (*suspend)(s原创 2021-07-29 16:17:05 · 643 阅读 · 0 评论 -
Linux gpio相关函数
of函数int of_gpio_named_count(struct device_node *np, const char *propname)int of_gpio_count(struct device_node *np)int of_get_named_gpio(struct device_node *np, const char *propname, int index)gpio操作函数 int gpio_request(unsigned gpio, const char *label原创 2021-07-27 14:40:17 · 236 阅读 · 0 评论