本文以RockPI 4A DRM驱动解析内核模块定义、链接位置和加载顺序。
一、模块定义
列举DRM驱动中的模块定义如下:
module_platform_driver(dw_hdmi_rockchip_pltfm_driver); ## dw_hdmi-rockchip.c
module_platform_driver(vop_platform_driver); ## rockchip_vop_reg.c
module_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" #i