Linux DRM内核模块怎么定义

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

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

一、模块定义

列举数字版权管理驱动中的模块定义如下:

module _ platform _ driver(dw _ HDMI _ rock chip _ pltfm _ driver);# # dw _ HDMI-摇滚芯片。cmodule _ platform _ driver(VOP _ platform _ driver);# rock chip _ VOP _ reg。cmodule _ platform _ driver(rock chip _ DRM _ platform _ driver);# #摇滚芯片_ DRM _ drv。cmodule _ platform _ driver宏展开如下:

module _ init(dw _ HDMI _ rock chip _ pltfm _ driver _ init);模块初始化(VOP平台驱动初始化);module _ init(rock chip _ DRM _ platform _ driver _ init);其中模块_初始化定义为device_initcall(fn),代码如下:

#定义module _ init(x)_ init调用(x);# define _ _ init call(fn)device _ init call(fn)# define device _ init call(fn)_ define _ init call(fn,6)继续展开,最终定义为:

# 1 .静态init call _ t _ _ init call _ dw _ HDMI _ rock chip _ pltfm _ driver _ init _ 6 _ _ used \u attribute _ _(_ _ section _ _).initcall'#id ' .init’)))=dw _ HDMI _ rock _ chip _ pltfm _ driver _ init;\ # 2 .静态初始化调用_ t _ _初始化调用_ VOP _平台_驱动程序_初始化_ 6 _ _使用了\ _ _属性_ _(_ _ section _ _).initcall'#id ' .init’)))=VOP _平台_驱动_ init\ # 3 .静态init call _ t _ init call _ rock chip _ DRM _ platform _ driver _ init _ 6 _ used \u attribute _ _(_ _ section _ _).initcall'#id ' .init’)))=rock chip _ DRM _ platform _ driver _ init;\请留意上面定义的函数指针和函数名,下面会介绍其对应的地址和加载顺序。

二、链接位置

使用4A Linux内核对应的交叉工具链中的二进制文件分析命令获取vmliux中所有段的头信息,命令如下:

/usr/local/gcc-linaro-7。3 .1-2018.05-x86 _ 64 _ AAR ch 74-Linux-GNU/bin/AAR ch 74-Linux-GNU-obj dump-xvmlinux 1。文本文件(textfile)在1.txt文件中,可以查找到上面三个函数(位于。初始化. text段)和函数指针(位于。init.data段)的位置,细节如下:

8009149828左前。初始化。文本000000000000000020 dw _ HDMI _ rock chip _ pltfm _ driver _ initffffff 80091498 E8 l

nbsp;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内核模块怎么定义”有了更深的了解,不妨来实际操作一番吧!这里是网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!

内容来源网络,如有侵权,联系删除,本文地址:https://www.230890.com/zhan/113133.html

(0)

相关推荐

  • 无权限访问共享文件夹,文件夹共享了但是不能访问权限

    技术无权限访问共享文件夹,文件夹共享了但是不能访问权限1.guest账户开启2.允许Guest用户从网络访问本机点击“开始→运行”无权限访问共享文件夹,在“运行”对话框中输入“GPEDIT.MSC”,打开组策略编辑器,依

    生活 2021年10月29日
  • 如何深度剖析Python语言特点

    技术如何深度剖析Python语言特点这期内容当中小编将会给大家带来有关如何深度剖析Python语言特点,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。这里并不涉及python的特殊规则和

    攻略 2021年10月28日
  • mr on yarn架构

    技术mr on yarn架构 mr on yarn架构提交作业①程序打成jar包,在客户端运行hadoop jar命令,提交job到集群运行job.waitForCompletion(true)中调用J

    礼包 2021年12月3日
  • 树莓派linux内核如何编译

    技术树莓派linux内核如何编译树莓派linux内核如何编译,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。之前我们讲过树莓派交叉编译工具链的安装和配置,今天

    攻略 2021年10月21日
  • 抖音刷真人点赞,免费刷抖音赞?

    技术抖音刷真人点赞,免费刷抖音赞?抖音作品要吸引更多的人,抖音视频内容首先要吸引抖音用户关注。在抖音话题榜热搜榜上会出现很多热度非常高的作品,这种类型的作品自带热搜体质,点赞自然就多。其次,我们可以在抖音刷赞买赞网站上买

    测评 2021年10月26日
  • 从数据库到可视化性能分析python

    技术从数据库到可视化性能分析python本篇内容主要讲解“从数据库到可视化性能分析python”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“从数据库到可视化性能分析pytho

    攻略 2021年11月26日