溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

Linux DRM內(nèi)核代碼有哪些

發(fā)布時(shí)間:2021-11-23 15:40:40 來源:億速云 閱讀:149 作者:iii 欄目:互聯(lián)網(wǎng)科技

本篇內(nèi)容介紹了“Linux DRM內(nèi)核代碼有哪些”的有關(guān)知識(shí),在實(shí)際案例的操作過程中,不少人都會(huì)遇到這樣的困境,接下來就讓小編帶領(lǐng)大家學(xué)習(xí)一下如何處理這些情況吧!希望大家仔細(xì)閱讀,能夠?qū)W有所成!

Linux DRM內(nèi)核代碼路徑:drivers/gpu/drm。 使用ls命令查看該目錄,顯示如下:

root@ubuntu:/home/run/code/rockchip-bsp/kernel/drivers/gpu/drm# lsamd               drm_atomic.c         drm_crtc_internal.h    drm_fb_cma_helper.c   drm_internal.h  drm_modes.c         drm_rect.c          exynos    mga      rcar-du   ttmarmada            drm_atomic_helper.c  drm_debugfs.c          drm_fb_helper.c       drm_ioc32.c     drm_modeset_lock.c  drm_scatter.c       fsl-dcu   mgag200  rockchip  udlast               drm_auth.c           drm_dma.c              drm_flip_work.c       drm_ioctl.c     drm_of.c            drm_scdc_helper.c   gma500    msm      savage    vc4ati_pcigart.c     drm_bridge.c         drm_dp_helper.c        drm_fops.c            drm_irq.c       drm_panel.c         drm_sync_helper.c   i2c       nouveau  shmobile  vgematmel-hlcdc       drm_bufs.c           drm_dp_mst_topology.c  drm_gem.c             drm_legacy.h    drm_pci.c           drm_sysfs.c         i810      omapdrm  sis       viabochs             drm_cache.c          drm_drv.c              drm_gem_cma_helper.c  drm_lock.c      drm_plane_helper.c  drm_trace.h         i915      panel    sti       virtiobridge            drm_context.c        drm_edid.c             drm_global.c          drm_memory.c    drm_platform.c      drm_trace_points.c  imx       qxl      tdfx      vmwgfxcirrus            drm_crtc.c           drm_edid_load.c        drm_hashtab.c         drm_mipi_dsi.c  drm_prime.c         drm_vma_manager.c   Kconfig   r128     tegradrm_agpsupport.c  drm_crtc_helper.c    drm_encoder_slave.c    drm_info.c            drm_mm.c        drm_probe_helper.c  drm_vm.c            Makefile  radeon   tilcdc

在Linux 內(nèi)核中,通過Makefile、Kconfig和SOC廠商對(duì)應(yīng)的*defconfig文件配合完成DRM代碼編譯。在DRM驅(qū)動(dòng)程序中,主要涉及到的文件有:

  1. drivers/gpu/Makefile

    在Makefile中可以看到:obj-y += drm/,說明直接編譯drm目錄。

    A.小知識(shí)點(diǎn):

    obj-y、obj-m 是Makefile變量。在Makefile中為這些變量賦值后,Kbuild會(huì)自動(dòng)把對(duì)象編譯到內(nèi)核或者編譯成模塊。

    obj-y:表示編譯進(jìn)內(nèi)核;obj-m:表示編譯成模塊。

    后續(xù)會(huì)專門介紹Linux內(nèi)核Kbuild系統(tǒng)。

  2. drivers/gpu/drm/Makefile、Kconfig

    在Makefile中區(qū)分了DRM core和SOC DRM driver的編譯。

    1)DRM core對(duì)應(yīng)的部分文件

    drm-y       :=  drm_auth.o drm_bufs.o drm_cache.o \                drm_context.o drm_dma.o \                drm_fops.o drm_gem.o drm_ioctl.o drm_irq.o \                drm_lock.o drm_memory.o drm_drv.o drm_vm.o \                drm_scatter.o drm_pci.o \                drm_platform.o drm_sysfs.o drm_hashtab.o drm_mm.o \                drm_crtc.o drm_modes.o drm_edid.o \                drm_info.o drm_debugfs.o drm_encoder_slave.o \                drm_trace_points.o drm_global.o drm_prime.o \                drm_rect.o drm_vma_manager.o drm_flip_work.o \                drm_modeset_lock.o drm_atomic.o drm_bridge.o \                drm_sync_helper.o drm_scdc_helper.o


    2)SOC DRM driver對(duì)應(yīng)的部分文件

    obj-$(CONFIG_DRM_TTM)   += ttm/obj-$(CONFIG_DRM_R128)  += r128/obj-$(CONFIG_HSA_AMD) += amd/amdkfd/obj-$(CONFIG_DRM_RADEON)+= radeon/obj-$(CONFIG_DRM_AMDGPU)+= amd/amdgpu/obj-$(CONFIG_DRM_MGA)   += mga/obj-$(CONFIG_DRM_I810)  += i810/obj-$(CONFIG_DRM_I915)  += i915/obj-$(CONFIG_DRM_MGAG200) += mgag200/obj-$(CONFIG_DRM_VC4)  += vc4/obj-$(CONFIG_DRM_CIRRUS_QEMU) += cirrus/obj-$(CONFIG_DRM_SIS)   += sis/obj-$(CONFIG_DRM_SAVAGE)+= savage/obj-$(CONFIG_DRM_VMWGFX)+= vmwgfx/obj-$(CONFIG_DRM_VIA)   +=via/obj-$(CONFIG_DRM_VGEM)  += vgem/obj-$(CONFIG_DRM_NOUVEAU) +=nouveau/obj-$(CONFIG_DRM_EXYNOS) +=exynos/obj-$(CONFIG_DRM_ROCKCHIP) +=rockchip/obj-$(CONFIG_DRM_GMA500) += gma500/obj-$(CONFIG_DRM_UDL) += udl/obj-$(CONFIG_DRM_AST) += ast/obj-$(CONFIG_DRM_ARMADA) += armada/obj-$(CONFIG_DRM_ATMEL_HLCDC)   += atmel-hlcdc/obj-$(CONFIG_DRM_RCAR_DU) += rcar-du/obj-$(CONFIG_DRM_SHMOBILE) +=shmobile/obj-$(CONFIG_DRM_OMAP)  += omapdrm/obj-$(CONFIG_DRM_QXL) += qxl/obj-$(CONFIG_DRM_BOCHS) += bochs/obj-$(CONFIG_DRM_VIRTIO_GPU) += virtio/obj-$(CONFIG_DRM_MSM) += msm/obj-$(CONFIG_DRM_TEGRA) += tegra/obj-$(CONFIG_DRM_STI) += sti/obj-$(CONFIG_DRM_IMX) += imx/


    在每個(gè)文件夾中的Kconfig文件中可以看到對(duì)應(yīng)文件夾實(shí)現(xiàn)的功能。以RK3399為例,在drivers/gpu/drm/rockchip/Kconfig中:

    config DRM_ROCKCHIP        tristate "DRM Support for Rockchip"        depends on DRM        depends on RESET_CONTROLLER        select DRM_KMS_HELPER        select DRM_KMS_FB_HELPER        select DRM_PANEL        select FB_CFB_FILLRECT        select FB_CFB_COPYAREA        select FB_CFB_IMAGEBLIT        select VIDEOMODE_HELPERS        help          Choose this option if you have a Rockchip soc chipset.          This driver provides kernel mode setting and buffer          management to userspace. This driver does not provide          2D or 3D acceleration; acceleration is performed by other          IP found on the SoC.


    對(duì)drivers/gpu/drm/中非SOC DRM driver做個(gè)簡(jiǎn)單說明,見下表。

    文件夾簡(jiǎn)介
    bridge接口轉(zhuǎn)換驅(qū)動(dòng)
    i2cI2C接口的encoder或transmitter芯片驅(qū)動(dòng)
    ttmGEM和TTM是DRM的兩套內(nèi)存管理子系統(tǒng)
    vgem非硬件支持的GEM服務(wù)
  3. drivers/gpu/drm/rockchip/Makefile、Kconfig

    在Makefile文件中,區(qū)分了RK3399 DRM驅(qū)動(dòng)和RK3399 各種接口(hdmi、lvds、dp、mipi等)驅(qū)動(dòng),例:

    rockchipdrm-y := rockchip_drm_drv.o rockchip_drm_fb.o \                rockchip_drm_gem.o rockchip_drm_vop.orockchipdrm-$(CONFIG_DRM_FBDEV_EMULATION) += rockchip_drm_fbdev.oobj-$(CONFIG_ROCKCHIP_DW_HDMI) += dw_hdmi-rockchip.oobj-$(CONFIG_ROCKCHIP_CDN_DP) += cdn-dp.ocdn-dp-objs := cdn-dp-core.o cdn-dp-reg.o cdn-dp-link-training.oobj-$(CONFIG_ROCKCHIP_DW_MIPI_DSI) += dw-mipi-dsi.oobj-$(CONFIG_ROCKCHIP_ANALOGIX_DP) += analogix_dp-rockchip.oobj-$(CONFIG_ROCKCHIP_INNO_HDMI) += inno_hdmi.oobj-$(CONFIG_ROCKCHIP_LVDS) += rockchip_lvds.oobj-$(CONFIG_ROCKCHIP_RGB) += rockchip_rgb.oobj-$(CONFIG_ROCKCHIP_DRM_BACKLIGHT) += rockchip_drm_backlight.oobj-$(CONFIG_DRM_ROCKCHIP) += rockchip_vop_reg.o rockchipdrm.oobj-$(CONFIG_ROCKCHIP_DRM_TVE) += rockchip_drm_tve.oobj-$(CONFIG_ROCKCHIP_RK3066_HDMI) += rk3066_hdmi.oobj-$(CONFIG_DRM_ROCKCHIP_RK618) += rk618/


  4. arch/arm64/configs/rockchip_linux_defconfig

    rockchip_linux_defconfig文件在內(nèi)核開始編譯時(shí)會(huì)生成.config文件,在該文件中定義的宏,配合2和3進(jìn)行編譯。例:

    CONFIG_DRM=yCONFIG_DRM_LOAD_EDID_FIRMWARE=yCONFIG_DRM_DMA_SYNC=yCONFIG_DRM_ROCKCHIP=yCONFIG_ROCKCHIP_DW_HDMI=y


注:使用其它SOC廠商的DRM驅(qū)動(dòng)時(shí),3和4選擇對(duì)應(yīng)SOC廠商目錄下的Makefile、Kconfig和*_defcofig。

B.小知識(shí)點(diǎn):

在defconfig文件中,配置宏的值只有y和m。如果不定義配置宏,使用# CONFIG_* is not set。

前文中提到:Linux DRM包括: DRM core和DRM Driver。DRM core提供基礎(chǔ)框架,為不同SOC DRM driver提供注冊(cè)接口,同時(shí)也給用戶態(tài)提供一個(gè)硬件無關(guān)的ioctl調(diào)用。DRM driver實(shí)現(xiàn)硬件相關(guān)部分,負(fù)責(zé)硬件相關(guān)的ioctl調(diào)用。下篇文章開始介紹RK3399 DRM driver

“Linux DRM內(nèi)核代碼有哪些”的內(nèi)容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業(yè)相關(guān)的知識(shí)可以關(guān)注億速云網(wǎng)站,小編將為大家輸出更多高質(zhì)量的實(shí)用文章!

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI