Linux公社论坛

 找回密码
 注册
查看: 155|回复: 0

[教程分享] 在vim上构建ARM Linux内核源码分析环境(上)

[复制链接]

2

主题

0

听众

5

积分

新手上路

Rank: 1

CoolLoser 发表于 2020-1-21 11:23:16 |显示全部楼层

由于版幅,分上下两部分:
1 下载Linux内核源代码
我们以Linux 2.6.30.4为例,
下载之后,创建src目录便于后面操作分析:
mkdir src
cp linux-2.6.30.4.tar.gz ./src
cd src
解压内核:
tar -xzvf linux-2.6.30.4.tar.gz
进入内核目录,查看文件:
cd linux-2.6.30.4
ls
2 安装ctags+cscope2.1 用ctags制作源代码标签
ctags可通过程序代码生成标签,可简单将其理解为索引。索引用于生成函数、变量、类成员、宏等的索引,以管理数据库。利用数据库信息在vim中查找源代码的函数、变量等数据时,索引还可以让搜索变得更加容易。ctags支持的程序语言包括C、C++、汇编等共41种。
若想使用ctags,需要安装,安装使用如下命令:
yum install ctags
通过ctags生成标签的命令是ctags -R,但下载后的Linux源码不仅带有我们要分析的ARM结构,还包括了x86在内的多种结构的代码,如果只使用ctags -R命令生成标签,则生成内核中包含所有结构的源代码标签。这样就需要查找ARM文件,十分繁琐。因此,我们需要在生成标签时将结构限定在ARM中。
幸运的是,内核源码提供用于生产各结构的ctags标签的脚本。
按如下操作确认脚本tags.sh文件是否存在:
ls -l ./scripts/tags.sh
如果输出结果:
-rwxrwxr-x 1 CoolLoser CoolLoser 4119 11  6 17:26 ./scripts/tags.sh
则说明tags.sh脚本存在。可用下列命令来生成ARM标签:
make tags ARCH=arm
这一步骤根据电脑性能不同而需要的时间不同,耐心等待完成即可。完成之后执行以下命令查看生成的tags文件:
ls -alh tags
可以看到如下输出:
-rw-r--r-- 1 root root 89M 11  6 10:39 tags
生成的tags文件有89M。
打开tags文件,如图:
tags文件的结构如下:
tags_name<TAB>file_name<TAB>ex_cmd;<TAB>extension_fields
各域之间由制表符(tab)分隔,含义如下:
域名说明
tag_name符号名
file_name符号所在文件名
ex_cmd在文件中查找符号时,使用vim的ex模式,在此模式中搜索范式的正则表达式
extension_fields符号类型,f=普通C函数,c=类,d=已定义的值2.2 制作cscope标签数据库
ctags很强大,它能构建源代码符号的索引,并通过索引查找符号所在文件,但它也存在局限性,其中具有代表性的几条如下:
(1)只能进行单方向搜索,无法搜索调用的函数。
(2)无法输出调用该函数的函数。
(3)无法输出该函数调用的函数。
cscope与ctags十分相似,但能补充ctags的不足。因此,ctags+cscope组合能够兼具ctags的便利,又能够用cscope补充ctags的局限,算得上是Linux内核代码分析的强大工具。
安装cscope:
yum install cscope
之后,将分析文件的目录保存在cscope.file文件后,用cscope命令即可生成数据库。但Linux内核代码中的内置脚本可自动向./scrits/tags.sh文件构建数据库,因此,用make命令按如下操作就能轻松创建ARM的cscope数据库:
make cscope ARCH=arm
该步骤根据电脑性能不同而需要的时间不同,耐心等待完成即可。完成之后执行以下命令查看生成的文件:
ls -alh cscope*
可以看到如下输出:
-rw-rw-r-- 1 CoolLoser CoolLoser 986K 11  6 17:17 cscope.files
-rw-rw-r-- 1 CoolLoser CoolLoser 179M 11  6 17:25 cscope.out
-rw-rw-r-- 1 CoolLoser CoolLoser  23M 11  6 17:25 cscope.out.in
-rw-rw-r-- 1 CoolLoser CoolLoser 129M 11  6 17:25 cscope.out.po
总共生成了4个文件,文件内容如下表所示:
文件名说明
cscope.files含有要分析的代码文件列表的文件
cscope.out针对函数位置、函数调用、宏、变量、预处理符号的符号交叉引用文件,是实际的数据库
cscope.out.in用-q选项生成数据库时生成的文件,用于提高符号搜索速度的反向索引
cscope.out.po用-q选项生成数据库时生成的文件,用于提高符号搜索速度的反向索引。生成cscope.in、cscope.out.po这2个文件

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

您需要登录后才可以回帖 登录 | 注册

关注Linux公社官方微信,免费领取邀请码。

手机版|Linux公社(LinuxIDC.com)旗下网站【www.linuxidc.net】

GMT+8, 2020-2-24 06:15 , Processed in 0.062004 second(s), 13 queries , Wincache On.

Powered by Discuz! X 3.2

© 2010-2016 Comsenz Inc.

回顶部