1 Linux驱动程序的功能是什么?
(1)对设备初始化和释放。
(2)进行内核与硬件的数据交互。
(3)检测和处理设备出现的错误。
2. 内核程序中申请内存使用什么函数?
答案:kmalloc()、kzalloc()、vmalloc()。
解读:
(1)void *kmalloc(size_t size, gfp_t flags);
①申请连续的物理内存,这对于要进行DMA的设备十分重要,但大小不能超过128KB,其中有16B是被页描述符占用了。
②较常用的flag有GFP_ATOMIC(分配内存的过程是一个原子过程)、GFP_KERNEL(正常分配内存)、GFP_DMA(给DMA控制器分配内存)。
③对应的内存释放函数为void kfree(const void *objp)。
(2)void *kzalloc(size_t size, gfp_t flags);
①kzalloc()相对kmalloc()只是额外增加了__GFP_ZERO标志,除了申请内存外,还会对申请到的内存内容清零。
②对应的释放函数也是kfree()。
(3)void *vmalloc(unsigned long size);
①申请虚拟地址连续的内存空间,但其对应的物理内存不一定连续,因此对申请的内存大小没有限制。
②对应的内存释放函数为void vfree(const void *addr)。文章来源:https://www.toymoban.com/news/detail-463137.html
③注意:vmalloc()和vfree()可以文章来源地址https://www.toymoban.com/news/detail-463137.html
到了这里,关于驱动开发——嵌入式(驱动)软开基础(七)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!