首页
学习
活动
专区
圈层
工具
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

rmmod的时候需要devm_iounmap吗,哪个模块使用devm* api?

在Linux内核中,rmmod命令用于卸载一个已加载的内核模块。当使用rmmod命令卸载一个模块时,如果该模块使用了devm_ioremap()或devm_ioremap_resource()函数进行内存映射,那么在卸载模块之前需要调用devm_iounmap()函数解除内存映射。

devm_iounmap()函数用于解除使用devm_ioremap()或devm_ioremap_resource()函数进行的内存映射。它接受两个参数,第一个参数是设备的指针,第二个参数是要解除映射的内存区域。

devm* api是Linux内核提供的一组用于管理设备资源的函数。这些函数会自动处理设备资源的分配和释放,避免了手动管理资源的繁琐和容易出错的问题。devm* api通常用于设备驱动程序中,以确保设备资源的正确分配和释放。

在Linux内核中,使用devm_* api的模块包括但不限于以下几个方面:

  1. 设备驱动程序:设备驱动程序通常需要管理设备的各种资源,如内存、中断、寄存器等。使用devm_* api可以简化资源的管理过程。
  2. 性能优化:使用devm_* api可以减少内存泄漏和资源泄漏的可能性,提高系统的性能。
  3. 代码简化:使用devm_* api可以减少代码量,提高代码的可读性和可维护性。

需要注意的是,devm* api是Linux内核提供的特定函数,不同的模块可能使用不同的devm api。因此,在具体使用时需要查阅相关文档或代码来确定哪个模块使用了devm_ api。

关于腾讯云相关产品和产品介绍链接地址,由于要求不能提及具体的云计算品牌商,无法给出具体的推荐链接。但腾讯云作为一家知名的云计算服务提供商,提供了丰富的云计算产品和解决方案,可以通过腾讯云官方网站进行了解和查询相关产品信息。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

devm_xxx机制

前言 devm是内核提供的基础机制,用于方便驱动开发者所分配资源的自动回收。参考内核文档devres.txt。总的来说,就是驱动开发者只需要调用这类接口分配期望的资源,不用关心释放问题。...devres使用 不同的内核模块提供了对应的devm_xxx接口,如下(不仅仅这些): MEM devm_kmalloc() devm_kzalloc() devm_kcalloc(...devres group主要用于处理初始化的时候,有多种资源类型需要初始化,每种资源类型的初始化又由多个devres_xxx资源申请组成的情况,将这些devres_xxx按类别组合成group,这样在需要显示释放某一类的资源时...,调用devres group的api即可实现。...在分配内存的时候,会分配比我们要求大的空间,空间的前面部分用于存放实现devres机制的数据结构,然后返回的是用户期望的空间的指针(该指针是实际分配的空间指针的devres结构的偏移)。

1.7K20

Linux GPIO 开发指南

(图中最上面一层 device driver 表示 Pinctrl 驱动的使用者) ​ 图 2-1: pinctrl 驱动整体框架图 Pinctrl api: pinctrl 提供给上层用户调用的接口...gpio属性配置需要的参数个数,对于linux-5.4为3 /* * 以下配置为模块使用的pin的配置,模块通过引用相应的节点对pin进行操作 * 由于不同板级的pin经常改变...default,即模块正常工作模式下对应的 pin 配置 • pinctrl-1 对应 pinctrl-names 中的 sleep,即模块休眠模式下对应的 pin 配置 5.2 接口使用示例 5.2.1...配置设备引脚 一般设备驱动只需要使用一个接口 devm_pinctrl_get_select_default 就可以申请到设备所有pin 资源。...使用 irq-domain 为 gpio 中断实现虚拟 irq 的功能,使用 gpio 中断功能时,设备驱动只需要通过 gpio_to_irq 获取虚拟中断号后,其他均可以按标准 irq 接口操作。

8.4K60
  • Linux Regulator Framework(1)_概述

    需要考虑这种情况,尽量简化接口。...这主要用于描述regulator在板级的级联关系,需要留意的是,它和clock不同,这种级联关系是非常确定的,以至于需要使用静态的方式描述,而不是像clock那样,在注册的时候动态指定并形成。...接口汇整 本节对regulator framework向各个层次提供的API做一个汇整,具体细节会在后续的文章中详细描述。...1)struct regulator struct regulator结构用于从consumer的角度抽象一个regulator,consumer不需要关心该结构的细节,当作一个句柄使用即可(类似struct...4.2 consumer模块向用户空间consumer提供的接口 用户空间程序可以通过sysfs接口,使用regulator,就像内核空间consumer一样。

    72520

    已解决【nvidia-smi】Failed to initialize NVML: Driverlibrary version mismatch解决方法

    方法二:不用重启 采用指令退出当前内核使用的显卡模块,然后重新加载升级后版本的显卡驱动作为内核模块。...sudo rmmod nvidia sudo nvidia-smi #nvidia-smi发现没有kernel mod的时候,会自动装载 但是这种方法可能会遇到一定的问题: $ sudo rmmod...nvidia rmmod: ERROR: Module nvidia is in use by: nvidia_modeset nvidia_uvm 说明我们正在使用,所以需要手动退出两个nvidia...然后再重新执行如下的指令: sudo rmmod nvidia sudo nvidia-smi #nvidia-smi发现没有kernel mod的时候,会自动装载 如果还是不可以,使用命令强制终止相关服务...sudo rmmod nvidia sudo nvidia-smi #nvidia-smi发现没有kernel mod的时候,会自动装载

    15.3K21

    2——Pinctrl子系统重要概念

    Pinctrl子系统重要概念 引入 无论是哪种芯片,都有类似下图的结构: 要想让pinA、B用于GPIO,需要设置IOMUX让它们连接到GPIO模块; 要想让pinA、B用于I2C,需要设置IOMUX...所以GPIO、I2C应该是并列的关系,它们能够使用之前,需要设置IOMUX。有时候并不仅仅是设置IOMUX,还要配置引脚,比如上拉、下拉、开漏等等。...开玩笑的,BSP工程师是更懂他自家的芯片,但是如果驱动工程师看不懂他们的代码,那你的进步也有限啊。 所以,要把引脚的复用、配置抽出来,做成Pinctrl子系统,给GPIO、I2C等模块使用。...等等,GPIO模块在图中跟I2C不是并列的吗?干嘛在讲Pinctrl时还把GPIO子系统拉进来? 大多数的芯片,没有单独的IOMUX模块,引脚的复用、配置等等,就是在GPIO模块内部实现的。...非要自己调用,也有函数: devm_pinctrl_get_select_default(struct device *dev); // 使用"default"状态的引脚 pinctrl_get_select

    80530

    05_GPIO子系统层次与数据结构

    视频观看 百问网驱动大全 GPIO子系统层次与数据结构 参考资料: Linux 5.x内核文档 Linux-5.4\Documentation\driver-api Linux-5.4\Documentation...devm_gpiod_put_array 1.3 GPIOLIB向下提供的接口 2....需要提供函数,设置引脚方向、读取/设置数值 需要提供函数,把引脚转换为中断 以Linux面向对象编程的思想,一个GPIO Controller必定会使用一个结构体来表示,这个结构体必定含有这些信息: GPIO...引脚的函数(引脚控制、中断相关),都放在gpio_chip里 2.2 gpio_chip 我们并不需要自己穿件gpio_device,编写驱动时要创建的是gpio_chip,里面提供了: 控制引脚的函数...各个引脚的名字? 2.3 gpio_desc 我们去使用GPIO子系统时,首先是获得某个引脚对应的gpio_desc。

    83630

    手把手教你使用 gpio 子系统 API

    本文讲解 pinctrl 子系统和 gpio 子系统的 API,以及使用示例。 传统的配置 pin 的方式就是直接操作相应的寄存器,但是这种配置方式比较繁琐、而且容易出问题(比如 pin 功能冲突)。...对于我们使用者来讲,只需要在设备树里面设置好某个 pin 的相关属性即可,其他的初始化工作均由 pinctrl 子系统来完成。...(pinctrl 的 api 其实可以实现所有需求,但 gpio 的函数更常用一些) 1、gpio 子系统 API gpio 子系统中操作一个 GPIO 需要如下几步: 1、of_find_compatible_node...2、pinctrl 子系统 API pinctrl 子系统的 API 有很多,对于驱动工程师来说,pinctrl 操作一个 GPIO 只需要三步: 1、devm_pinctrl_get 2、pinctrl_lookup_state...有时候使用的一些芯片在 Documentation/devicetree/bindings 目录下找不到对应的文档,这个时候就要咨询芯片的提供商,让他们给你提供参考的设备树文件。

    2K10

    【深度】韦东山:GPIO和Pinctrl子系统的使用

    要想让pinA、B用于GPIO,需要设置IOMUX让它们连接到GPIO模块; 要想让pinA、B用于I2C,需要设置IOMUX让它们连接到I2C模块。...所以GPIO、I2C应该是并列的关系,它们能够使用之前,需要设置IOMUX。有时候并不仅仅是设置IOMUX,还要配置引脚,比如上拉、下拉、开漏等等。...等BSP工程师在GPIO子系统、Pinctrl子系统中把自家芯片的支持加进去后,我们就可以非常方便地使用这些引脚了:点灯简直太简单了。 等等,GPIO模块在图中跟I2C不是并列的吗?...如果使用devm的相关函数,在内存申请失败时可以直接返回:设备的销毁函数会自动地释放已经申请了的GPIO资源。 建议使用“devm_”版本的相关函数。...基于GPIO子系统的LED驱动程序 3.1 编写思路 GPIO的地位跟其他模块,比如I2C、UART的地方是一样的,要使用某个引脚,需要先把引脚配置为GPIO功能,这要使用Pinctrl子系统,只需要在设备树里指定就可以

    11.4K74

    Linux common clock framework(1)_概述

    因此,蜗蜗会将clock framework的分析文章分为3篇: 第一篇为概述和通用API的使用说明,面向的读者是使用clock的driver开发者,目的是掌握怎么使用clock framework(就是本文...Loop);用于分频的divider;用于多路选择的Mux;用于clock enable控制的与门;使用clock的硬件模块(可称作consumer);等等。...clock framework提供的通用API 管理clock的最终目的,是让device driver可以方便的使用,这些是通过include/linux/clk.h中的通用API实现的,如下: 1...b)devm_clk_get,和clk_get一样,只是使用了device resource management,可以自动释放。...c)clk_put、devm_clk_put,get的反向操作,一般和对应的get API成对调用。

    97130

    linux内核模块加载命令

    目录 一,内核相关的命令 1、lsmod 列出已经加载的内核模块; 2、modinfo 查看模块信息; 3、modprobe 挂载新模块以及新模块相依赖的模块 4、rmmod 移除已挂载模块;...[root@localhost beinan]# modprobe -r 模块名 //移除已加载的模块,和rmmod 功能相同; 注意:模块名是不能带有后缀的,我们通过modprobe -l 所看到的模块...就说这么多吧,更为详细的还是用 man modprobe 来查看和尝试; 4、rmmod 移除已挂载模块; rmmod 模块名 注意: 模块名是不能带有后缀的,我们通过modprobe -l 所看到的模块...(modulefile.o 或modulesfile.ko ); 对于这个工具,我们只是介绍一下, 并不推荐使用。...因为模块有依赖关系,对于新手来说,可能不知道这个模块依赖和哪个模块依赖; 举例: [root@localhost beinan]# insmod /lib/modules/2.6.11-1.1369_FC4

    5.1K30

    Linux笔记(21)| platform总线驱动分析

    平台总线也是基于上一节当中的设备模型,在上一节里,介绍了创建总线,也提到了在实际当中,并不需要我们去创建新的总线,而是一般直接用现成的,平台总线就是这样一种现成的总线。...重点还是在probe函数里面,上一节也说过,probe函数是当驱动和设备相匹配的时候会自动执行的。搞清楚了这个怎么写,驱动也就基本结束了。 probe函数里要做什么事情呢?...每个设备所需要资源的个数是不一定的,为此内核对这些资源进行了编号,对于不同的资源,编号之间是相互独立的。...devm_ioremap将获取到的寄存器地址转化为虚拟地址。...dev: 指定要获取哪个平台设备的资源; offset: 寄存器的物理地址 size: 资源大小,这里就是寄存器4个字节 static inline void *dev_get_platdata(const

    2.5K40

    2——GPIO子系统重要概念

    我们要做的是找到它名字,比如“gpio1”,然后指定要用它里面的哪个引脚,比如。...devm_gpiod_put_array 有前缀“devm_”的含义是“设备资源管理”(Managed Device Resource),这是一种自动释放资源的机制。...它的思想是“资源是属于设备的,设备不存在时资源就可以自动释放”。 比如在Linux开发过程中,先申请了GPIO,再申请内存;如果内存申请失败,那么在返回之前就需要先释放GPIO资源。...如果使用devm的相关函数,在内存申请失败时可以直接返回:设备的销毁函数会自动地释放已经申请了的GPIO资源。 建议使用“devm_”版本的相关函数。...旧的“gpio_”函数没办法根据设备树信息获得引脚,它需要先知道引脚号。 引脚号怎么确定?

    1.9K20

    【linux命令讲解大全】036.Linux常用命令解析:rmmod和usermod

    rmmod 从运行的内核中移除指定的内核模块 补充说明 rmmod 命令用于从当前运行的内核中移除指定的内核模块。执行 rmmod 指令,可删除不需要的模块。...Linux 操作系统的核心具有模块化的特性,因此在编译核心时,务须把全部的功能都放入核心。你可以将这些功能编译成一个个单独的模块,待有需要时再分别载入它们。...语法 rmmod [选项] [参数] 选项 -v:显示指令执行的详细信息; -f:强制移除模块,使用此选项比较危险; -w:等待着,直到模块能够被除时再移除模块; -s:向系统日志(syslog)发送错误信息...参数 模块名:要移除的模块名称。...实例 用 rmmod 命令主要用于卸载正在使用的Linux内核模块,与 modprobe -r 命令相似,如下所示: [root@localhost boot]# lsmod | grep raid1

    18210

    嵌入式软件工程师笔试面试指南-Linux驱动

    查看文件内容有哪些命令可以使用? 怎么向屏幕输出带空格的字符串,比如”hello world”? 移动文件用哪个命令?改名用哪个命令? 删除文件用哪个命令?如果需要连目录及目录下文件一块删除呢?...cat命令 常用的GCC指令 预处理 编译为汇编代码 汇编 链接 一步到位编译 多文件编译 警告处理 常用的GDB调试指令 常用的驱动开发指令 加载/卸载驱动 Linux驱动如何查看驱动模块中打印信息?...如何查看内核中已有的字符设备的信息? 如何查看正在使用的有哪些中断号? uboot 什么是bootloader? uboot启动过程中做了那些事? 为什么要给内核传递参数呢?...insmod,rmmod一个驱动模块,会执行模块中的哪个函数?在设计上要注意哪些问题? NAND驱动的probe流程 Linux驱动开发中,常用的调试方法有哪些?...文中的勘误,我都会更新在github中。点击阅读原文可以直达github。 如果觉得本篇文章对你有帮助,在收藏的时候,可以双击下屏幕支持下作者,这个对我真的很重要!

    2.3K10

    linux 内核模块开发相关的文章搜集和模块开发过程中的小技巧

    最近需要开发一些内核模块,进行探究linux内核的一些特征,现在把一些遇到的比较好的文章和知识点,进行简要记录和备忘; 内核模块开发相关链接: https://www.thegeekstuff.com/...内存模型讲解和Linux访问userspace内存API讲解; 内核模块开发过程遇到的知识点: make命令,会隐士调用cc -c 命令,生成.o文件;所以在内核模块的makefile中,可以直接写上:...内核模块只能访问内核导出的函数和变量;EXPORT_SYMBOL(my_variable);  想要熟悉内核模块编程,写一个linux设备驱动程序是比较好的学习方法;  在进行开发linux内核模块的时候...,最好下载对应版本的linux内核代码,使用source insight或者vscode工具进行打开进行参考;因为经常内核中的API会改变;你参考别人的针对其他版本开发的代码,编译不通过; 内核模块和内核公用一个地址空间...,可以使用所有模块导出的符号表;我们可以使用内存拷贝函数,把用户空间中的一些代码段,拷贝到内核态来完成。

    81420

    6.100ASK_V853-PRO开发板支持MIPI摄像头

    buffer 独立为v4l2 subdev • 将的scaler(vipp)模块独立为v4l2 subdev • 将video buffer 修改为mplane 方式,使用户层取图更方便 • 采用v4l2...-event 实现事件管理 • 采用v4l2-controls 新特性 VIN 框架 • 使用过程中可简单的看成是vin 模块+ device 模块+af driver + flash 控制模块的方式...我们使用的是GC2053摄像头,使用的是全志已经内置的驱动程序,路径为: kernel/linux-4.9/drivers/media/platform/sunxi-vin/modules/sensor...,按顺序自动加载相关的ko模块。...tina-v853-open/openwrt/target/v853/v853-100ask/busybox-init-base-files/etc/init.d/S00mpp 脚本对摄像头驱动进行了提前加载,应用需要使用的时候即可快速配置并启动

    1.2K41

    Linux驱动实践:一步一步编写字符设备驱动程序

    目录 API 函数 编写驱动程序 编写应用程序 卸载驱动模块 小结 今天我们继续讨论: Linux 中字符设备的驱动程序。 在上一篇文章中Linux驱动实践:你知道【字符设备驱动程序】的两种写法吗?...我们说过:字符设备的驱动程序,有两套不同的API函数,并且在文中详细演示了利用旧的API函数来编写驱动程序。 这篇文章,我们继续这个话题,实际演示一下:字符设备驱动程序的另一套API函数的使用方法。...int cdev_add(struct cdev *,dev_t ,unsigned ); 向系统中添加一个 cdev,注册字符设备,需要在驱动被加载的时候调用。...void cdev_del(struct cdev *); 从系统中删除一个 cdev,注销字符设备,需要在驱动被卸载的时候调用。 后面在代码演示的时候,可以看到cdev结构是如何被使用的。...继续用dmesg命令查看一下: 卸载驱动模块 卸载指令: $ sudo rmmod driver2 此时,/proc/devices 下主设备号 244 的 driver2 已经不存在了。

    3.8K30
    领券