内存管理:是将物理内存映射到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