linux kernel:devres模块架构分析

这篇具有很好参考价值的文章主要介绍了linux kernel:devres模块架构分析。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

参考文档:

https://www.kernel.org/doc/html/latest/driver-api/driver-model/devres.html
https://www.cnblogs.com/sammei/p/3498052.html devres in linux driver

devres:  Managed Device Resource
device resource management

devres_alloc()动态申请内存分配一个devres结构体管理resource资源。
1,指定需要的resource资源的内存大小
(由于不同的device所需的资源多少不一样,所以,需要device告知devres所需的内存多少)
2,指定释放resource资源的release()函数
(由于不同的device所需的资源不一样,所以,需要device告知release()函数,用于释放分配的资源)
3,devres功能是:device告知resource和release(),devres在适当的时机回调release()释放resource

devres功能:

linux kernel:devres模块架构分析,Linux Kernel架构,linux

devres api和初始数据结构:

相关文件:
include/linux/device.h
drivers/base/devres.c

linux kernel:devres模块架构分析,Linux Kernel架构,linux

初始数据结构图:
linux kernel:devres模块架构分析,Linux Kernel架构,linux

struct device里面的devres_head 链表头,用于管理devres
linux kernel:devres模块架构分析,Linux Kernel架构,linux

devm_pinctrl_register()举例devres使用案例

相关文件:drivers/pinctrl/core.c
该文件中只使用了如下devres api:
devres_alloc()
devres_free()
devres_add()
devres_release()

linux kernel:devres模块架构分析,Linux Kernel架构,linux

在kernel代码中,搜索了devres_alloc()函数。
有的是使用一级指针方式:如 struct dma_devres *dr
linux kernel:devres模块架构分析,Linux Kernel架构,linux
大部分使用的都是二级指针方式:如 struct pinctrl_dev **ptr
linux kernel:devres模块架构分析,Linux Kernel架构,linux

devres_alloc(devm_pinctrl_dev_release, sizeof(*ptr), GFP_KERNEL);
指定的resource资源内存大小是一个指针大小
指定的release释放资源的回调函数是:devm_pinctrl_dev_release

devres_alloc() -> devres_alloc_node() -> alloc_dr()

申请 "sizeof(struct devres) + size" 大小的内存, size 是指resource的大小. 

devres_alloc(…) 执行后数据结构图变化:
linux kernel:devres模块架构分析,Linux Kernel架构,linux

pinctrl_register(…)和devres_add(…)执行后数据结构图变化:
linux kernel:devres模块架构分析,Linux Kernel架构,linux

附 devres api 说明:
如下截图参考来自于:
https://www.cnblogs.com/sammei/p/3498052.html devres in linux driver
linux kernel:devres模块架构分析,Linux Kernel架构,linux文章来源地址https://www.toymoban.com/news/detail-787817.html

到了这里,关于linux kernel:devres模块架构分析的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【Linux0.11代码分析】07 之 kernel execve() 函数 实现原理

    系列文章如下: 系列文章汇总:《【Linux0.11代码分析】之 系列文章链接汇总(全)》 https://blog.csdn.net/Ciellee/article/details/130510069 . 1.《【Linux0.11代码分析】01 之 代码目录分析》 2.《【Linux0.11代码分析】02 之 bootsect.s 启动流程》 3.《

    2024年02月03日
    浏览(48)
  • 基于VSCode的Linux内核调试环境搭建以及start_kernel跟踪分析

    参考ppt的步骤: 准备工作:1-5 ,配置vscode环境:6 ,跟踪分析:7。 目录 1.安装开发工具  2.下载内核源码  3.配置内核选项 4.编译和运行内核 5.制作内存根文件系统 *gdb调试(可跳过)  7.配置VSCode调试Linux内核  7.跟踪分析 下载出现了“Axel -n 20 :太多重定向”的问题,原因是

    2023年04月17日
    浏览(62)
  • 【Linux Kernel】Linux内核裁剪

    目录 1. 内核简介 1.1 内核版本及特点 1.2 获取内核源码 1.3 内核启动过程简述 1.3.1 内核引导阶段 1.3.2 内核初始化阶段 2. 内核源码结构及Makefile分析 2.1 Linux内核Makefile分析 2.1.1决定编译那些文件 2.1.2 怎样编译这些文件 2.1.3 怎样链接这些文件 3. Kconfig分析 3.1 Kconfig文件的基本要

    2024年02月04日
    浏览(48)
  • linux kernel时钟获取

      你的百米记录是多少?你的千米赛跑记录是多少?你的爱车到达百公里每小时的时间是多少?在前一天晚上你就设置好了电饭煲,让其在第二天早上你醒来前就煮好粥。你的上下班点又是多少?你们又是如何和你的异性定好约会时间的?可见在人类社会中时间的概念是相

    2024年02月07日
    浏览(35)
  • ubuntu linux kernel内核操作

    1.内核编译前的准备工作 2.下载内核 4. 编译新内核 5. 内核安装 6. 安装模块 7. 生成initrd.img文件 8. 切换到/boot/grub/目录下,自动查找新内核,并添加至grub引导 9. 重启Ubantu,在previous version中选择启动新编译的内核 VMware虚拟机Ubantu20.04,Linux5.8.1内核源代码包 1.内核编译前的准备

    2024年02月19日
    浏览(43)
  • CVE-2023-32233 Linux kernel

    近日,研究人员发现了Linux内核的NetFilter框架中的新漏洞(CVE-2023-32233)。该漏洞可被本地用户用于将权限提升为root,并完全控制系统。问题的根源在于 tfilter nf_tables 是如何处理批处理请求的,经过身份验证的本地攻击者可通过发送特制的请求破坏 Netfilter nf_tables 的内部状态

    2024年02月12日
    浏览(35)
  • rk3399移植linux kernel

    参考文章: 1.RK3399移植u-boot 2.I.MX6Q-SDB开发板移植ubuntu 3.Rockchip RK3399 - 移植ubuntu 20.04.4根文件系统 4.Rockchip RK3399 - 移植uboot 2023.04 linux 6.3   在前一节中移植了rk3399的u-boot,这一节就继续移植linux kernel。不过rk3399在移植kenel前,需要先制作根文件系统,这样才能在生成内核镜像

    2024年02月14日
    浏览(57)
  • 【Linux内核】从0开始入门Linux Kernel源码

    🌈 博客个人主页 :Chris在Coding 🎥 本文所属专栏 :[Linux内核] ❤️  前置学习专栏 :[Linux学习]从0到1 ⏰  我们仍在旅途                                                                                    ​ 目录         前言--Linux内核简述         内核的

    2024年02月20日
    浏览(44)
  • RISC-V Linux系统kernel制作

    Linux 官网地址:https://www.kernel.org 安装依赖 配置完成后相应的配置项会保存在 .config 文件中。下一次执行 make menuconfig 时可以 load 这份配置文件,在此基础上进行修改。 编译完成后,在arch/riscv/boot下生成Image,该文件用于 qemu -kernel 参数。

    2024年02月11日
    浏览(35)
  • 好消息,Linux Kernel 6.7正式发布!

    据有关资料显示,该版本是有史以来合并数最多的版本之一,包含 17k+ 个非合并 commit,实际合并的超过1K个。 那么该版本主要有哪边变化呢?下面我来一一列举一下: Bcachefs文件系统已被合并到主线内核,这是一款实验性的文件系统,它声称在Linux上提供了一种先进的新型文

    2024年01月18日
    浏览(33)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包