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

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 groupapi即可实现。...在分配内存时候,会分配比我们要求大空间,空间前面部分用于存放实现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.3K60
  • 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一样。

    69520

    已解决【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时候,会自动装载

    5.5K10

    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

    76730

    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。

    82430

    手把手教你使用 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 目录下找不到对应文档,这个时候就要咨询芯片提供商,让他们给你提供参考设备树文件。

    1.9K10

    【深度】韦东山: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子系统,只需要在设备树里指定就可以

    10.3K74

    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 common clock framework(1)_概述

    因此,蜗蜗会将clock framework分析文章分为3篇: 第一篇为概述和通用API使用说明,面向读者是使用clockdriver开发者,目的是掌握怎么使用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成对调用。

    94730

    【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

    15410

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

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

    2.4K40

    2——GPIO子系统重要概念

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

    1.8K20

    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会改变;你参考别人针对其他版本开发代码,编译不通过; 内核模块和内核公用一个地址空间...,可以使用所有模块导出符号表;我们可以使用内存拷贝函数,把用户空间中一些代码段,拷贝到内核态来完成。

    81220

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

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

    2.3K00

    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.5K30

    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.1K41

    Casper-fs:一款功能强大自定义隐藏Linux内核模块生成器

    关于Casper-fs Casper-fs是一款功能强大自定义隐藏Linux内核模块生成器,其中每一个模块都可以在文件系统中工作并利用系统资源,然后根据YAML规则文件总自定义规则列表来保护和隐藏各种敏感文件...规则,Python脚本会使用这个文件来生成一个新Casper-fs自定义模块: $ cat module_generator/rules/fs-rules.yaml binary_name: casperfs...安装模块 如果你使用是Fedora Linux,可以使用下列命令为开发人员安装内核包: # dnf update # dnf install kernel-headers.x86_64 kernel-modules.x86...改为不可见操作密码为“AbraKadabra”; 将敏感文件隐藏操作密码为“Alakazam”,改为显示操作密码也是“Alakazam”; 文件保护和解保护操作密码为“Sesame”; 我们需要向目标设备发送密码...注意,我们需要使用lsmod命令将Casper-fs调整为可见,因此需要先执行下列操作: # ls test.txt log.txt backup_httpd.log # rm backup_httpd.log

    81320
    领券