[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
条评论
作者
Pixiv日榜Top50