devres机制,其实看这个名字的就知道大概了-设备资源(device resource),用来设备资源的申请与释放。但是为什么要有这个机制呢,因为我们在编写设备驱动的时候,往常我们在probe函数里先申请设备资源,然后在申请出错时和在remove里需要将申请的设备资源释放,以前是分开操作的,这也造成驱动开发工程师可能会忘记释放设备资源,从而造成严重的内核问题。
追溯源码,我总结了devm相关的接口,将会在接下来的篇幅描述,但只是简单的列出来,大家感兴趣可以去追踪感兴趣的API源码。路径先给你们放出来。
内核路径 | 涉及的接口 |
---|---|
/lib/devres.c | ioremap、pcim |
/kernel/irq/devres.c | irq |
/drivers/gpio/devres.c | gpio |
/drivers/extcon/devres.c | extcon |
/drivers/base/devres.c | devres底层接口,例如devres_add,devm_kmalloc |
/include/linux/device.h | mem |