DRM-Core 层为各家显卡driver的编写提供了通用层。 这个好像是必然的,为了复用和代码的规范:-0 Linux内核的guys为我们提高了很多接口,直接用就行了。
对DRM,注册的最关键函数是drm_init,注册了一系列函数回调。
对应的注销函数当然是drm_exit。
drm_init --> drm_get_dev --> drm_fill_in_dev --> drm_ht_create/drm_core_has_AGP/drm_device_is_agp/drm_core_check_feature/drm_core_has_MTRR/drm_ctxbitmap_init/drm_gem_init(终于“真货”来了)
-->drm_core_check_feature-->drm_get_minor-->drm_minor_get_id/drm_proc_init/drm_sysfs_device_add/...
这里调用到的drm开头的函数都属于drm-core层。
下面一个个的分析? 算了,还是挑重要的仔细看吧:-)
直捣drm_gem_init吧。
/**
* GEM specific mm private for tracking GEM objects
*/
struct drm_gem_mm {
struct drm_mm offset_manager; /**< Offset mgmt for buffer objects */
struct drm_open_hash offset_hash; /**< User token hash table for maps */
};
注册DRM的MM重要函数是drm_mm_init.建立保存mem关系的链表。
无论是GEM还是TTM,均会调用到该函