最近的Linux内核提供了设备管理的资源分配,如devm_get_free_pages()
,devm_kmalloc()
或devm_ioremap()
。它允许我们简化代码,同时在模块退出时调用所有解除分配。
Altough我可以自己实现它,我想知道为什么还没有devm_vmalloc()
。
答案 0 :(得分:-1)
使用kmalloc分配的内存在ram中是连续的,因此可以通过mmaped给用户(例如在内核和用户之间创建共享内存) devm_ *函数的使用是使用sysfs报告用户在内核中发生什么,用户可以使用它来做某事 例如在android(基于Linux内核)中,可以使用ION将物理地址映射到用户,因此如果一个设备(例如摄像头)报告地址,则其他设备(例如GPU)可以使用它但是可以完成仅用于连续的物理内存。 vmalloc分配不是连续的,这就是用户无关的原因,因为它无法访问内核内存而mmap无法正常工作