千家信息网

Linux DRM内核模块怎么定义

发表于:2026-11-02 作者:千家信息网编辑
千家信息网最后更新 2026年11月02日,本篇内容主要讲解"Linux DRM内核模块怎么定义",感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习"Linux DRM内核模块怎么定义"吧!一、模块定义列举
千家信息网最后更新 2026年11月02日Linux DRM内核模块怎么定义

本篇内容主要讲解"Linux DRM内核模块怎么定义",感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习"Linux DRM内核模块怎么定义"吧!

一、模块定义

列举DRM驱动中的模块定义如下:

module_platform_driver(dw_hdmi_rockchip_pltfm_driver); ## dw_hdmi-rockchip.cmodule_platform_driver(vop_platform_driver);           ## rockchip_vop_reg.cmodule_platform_driver(rockchip_drm_platform_driver);  ## rockchip_drm_drv.c

module_platform_driver宏展开如下:

module_init(dw_hdmi_rockchip_pltfm_driver_init);module_init(vop_platform_driver_init);module_init(rockchip_drm_platform_driver_init);

其中module_init定义为device_initcall(fn),代码如下:

#define module_init(x)  __initcall(x);#define __initcall(fn) device_initcall(fn)#define device_initcall(fn)     __define_initcall(fn, 6)

继续展开,最终定义为:

#1.static initcall_t __initcall_dw_hdmi_rockchip_pltfm_driver_init6 __used \    __attribute__((__section__(".initcall" #id ".init"))) = dw_hdmi_rockchip_pltfm_driver_init; \#2.static initcall_t __initcall_vop_platform_driver_init6 __used \    __attribute__((__section__(".initcall" #id ".init"))) = vop_platform_driver_init; \#3.static initcall_t __initcall_rockchip_drm_platform_driver_init6 __used \    __attribute__((__section__(".initcall" #id ".init"))) = rockchip_drm_platform_driver_init; \

请留意上面定义的函数指针和函数名,下面会介绍其对应的地址和加载顺序。

二、链接位置

使用RockPI 4A Linux内核对应的交叉工具链中的objdump命令获取vmliux中所有段的头信息,命令如下:

/usr/local/gcc-linaro-7.3.1-2018.05-x86_64_aarch74-linux-gnu/bin/aarch74-linux-gnu-objdump -x vmlinux > 1.txt

在1.txt文件中,可以查找到上面三个函数(位于.init.text段)和函数指针(位于.init.data段)的位置,细节如下:

ffffff8009149828 l     F .init.text 0000000000000020 dw_hdmi_rockchip_pltfm_driver_initffffff80091498e8 l     F .init.text 0000000000000020 vop_platform_driver_initffffff8009149908 l     F .init.text 0000000000000024 rockchip_drm_platform_driver_initffffff800920f498 l     O .init.data 0000000000000008 __initcall_dw_hdmi_rockchip_pltfm_driver_init6ffffff800920f4c8 l     O .init.data 0000000000000008 __initcall_vop_platform_driver_init6ffffff800920f4d0 l     O .init.data 0000000000000008 __initcall_rockchip_drm_platform_driver_init6

上面是按地址从小到大的顺序排列,也可以在System.map文件中查看链接顺序。

注:交叉编译工具链里除objdump外,还有很多好用的工具,后续会专门介绍。

三、加载顺序

如果使用同一个宏定义内核模块,Linux内核将按.init.data段中地址从小到大的顺序加载内核模块,即运行对应的.init.text中对应的函数。因此,本文三个内核模块的加载顺序为:

1.dw_hdmi_rockchip_pltfm_driver_init2.vop_platform_driver_init3.rockchip_drm_platform_driver_init

同一等级的内核模块在.init.data段中的位置与Makefile中文件的位置有关。

上面三个文件在drivers/gpu/drm/rockchip/Makefile里的位置如下:

rockchipdrm-y := rockchip_drm_drv.o rockchip_drm_fb.o          ## rockchip_drm_drv.c        ...obj-$(CONFIG_ROCKCHIP_DW_HDMI) += dw_hdmi-rockchip.o           ## dw_hdmi-rockchip.c...obj-$(CONFIG_DRM_ROCKCHIP) += rockchip_vop_reg.o rockchipdrm.o ## rockchip_vop_reg.c

内核编译时,rockchipdrm.o会替换为rockchip_drm_drv.o rockchip_drm_fb.o。因此这三个文件的编译顺序如下:

root@ubuntu:/home/run/code/rockchip-bsp# ./build/mk-kernel.sh rockpi4a Building kernel for rockpi4a board!4.4.154  CHK     include/config/kernel.release  CHK     include/generated/uapi/linux/version.h  CHK     scripts/mod/devicetable-offsets.h  CHK     include/generated/utsrelease.h  CHK     include/generated/timeconst.h  CHK     include/generated/bounds.h  CHK     include/generated/asm-offsets.h  CALL    scripts/checksyscalls.shmake[1]: 'include/generated/vdso-offsets.h' is up to date.  CHK     include/generated/compile.h  CHK     kernel/config_data.h  CC      drivers/gpu/drm/rockchip/dw_hdmi-rockchip.o  ## dw_hdmi-rockchip.c  CC      drivers/gpu/drm/rockchip/rockchip_vop_reg.o  ## rockchip_vop_reg.c  CC      drivers/gpu/drm/rockchip/rockchip_drm_drv.o  ## rockchip_drm_drv.c   LD      drivers/gpu/drm/rockchip/rockchipdrm.o  LD      drivers/gpu/drm/rockchip/built-in.o  LD      drivers/gpu/drm/built-in.o  LD      drivers/gpu/built-in.o  LD      drivers/built-in.o  LINK    vmlinu

到此,相信大家对"Linux DRM内核模块怎么定义"有了更深的了解,不妨来实际操作一番吧!这里是网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!

内核 模块 顺序 位置 函数 文件 三个 地址 工具 编译 从小到大 从小 内容 命令 指针 链接 交叉 学习 实用 更深 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 湖北九亚互联网络科技有限公司 互联网科技有限公司图片 互联网最新的科技有限公司 互联网公司 科技公司 世界互联网领先科技成果 奇酷互联网络科技公司 互联网巨头投资的硬核科技 现代科技和互联网有关系吗 北京三清互联网科技 西藏七维空间互联网科技有限公司 恒银科技与互联网金融 互联网金融科技展 工业互联网等科技实现智能化赋能 南博望互联网科技有限公司 国大互联网教育科技有限公司薪资 沐思想互联网科技有限公司 本届互联网大会上的黑科技 容联科技互联网电商 银川新华互联网科技学校原画 美国五大互联网科技公司市值多少 互联网是第几次科技革命的成果 科技互联网企业 易通互联网络科技有限公司 赫美联合互联网科技 福州新华互联网科技学校 知乎 知域互联网科技有限公司大骗子 如何创新互联网科技 济南有互联网科技公司吗 富国互联网科技002692 河南商务圈互联网科技有限公司
0