_linux中devm函数简介_ (linux中devm)

Linux中devm函数简介

随着嵌入式系统的广泛应用,嵌入式系统的需求不断增长。Linux作为一种广泛应用于嵌入式系统的操作系统,其在嵌入式系统中的应用也越来越广泛。在Linux中,devm函数被广泛应用于嵌入式系统中。本文将为大家介绍Linux中devm函数的概念和应用。

一、概述

在Linux驱动程序中,我们通常需要向内核申请一些设备资源,例如:申请内存、注册字符设备等等。然而,当我们不再使用这些设备资源时,我们需要撤销所使用的设备资源,以节省设备资源的使用。但是,当撤销不当时,可能会导致设备无法正常工作,极大地影响嵌入式系统的稳定性。在这种情况下,devm函数发挥了巨大的作用。

devm是Linux系统中的一个设备管理函数,全称为device managed(设备管理)。在Linux中,devm函数通常用来管理动态分配的资源,以便于设备的安全释放。设备可以被看作是一个有限的、值得保护的资源,所以使用devm函数可以让设备的管理和安全释放变得更为简单和安全。

二、devm函数的使用

1. devm函数的介绍

devm函数是一个宏定义函数,其定义如下:

#define devm_xxx(p, f) \

({\

typeof(p) ___ptr = (p);\

___ptr ? (f) : NULL;\

})

其中,p为指向资源的指针,f是一种资源管理的函数。

2. devm函数的作用

devm函数是以“设备管理的方式”(device managed)为基础,在记忆资源分配时,将自动记录相应资源的释放操作。在驱动程序中,当设备不再使用某个资源(例如:内存或I/O端口)时,使用devm函数会自动调用相应资源的释放操作,从而防止资源泄露和内存泄露的问题。

3. devm函数的应用场景

在Linux设备驱动程序中,devm函数通常与i2c、spi、pinctrl等设备相关的API一起使用,以及和动态分配的内存相关API一起使用。在以下场景中,常常使用devm函数来管理内存和设备资源。

(1)pinctrl

pinctrl是Linux系统中一个非常重要的组件,在调度GPIO(General Purpose Input Output)接口时,pinctrl可以根据不同的设备类型进行有效的GPIO使用。这时就需要使用devm_pinctrl_get函数进行注册。

(2)i2c

i2c是一种通讯总线,它通常应用于系统中的各种外设。在Linux中,i2c设备的驱动通常使用devm_i2c_new_device函数进行注册。

(3)spi

spi是一种高速串行传输协议,用于在嵌入式系统中的各种嵌入式设备之间进行通信。在Linux中,可以使用devm_spi_register_device函数进行注册。

(4)网络设备

在Linux系统中,网络设备是一个非常重要的资源。在我们使用一个网络设备之前,必须要开启该设备,并管理该设备的各种资源。常常使用devm函数管理该设备的资源。

4. devm函数的示例

在开发时,经常会使用动态内存分配。在使用完之后,需要手动释放内存,否则可能存在内存泄漏的问题。下面是一个实现应用devm函数的数据结构的示例,以便于释放内存等资源。

1. 声明devm函数

static int my_new(struct platform_device *pdev)

{

struct my_platform_device *mydev;

devm_xxx(pdev, mydev) = devm_kzalloc(&pdev->dev, sizeof(*mydev), GFP_KERNEL);

if (!mydev)

return -ENOMEM;

memset(mydev, 0, sizeof(*mydev));

return 0;

}

2. 使用devm函数

static int my_probe(struct platform_device *pdev)

{

struct my_platform_device *mydev = dev_get_drvdata(&pdev->dev);

int ret = -ENOMEM;

/* allocate memory for mydev */

mydev = devm_kzalloc(&pdev->dev, sizeof(*mydev), GFP_KERNEL);

if (!mydev)

return -ENOMEM;

/* allocate memory for data */

mydev->data = devm_kzalloc(&pdev->dev, MY_DATA_SIZE, GFP_KERNEL);

if (!mydev->data)

goto err;

/* allocate memory for regulator */

mydev->regulator = devm_regulator_get(&pdev->dev, “my_regulator”);

if (IS_ERR(mydev->regulator)) {

ret = PTR_ERR(mydev->regulator);

goto err;

}

/* allocate memory for clk */

mydev->clk = devm_clk_get(&pdev->dev, “my_clk”);

if (IS_ERR(mydev->clk)) {

ret = PTR_ERR(mydev->clk);

goto err;

}

/* allocate memory for dma */

mydev->dma = devm_kzalloc(&pdev->dev, sizeof(struct dma_struct), GFP_KERNEL);

if (!mydev->dma)

goto err;

/* allocate memory for timer */

mydev->timer = devm_timer_request(&pdev->dev, my_timer);

if (IS_ERR(mydev->timer)) {

ret = PTR_ERR(mydev->timer);

goto err;

}

return 0;

err:

/* release resources */

return ret;

}

在上面的示例中,使用了devm_kzalloc分配了内存空间,并且使用devm_regulator_get、devm_clk_get等函数分配了设备资源,当驱动需要撤销这些设备资源时,devm函数会自动调用相应的释放操作,从而保证设备的安全释放。

三、

了解了devm函数的概念和使用方法后,我们发现,在Linux设备驱动程序中,使用devm函数管理设备资源是一个十分方便和安全的方法。它不仅可以避免一些常见的驱动程序错误,还可以在释放内存时加强内存清理和释放的稳定性和可靠性。因此,在我们开发嵌入式系统时,建议使用devm函数来管理设备资源。

相关问题拓展阅读:

  • APF文件怎么打开啊?

APF文件怎么打开啊?

把Adobe Reader下载后安装

APF: Advanced Policy Firewall,是 Rf-x Networks 出品的Linux环境下的软件防火墙。APF采用Linux系统默认的 iptables 规则。APF可以算是Linux中最出名的软件防火墙之一。

下载最新版的芹察空APF:

wget

解压:

tar -xzvf apf-current.tar.gz

进入APF目录:

cd apf-版本

安装!

./install.sh

安装完以后,开始配置APF:

nano /etc/apf/conf.apf

查找(ctrl + w) USE_DS=”0〃 ,将之更改为 USE_DS=”1〃 ;查找 USE_AD=”0〃 ,将之更改为 USE_AD=”1〃 。

然后开始配置最主要的部分:端口。

以下提供 cPanel, Ensim 和 Plesk 的推荐配置。

cPanel

IG_TCP_CPORTS=”20,21,22,25,26,53,80,110,143,443,465,993,995,2023,2023,2023,2023,2023,2023〃

IG_UDP_CPORTS=”21,53,873〃

EGF=”1〃

EG_TCP_CPORTS=”21,22,25,26,27,37,43,53,80,110,113,443,465,873,2023〃

EG_UDP_CPORTS=”20,21,37,53,873〃

Ensim

IG_TCP_CPORTS=”21,22,25,53,80,110,143,443,19638〃

IG_UDP_CPORTS=”53〃

EGF=”1〃

EG_TCP_CPORTS=”21,22,25,53,80,110,443〃

EG_UDP_CPORTS=”20,21,53〃

Plesk

IG_TCP_CPORTS=”20,21,22,25,53,80,110,143,443,465,993,995,8443〃

IG_UDP_CPORTS=”37,53,873〃

EGF=”1〃

EG_TCP_CPORTS=”20,21,22,25,53,37,43,80,113,443,465,873〃

EG_UDP_CPORTS=”53,873〃

下面列出常规的端口,方便大家进行配置:

21/tcp ftp

22/tcp ssh

25/tcp tp

26/tcp 备用tp端口

80/tcp http

110/tcp pop3

143/tcp imap

443/tcp https

993/tcp imaps

995/tcp pop3s

3306/tcp mysql

5432/tcp postgres

53/udp dns

配置完成后保存退出,并启动APF防火墙:

/usr/local/in/apf -s

请注意,此时防火墙是运行在调试模式,每五分钟重洗配置。这样能避免因为错误的配置而使服务器瘫痪没州。

确保配置无误后,再次进入配置文件(nano /etc/apf/conf.apf),将 DEVM=”1〃 更改为 DEVM=”0〃 。这样APF就会运行在常规模式下。

重启APF(/usr/local/in/apf -s)。

注意事项:如果你的Linux内核将iptables直接编译而非模块模式的话,请将配置文件中的 MONOKERN=”0〃 更改为 MONOKERN=”1〃 。

可选配置:

APF有个新的功能便是防止DoS攻击(/etc/apf/ad)。其日志文件保存在/var/log/apfados_log。

下面我们将配置APF使其遇到DoS后发送电子邮件给管理员嫌瞎。

打开配置文件:

nano -w /etc/apf/ad/conf.antidos

查找 。

CONAME=”Your Company” 为你的网站或公司名称。

将 USR_ALERT=”0〃 更改为 USR_ALERT=”0〃 ,从而使系统发送电子邮件。

USR=”” 为你的电子邮件地址。

保存并退出,重启APF(/usr/local/in/apf -r)。

另外,如果需要让系统每次重新启动后自动运行APF,则执行以下命令:

chkconfig –level 2345 apf on

需要去除自动启动的话:

chkconfig –del apf

最后,希望大家都能顺利的为自己的Linux架设起一道有效的安全屏障。

用姿胡方正阅读器或者Adobereader这个软件,就可渣塌以打开。

  经常有人问什么什么如册圆扩展名的文件要用什么程序来打开,事实上,电脑上面真正能表示文件的类型并且得到一致承认的扩展名并不是很多,而大多数扩展名一般都是由使用该文件的软件的开发者定义的。

APF格式文件可以用Adobereader这个软件旁数

方正阅读运租首器也型辩可以用相同的方法打开

linux中devm的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于linux中devm,_linux中devm函数简介_,APF文件怎么打开啊?的信息别忘了在本站进行查找喔。

香港服务器首选树叶云,2H2G首月10元开通。
树叶云(shuyeidc.com)提供简单好用,价格厚道的香港/美国云服务器和独立服务器。IDC+ISP+ICP资质。ARIN和APNIC会员。成熟技术团队15年行业经验。

文章来源网络,作者:运维,如若转载,请注明出处:https://shuyeidc.com/wp/163354.html<

(0)
运维的头像运维
上一篇2025-03-19 02:57
下一篇 2025-03-19 02:58

相关推荐

  • 个人主题怎么制作?

    制作个人主题是一个将个人风格、兴趣或专业领域转化为视觉化或结构化内容的过程,无论是用于个人博客、作品集、社交媒体账号还是品牌形象,核心都是围绕“个人特色”展开,以下从定位、内容规划、视觉设计、技术实现四个维度,详细拆解制作个人主题的完整流程,明确主题定位:找到个人特色的核心主题定位是所有工作的起点,需要先回答……

    2025-11-20
    0
  • 社群营销管理关键是什么?

    社群营销的核心在于通过建立有温度、有价值、有归属感的社群,实现用户留存、转化和品牌传播,其管理需贯穿“目标定位-内容运营-用户互动-数据驱动-风险控制”全流程,以下从五个维度展开详细说明:明确社群定位与目标社群管理的首要任务是精准定位,需明确社群的核心价值(如行业交流、产品使用指导、兴趣分享等)、目标用户画像……

    2025-11-20
    0
  • 香港公司网站备案需要什么材料?

    香港公司进行网站备案是一个涉及多部门协调、流程相对严谨的过程,尤其需兼顾中国内地与香港两地的监管要求,由于香港公司注册地与中国内地不同,其网站若主要服务内地用户或使用内地服务器,需根据服务器位置、网站内容性质等,选择对应的备案路径(如工信部ICP备案或公安备案),以下从备案主体资格、流程步骤、材料准备、注意事项……

    2025-11-20
    0
  • 如何企业上云推广

    企业上云已成为数字化转型的核心战略,但推广过程中需结合行业特性、企业痛点与市场需求,构建系统性、多维度的推广体系,以下从市场定位、策略设计、执行落地及效果优化四个维度,详细拆解企业上云推广的实践路径,精准定位:明确目标企业与核心价值企业上云并非“一刀切”的方案,需先锁定目标客户群体,提炼差异化价值主张,客户分层……

    2025-11-20
    0
  • PS设计搜索框的实用技巧有哪些?

    在PS中设计一个美观且功能性的搜索框需要结合创意构思、视觉设计和用户体验考量,以下从设计思路、制作步骤、细节优化及交互预览等方面详细说明,帮助打造符合需求的搜索框,设计前的规划明确使用场景:根据网站或APP的整体风格确定搜索框的调性,例如极简风适合细线条和纯色,科技感适合渐变和发光效果,电商类则可能需要突出搜索……

    2025-11-20
    0

发表回复

您的邮箱地址不会被公开。必填项已用 * 标注