驱动:9.3 mmap

内存管理:是将物理内存映射到3-4G内核空间
使得可以在内核空间操作物理内存
ioremap:是将IO设备映射到3-4G内核空间
使得可以在你和空间操作特殊功能寄存器
mmap:是将物理内存/特殊功能寄存器映射到0-3G的用户空间
使得在用户空间可以直接控制硬件

int mmap(struct file *file, struct vm_area_struct *vma)

void *mmap(void *addr, size_t length, int prot, int flags, int fd, off_t offset);
int munmap(void *addr, size_t length);
主要用于建立/解除 文件/设备 到虚拟地址的映射;
本质上就是把对文件的读写操作转换为对内存地址的操作,当有大量的数据进行读写时,这种方式效率
比 read/write 函数方式高一些

mmap三个使用场景:

1)映射普通文件文件
	通过虚拟地址想访问数组一样访问文件
2)访问LCD屏设备
	通过mmap将显存映射到用户空间0-3G
	用户空间可以直接将图片有硬盘搬到显存
3)访问camer设备

mmap的实现原理

mmap(..., lcd_fd, ...)
  --------------------------------------------
  sys_mmap
     fb_mmap(....){ //fbmem.c 
        //remap_pfn_range
        //第三个参数就是要映射的显存对应的页编号  0xc0000900/4k
        //第四个参数就是要连续映射的字节数
        io_remap_pfn_range(vma, vma->vm_start, off >> PAGE_SHIFT,
		     vma->vm_end - vma->vm_start, vma->vm_page_prot) 

重点:学会在用户空间如何通过mmap实现显存重点
lcd_mmap.c

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值