[MTK] 解析kernel module(KO)行号

文摘 MediaTek 2022-09-13 阅读:12462

[DESCRIPTION]

 通过地址和symbol 解析kernel module的行号

[SOLUTION]

 1.所需工具:addr2line,objdump

   MTK GAT工具有自带在GAT安装目录:
   D:\gat-win32-x86_64-4\prebuilt\android-sdk\bin\aarch64-linux-android-addr2line.exe

   D:\gat-win32-x86_64-4\prebuilt\android-sdk\bin\aarch64-linux-android-objdump.exe

 2.解析如下kernel log

   PC is at [<ffffffe26e8a05c4>] mtk_dsi_set_LFR+0x38/0x234 [mediatek_drm]

方法1:

Step1:找到模块对应的ko文件

 out_krn\target\product\mgk_xxx\obj\KERNEL_OBJ\kernel-5.10\the_source_code_path_of_target_module\module_name.ko 

 eg:    out_krn\target\product\mgk_xxx\obj\KERNEL_OBJ\kernel-5.10\drivers\gpu\drm\mediatek\mediatek_v2\mediatek-drm.ko

Step2:  利用objdump获取函数符号入口

aarch64-linux-android-objdump.exe -t  mediatek-drm.ko | findstr mtk_dsi_set_LFR
  000000000006458c l F .text 0000000000000218 mtk_dsi_set_LFR

Step3:获取对应函数的执行地址

0x6458c  + 0x38 =  0x645c4

Step4: 用addr2line 获取行号

aarch64-linux-android-addr2line.exe -Cfie mediatek-drm.ko 0x645c4

mtk_dsi_set_LFR
/alps/OfficialRelease/Of/alps/kernel-5.10/drivers/gpu/drm/mediatek/mediatek_v2/mtk_dsi.c:840

方法2:

PC is at [<ffffffe26e8a05c4>] mtk_dsi_set_LFR+0x38/0x234 [mediatek_drm]

step 1: 在DB文件,SYS_MODULES_INFO中找到mediatek_drm函数,虚拟起始地址

mediatek_drm ffffffe26e83c000 ffffffe26e83c000 1437696 491520

module_name text_offset           init.text offset      size        size

step 2: 获取ko offset

0x645c4 = 0xffffffe26e8a05c4 - 0xffffffe26e83c000

step 3: 找到module ko,参考方法1 ,step 1

step 4: 用addr2line 解析行号

D:\>aarch64-linux-android-addr2line.exe -Cfie mediatek-drm.ko 0x645c4
mtk_dsi_set_LFR
/alps/OfficialRelease/Of/alps/kernel-5.10/drivers/gpu/drm/mediatek/mediatek_v2/mtk_dsi.c:840

0条评论

© 2024 芯缘异码. Powered by Typecho