驱动开发——嵌入式驱动软开基础七
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)。
③注意:vmalloc()和vfree()可以睡眠,因此不能在中断上下文调用。
3 内核程序中申请内存和应用程序时申请内存有什么区别?
答案:内核中申请内存空间用的是函数kmalloc、kzalloc、vmalloc,应用程序申请内存用的函数是malloc。
解读:
(1)kmalloc/kzalloc直接分配连续的物理地址(虚拟地址也是连续的)。
(2)vmalloc分配连续的虚拟地址,但物理地址不一定连续。分配时实际分配了物理内存
这篇好文章是转载于:学新通技术网
- 版权申明: 本站部分内容来自互联网,仅供学习及演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,请提供相关证据及您的身份证明,我们将在收到邮件后48小时内删除。
- 本站站名: 学新通技术网
- 本文地址: /boutique/detail/tanhgakebf
-
photoshop保存的图片太大微信发不了怎么办
PHP中文网 06-15 -
《学习通》视频自动暂停处理方法
HelloWorld317 07-05 -
word里面弄一个表格后上面的标题会跑到下面怎么办
PHP中文网 06-20 -
Android 11 保存文件到外部存储,并分享文件
Luke 10-12 -
photoshop扩展功能面板显示灰色怎么办
PHP中文网 06-14 -
微信公众号没有声音提示怎么办
PHP中文网 03-31 -
excel下划线不显示怎么办
PHP中文网 06-23 -
excel打印预览压线压字怎么办
PHP中文网 06-22 -
TikTok加速器哪个好免费的TK加速器推荐
TK小达人 10-01 -
怎样阻止微信小程序自动打开
PHP中文网 06-13