Linux驱动
文章平均质量分 68
分析介绍linux驱动
麻辣小新
嵌入式linux一线开发者一枚,《嵌入式Linux设备驱动程序开发指南》译者之一。
展开
-
linux基础之链表
前言list在linux内核中使用非常频繁。链表操作定义双向链表结构体struct list_head { struct list_head *prev; struct list_head *next;};初始化一个链表static void INIT_LIST_HEAD(struct list_head *list){ list->next = list; list->prev = list;}在前一个和后一个之间插入一个新的链表项static void __原创 2021-08-16 17:51:08 · 510 阅读 · 1 评论 -
devm设备资源管理分析
这里只是以clk为例来分析,读者朋友可以自己去看下其它的函数,它们的原理基本上是一样的,比如添加资源第一步调用devres_alloc()来分配队形,第二步是资源自己的相关操作,第三步调用devres_add()函数将资源添加到设备的资源链表上。释放资源时,遍历设备资源管理链表,然后调用资源注册的释放函数。...原创 2022-07-26 18:14:51 · 928 阅读 · 0 评论 -
devm简介
简单介绍了devm原理、devm的原由和devm的相关函数。原创 2022-07-26 18:02:55 · 2166 阅读 · 0 评论 -
i2c_check_functionality()函数说明
在i2c驱动的probe()函数一般会调用这个函数,它的作用是什么呢?而它又是怎么实现的呢?原创 2022-07-15 18:09:45 · 2980 阅读 · 0 评论 -
V4L2之mmap()函数
前言我们经常使用mmap函数,它到底是怎么实现的呢?今天就来说说。。。读者朋友是不是有这样的疑问:1.在调用mmap()后,它的返回值到底是什么?又是怎么来的呢?2.我们在驱动中实现static int xxx_drv_mmap(struct file *filp, struct vm_area_struct *vma)的参数为什么是这样的?它跟我们的mmap()函数参数完全不沾边啊。3.在linux底层驱动的实例中是怎么实现的?做了哪些事情呢?函数使用映射#include <sys/原创 2021-09-18 17:32:04 · 1903 阅读 · 0 评论 -
imx8mm启动图标更改
说明imx8mm的启动图标分为3个部分:ubootkernel文件系统uboot图标uboot 不需要更改,uboot启动的时候还没有lcd的驱动。驱动位置:MYIR-i.MX8MM-Uboot/drivers/video/imx/imx8_hdmi.c //系统启动默认的是这个。kernel更改启动图标pngtopnm logo.png > linuxlogo.pnmpnmquant 224 linuxlogo.pnm > linuxlogo224.pnmpnmt原创 2021-08-12 18:00:31 · 904 阅读 · 0 评论 -
linux字符设备驱动
MAJOR(dev_t dev) //从设备号中获取主设备号MINOR(dev_t dev) //从设备号中获取次设备号MKDEV(int major, int minor) //用主设备号和次设备号生成设备号旧版字符设备注册:实际上对申请设备号、申请设备内存、初始化cdev、系统注册步骤的集合。#include <linux/fs.h>register_chrdev(unsigned int major, const char *name,const struct.原创 2021-04-26 17:46:53 · 1303 阅读 · 0 评论 -
linux字符设备注册函数分析
疑问:1.字符设备驱动注册过程中到底发生了什么事情?register_chrdev_region 和 alloc_chrdev_region的区别int register_chrdev_region(dev_t from, unsigned count, const char *name) {... for (n = from; n < to; n = next) { next = MKDEV(MAJOR(n)+1, 0);原创 2021-05-26 17:57:53 · 346 阅读 · 0 评论 -
linux字符设备驱动之open()函数
疑问:用户的open()函数到驱动的open()函数的过程是怎么样的?为什么传递了struct inode *inode, struct file *filp两个参数?函数调用过程分析在我们的驱动程序中会这样写open()函数static int imxirq_open(struct inode *inode, struct file *filp){ filp->private_data = &imxirq; /* 设置私有数据 */ retu原创 2021-07-05 22:19:11 · 3675 阅读 · 0 评论 -
linux之I2C驱动分析
实际上有两部分驱动并且是分层的。I2C主机驱动。2C设备驱动。对于I2C主机驱动,一旦编写完成就不需要再做修改,其他的I2C设备直接调用主机驱动提供的API函数完成读写操作即可。这个正好符合Linux的驱动分离与分层的思想,因此Linux内核也将I2C驱动分为两部分:I2C总线驱动,I2C总线驱动就是SOC的I2C控制器驱动,也叫做I2C适配器驱动。I2C设备驱动,I2C设备驱动就是针对具体的I2C设备而编写的驱动。整体驱动构架理解:方式概述:实际上有两个步骤:client(bor原创 2021-04-28 17:57:54 · 1335 阅读 · 0 评论