• 首页 首页 icon
  • 工具库 工具库 icon
    • IP查询 IP查询 icon
  • 内容库 内容库 icon
    • 快讯库 快讯库 icon
    • 精品库 精品库 icon
    • 问答库 问答库 icon
  • 更多 更多 icon
    • 服务条款 服务条款 icon

驱动开发——嵌入式驱动软开基础七

武飞扬头像
瓯江畔
帮助1

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
系列文章
更多 icon
同类精品
更多 icon
继续加载