linux中devm相关函数

在这里插入图片描述

devm相关

clock

devm_clk_get
用于获取时钟源,函数原型如下:

struct clk *devm_clk_get(struct device *dev, const char *id);

dev:device设备
id:时钟源名字,可以为NULL
返回值:正确返回struct clk指针,错误返回NULL

devm_clk_put
用于释放时钟源,函数原型如下:

void devm_clk_put(struct device * dev, struct clk * clk);

dev:device设备
id:时钟源名字

iomap

devm_ioremap_resource
先申请,后映射物理内存,函数原型如下:

void __iomem *devm_ioremap_resource(struct device *dev, const struct resource *res);

dev:device设备
res:resource资源
返回值:成功返回虚拟地址指针,识别返回错误码

devm_iounmap
释放之前映射的地址,函数原型如下:

void devm_iounmap(struct device *dev, void __iomem *addr);

dev:device设备
addr:要释放的虚拟地址

irq

devm_request_irq
用于注册中断服务函数,函数原型如下:

int devm_request_irq(struct device *dev, unsigned int irq, irq_handle_t handle, unsigned int flags, const char *name, void* dev_id);

dev:device设备
irq:中断号,可以通过platform_get_irq获得
handle:中断处理函数
flags:中断触发方式,上升沿/下降沿等
name:中断名称
dev_id:中断共享时用到,一般设置为结构体或NULL

devm_free_irq
用于释放devm_request_irq注册的中断,函数原型如下:

void devm_free_irq(struct device *dev, unsigned int irq, void *dev_id)

dev:device设备
irq:中断号,与devm_request_irq注册的对应
dev_id:与devm_request_irq注册的对应

mem

devm_kmalloc
分配的内存物理上连续(虚拟上也连续),只能在低端内存分配(直接内存映射区),函数原型如下:

void *kmalloc(size_t size, gfp_t gfp)

size:分配的大小
gfp:申请内存的类型标志

devm_kzalloc
与devm_kmalloc类似,只不过devm_kzalloc会对申请到的内存内容清零,函数原型如下:

void * devm_kzalloc (struct device * dev, size_t size, gfp_t gfp);

dev:device设备
size:申请内存的大小
gfp:申请内存的类型标志

devm_kfree
devm_kmalloc()和devm_kzalloc()申请的内存必须调用devm_kfree()释放,函数原型如下:

void devm_kfree(struct device *dev, void *p);

dev:device设备
p:内存指针

pinctrl

devm_pinctrl_get
用于获取pin操作句柄,函数原型如下:

struct pinctrl * devm_pinctrl_get(struct device *dev); 

dev:device设备
返回值:pinctrl句柄

devm_pinctrl_put
用于释放pin操作句柄,函数原型如下:

void devm_pinctrl_put(struct pinctrl *p); 

p:pinctrl句柄

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值