驱动开发学习day5-->mmap

本文详细介绍了Linux驱动开发中的mmap系统调用,包括其参数和作用,以及如何进行内存映射。同时,文章探讨了平台设备驱动框架,解释了设备与驱动的分离、资源管理,通过实例展示了设备注册、资源添加和驱动获取资源的过程。最后,文章通过LED驱动的示例说明了字符设备驱动框架的应用。
摘要由CSDN通过智能技术生成

1 mmap---》系统调用函数

  void *mmap(void *addr, size_t length, int prot, int flags,
                  int fd, off_t offset);

 作用:将用户空间得地址映射到内核空间
    *addr:被映射到内核进程空间得地址--》用户空间地址
    lenght:映射地址得长度
    prot:内核保护标志,PROT_READ,PROT_WRITE
    flags:MAP_SHARED,MAP_PRIVATE
    fd:文件描述符
    offset:被映射对象内容得起点。0
    返回值:映射成功后得用户空间地址

int munmap(void *addr, size_t length);

作用:取消映射
    *addr:用户空间地址
    lenght:映射地址的长度
    返回值:成功为0

int (*mmap) (struct file *, truct vm_area_struct *);

int HelloMmap(struct file *pFile,struct vm_area_struct *vma);

pfile:内核打开的文件
*vma:应用层使用mmap后,内核生成的映射结构体
remap_pfn_range:

 int remap_pfn_range(struct vm_area_struct *vma, unsigned long addr,  unsigned long pfn, unsigned long size, pgprot_t prot)

 *vma:应用层使用mmap后,内核生成的映射结构体
    addr:被映射到内核进程空间的起始地址
    pfn:内核虚拟地址对应的物理地址的页编号
    size:被映射区域的大小
    prot:所映射区域的访问方式
            kmalloc:申请内存空间--》在物理上是连续的--》kfree
            vmalloc:申请内存空间--》在物理上是

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值