Linux驱动开发笔记
文章平均质量分 78
用于记录Linux驱动开发中的学习笔记。
陈子陌
一个简单的Linux驱动工程师。
展开
-
Linux驱动开发之杂项(MISC)驱动
一、前言misc的意思是混合、杂项的,因此misc驱动也叫杂项驱动。当我们板子上的某些外设在无法进行分类的时候就可以使用该项驱动。二、MISC驱动简介所有的杂项驱动都共用一个主设备号(10),不同的子杂项驱动使用不同的子设备号。与字符驱动不同的地方在于,misc设备驱动会自动地去创建cdev,因此,在我们需要去创建一个字符设备的时候,其实完全可以用misc设备驱动去替代它。misc设备驱动,实际上就是向Linux内核,也就是利用misc驱动core提供的接口去注册一个miscdevice原创 2021-12-03 14:44:06 · 1588 阅读 · 0 评论 -
Linux驱动开发之LCD显示驱动调试
一、引言在实际项目中,LCD显示驱动调试是一件十分平常却又十分重要的事情,但因为每个项目的LCD屏都不同,所以每换一个项目都需要重新调试。而对于带LCD屏的项目,又分为两种类型,一种是一体机,一种是分体机。一体机:视频信号直接由信号线从cpu连接到屏端的TCON显示芯片。分体机:视频信号先由cpu到主板的串行器,再由串行器加串,途经LVDS差分信号新到达屏端的解串器,屏端解串器解串LVDS信号,最终将其输入到屏端TCON显示芯片上去。不过,不管是一体机还是分体机,都需要设置屏参。二、原创 2021-08-26 11:16:51 · 2570 阅读 · 0 评论 -
Linux驱动开发之RGB565转RGB888
一、前言在前面介绍FrameBuffer子系统曾说过一帧的概念:“我们将铺满一个lcd屏幕的数据称为一帧”。那么,在每一帧数据中又由许多个像素点构成。这些像素点就是本文的正题——RGB数据。所谓RGB数据,就是按照RED、GREEN、BLUE这样顺序排列的图像数据。而RGB565和RGB888这些英文字母后面的数字则是代表每种颜色的数据占据多少位了,所以RGB565在内存中占据16位,而RGB888在内存中占据24位。在实际项目中,一些平台因为不支持RGB888,只支持RGB565,原创 2021-06-22 11:34:26 · 1043 阅读 · 0 评论 -
Linux驱动开发之FrameBuffer子系统学习
一、引言之前在调显示驱动的时候,主要是根据平台设计好的套路来——也就是调屏参,但从来没有想过更底层的原理。随着工作的深入,也开始慢慢接触所谓的显示驱动——FrameBuffer子系统,简称fb驱动。接下来,就跟着我来了解一下Linux的显示驱动到底是怎样一个原理。二、FrameBuffer子系统1、FrameBuffer的字面意思FrameBuffer。从字面意思我们知道,也就是帧缓存。缓存我们清楚,那就是一段内存,用以存储某些东西。那么,什么是帧呢?我们将铺满一个lcd屏幕的数原创 2021-05-07 18:11:06 · 548 阅读 · 0 评论 -
Linux驱动开发之DEVICE_ATTR调试技术
一、功能介绍1、简介在sysfs中添加device属性文件,可以动态控制device或者获取device信息。2、相关函数、宏原型及功能2.1、DEVICE_ATTRDEVICE_ATTR宏定义在kernel/include/linux/device.h文件中。原型如下:#defineDEVICE_ATTR(_name,_mode,_show,_store)\structdevice_attributedev_attr_##_name=__ATTR(_...原创 2021-01-30 10:34:55 · 2144 阅读 · 2 评论 -
SDIO_WiFi驱动学习之SDIO架构介绍及源码分析
一、引言因为WiFi驱动比较复杂,所以WiFi驱动的博客将分为两篇来写。本篇博客主要介绍Linux下的SDIO架构及源码分析。二、SDIO WiFiSDIO-Wifi模块是基于SDIO接口的符合wifi无线网络标准的嵌入式模块,内置无线网络协议IEEE802.11协议栈以及TCP/IP协议栈,能够实现用户主平台数据通过SDIO口到无线网络之间的转换。SDIO具有传输数据快,兼容SD、MMC接口等特点。对于SDIO接口的WiFi,首先,它是一个SDIO的卡设备,然后具备了WiFi的功能。所原创 2020-11-24 15:49:22 · 6942 阅读 · 0 评论 -
Linux驱动开发之工作队列
一、什么是工作队列 工作队列(work queue)是Linux kernel中将工作推后执行的一种机制。这种机制和BH或Tasklets不同之处在于工作队列是把推后的工作交由一个内核线程去执行,因此工作队列的优势就在于它允许重新调度甚至睡眠。二、源码分析struct xx_test{ int irq; unsigned char gpio; struct work_struct work; struct workqueue_struct *changan_mf...原创 2020-11-02 15:20:07 · 1260 阅读 · 0 评论 -
Linux驱动框架之i2c驱动框架解析
一、引言 本文会通过简要的文字描述和源码分析,为大家分析梳理出Linux下的I2C驱动架构。 不喜欢看文字描述的,可以直接跳过去看源码分析(文本所有代码都是经过删减的,所以不要纠结和源代码有出入的地方)。二、I2C总线 I2C总线是由Philips公司开发的一种简单、双向二线制同步串行总线。 它只需要两根线(时钟线和双向数据线)即可在连接于总线上的器件之间传送信息。三、Linux下的I2C驱动开发思路 目前,在Linux下开...原创 2020-10-26 10:53:42 · 2581 阅读 · 1 评论 -
Linux驱动框架之v4l2视频驱动框架解析
一、简介 v4l2是专门为linux设备设计的一套视频框架,其主体框架在linux内核,可以理解为是整个 linux 系统上面的视频源捕获驱动框架。其广泛应用在嵌入式设备以及移动端、个人电脑设备上面,市面上的编码产品类如:SDV、手机、IPC、行车记录仪都会用到这个框架来进行视频采集。二、V4l2框架的结构 v4l2的核心源码位于linux/drivers/media/v4l2-core。2.1、相关对象 v4l2驱动框架主要的对象有vi...原创 2020-10-19 14:36:38 · 5133 阅读 · 0 评论 -
Linux内核驱动内存分配之kmalloc函数分析
一、kmalloc函数的原型及参数介绍 #include <linux/slab.h> void *kmalloc(size_t size, int flags); 参数: kmalloc的第一个参数是要分配的块的大小,第二个参数是分配标志。 size参数: 用户空间malloc是基于堆内存分配,内核负责管理系统物理内存,物理内存只能按页面进行分配, 因此,kmalloc是基于页进行分配。另外需要注意的一点是内核只能分配一些预定义的、固定大原创 2020-10-15 14:18:28 · 1241 阅读 · 0 评论