按照 初始化顺序
1. 内核 fb core 侧
2. 内核驱动侧(此时fb_mmap没跑)
3. 应用侧(应用侧运行的时候fb_mmap开始跑)
drivers/video/fbdev/core/fbmem.c
static const struct file_operations fb_fops = {
.mmap = fb_mmap,
}
fbmem_init
register_chrdev(FB_MAJOR, "fb", &fb_fops);
fb_mmap
vm_iomap_memory(vma, start, len);
fb 驱动 mmap 的代码 来自于 https:
drivers/video/samsung/s3cfb.c
s3cfb_probe
s3cfb_map_video_memory(&s3cfb_info[index]);
fbi->map_cpu_f1 = dma_alloc_wc(fbi->dev, fbi->map_size_f1, &fbi->map_dma_f1, GFP_KERNEL);
fb write 的代码来自于 Linux设备驱动开发详解光盘 linux设备驱动开发详解光盘源码\linux设备驱动开发详解光盘源码\18\FRAMEBUFFER应用程序范例\fb_display
fb mmap 的代码来自 嵌入式C语言自我修养 P242
fb_mmap 执行的时候, 内核 fb_mmap 执行并调用 vm_iomap_memory
参数 为
vm_iomap_memory(vma, start, len);
总结
对应 https:
1.在file->f_op->mmap前已经分配了物理内存,file->f_op->mmap 只做了映射
lcd 包括
LCD 控制器
lcd 驱动器
lcd 屏幕
显示内存(ram)
s3cfb_init_registers s3cfb_set_fb_addr 写了 51600000 到 S3C_VIDW00ADD0B0 寄存器
实际物理地址 addr 51600000 size7f800
内核虚拟地址 addr d084b000 size 7f800
进程虚拟地址 addr b6dfa000 size 7f800