接前一篇文章:KWin、libdrm、DRM从上到下全过程 —— drmModeAddFBxxx(19)
上一回讲解了从drm_mode_addfb2_ioctl()和drm_mode_addfb_ioctl()一步步往前追溯的全过程:
drm_mode_addfb2_ioctl() / drm_mode_addfb_ioctl() --->
drm_ioctls[] --->
drm_ioctl()--->
i915_driver_fops以及其中的unlocked_ioctl函数指针 --->
vfs_ioctl()/compat_ptr_ioctl() --->
SYSCALL_DEFINE3(ioctl, unsigned int, fd, unsigned int, cmd, unsigned long, arg) / COMPAT_SYSCALL_DEFINE3(ioctl, unsigned int, fd, unsigned int, cmd,compat_ulong_t, arg)
最终追溯到了源头。但是这个追溯过程是反向的,本回将结合KWin、libdrm以及DRM,从上往下、从应用向内核、正向地对此过程再作详细解析。
- KWin层
KWin层的代码仍然还是src/backends/drm/drm_buffer.cpp的那一经典段落:
std::shared_ptr<DrmFramebuffer> D