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)

相关推荐

  • 如何理解python中不可重复的数据集合Set

    技术如何理解python中不可重复的数据集合Set如何理解python中不可重复的数据集合Set,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获

    攻略 2021年12月4日
  • 如何开始优化数据库

    技术如何开始优化数据库如何开始优化数据库,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。对于数据库的调优, 可以从以下几个方面来考虑, 硬件的配置, 网络

    攻略 2021年12月1日
  • PyTorch中的数据并行处理是怎样的

    技术PyTorch中的数据并行处理是怎样的PyTorch中的数据并行处理是怎样的,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。通过 PyTorch 使用

    攻略 2021年12月4日
  • activity流程id存在哪张表(两个activity之间跳转执行什么方法)

    技术Activity的singleTask怎么使用这篇文章主要讲解了“Activity的singleTask怎么使用”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Acti

    攻略 2021年12月18日
  • MySQL外键约束简介

    技术MySQL外键约束简介 MySQL外键约束简介InnoDB是目前MySQL中唯一支持外键的内置存储引擎,所以如果需要外键支持那选择 就不多了(PBXT也有外键支持)。使用外键是有成本的。比如外键通常

    礼包 2021年11月13日
  • 日志删除脚本怎么写

    技术日志删除脚本怎么写这篇文章主要介绍了日志删除脚本怎么写,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。#!/bin/bashfunction clear

    攻略 2021年11月9日