SourceInsight精确导入只与平台相关的源码

#!/bin/sh
#注意:该段代码只能在工程目录中运行
#STEP1:编译内核,将编译时的输出信息保存到文件中
#      make ARCH=arm > build_log.txt
#
#STEP2:修改脚本变量&运行脚本
#     ARCH=arm     -->改成相应平台
#     MACH=omap2   -->改成相应平台
# 	./sg.sh build_log.txt file_list.txt	
#STEP3:SourceInsight Project->Add and Remove Project File->Add from List 添加 file_list.txt
#
ARCH=arm
MACH=omap2
FILE_IN=$1
FILE_OUT=$2
 
# .c
SOURCE_LIST=""
 
# generated file list
FILE_LIST=""
 
# nest depth for function get_includes()
NEST_DTPTH=0
 
# recursive function, used to get included files from files.
# result is stored in FILE_LIST
# $1 : file list, e.g. "fs/ext4/file.c fs/ext4/fsync.c"
get_includes()
{
	local includes
	local file
 
	for file in $1
	do
		if [ ! -e ${file} ]; then
			continue
		fi
 
		if echo "${FILE_LIST}" | grep -E ${file} > /dev/null; then
			continue
		fi
		FILE_LIST="${FILE_LIST} ${file}"
 
		NEST_DTPTH=$((NEST_DTPTH+1))
		echo "<${NEST_DTPTH} : ${file}"
 
		includes=$(										\
			grep -E -H '^#include' ${file} |				\
			sed -r \
				-e 's@^.*<(acpi/.*)>@include/\1@' 		\
				-e 's@^.*<(asm-generic/.*)>@include/\1@'\
				-e 's@^.*<(config/.*)>@include/\1@' 	\
				-e 's@^.*<(crypto/.*)>@include/\1@' 	\
				-e 's@^.*<(drm/.*)>@include/\1@' 		\
				-e 's@^.*<(generated/.*)>@include/\1@' 	\
				-e 's@^.*<(keys/.*)>@include/\1@' 		\
				-e 's@^.*<(linux/.*)>@include/\1@' 		\
				-e 's@^.*<(math-emu/.*)>@include/\1@' 	\
				-e 's@^.*<(media/.*)>@include/\1@' 		\
				-e 's@^.*<(misc/.*)>@include/\1@' 		\
				-e 's@^.*<(mtd/.*)>@include/\1@' 		\
				-e 's@^.*<(net/.*)>@include/\1@' 		\
				-e 's@^.*<(pcmcia/.*)>@include/\1@' 	\
				-e 's@^.*<(rdma/.*)>@include/\1@' 		\
				-e 's@^.*<(rxrpc/.*)>@include/\1@' 		\
				-e 's@^.*<(scsi/.*)>@include/\1@' 		\
				-e 's@^.*<(sound/.*)>@include/\1@' 		\
				-e 's@^.*<(target/.*)>@include/\1@' 	\
				-e 's@^.*<(trace/.*)>@include/\1@' 		\
				-e 's@^.*<(uapi/.*)>@include/\1@' 		\
				-e 's@^.*<(video/.*)>@include/\1@' 		\
				-e 's@^.*<(xen/.*)>@include/\1@' 		\
				-e "s@^.*<(asm/.*)>@arch/${ARCH}/include/\1 arch/${ARCH}/include/generated/\1@"	\
				-e "s@^.*<(mach/.*)>@arch/${ARCH}/mach-${MACH}/include/\1@"	\
				-e 's@(^.*/)[^/]+\.c.*\"(.*)\"@\1\2@' 	\
				-e 's@/\*.*@@' 							\
				-e 's@^.*\#include.*$@@'  				\
				-e 's@^@ @' |							\
			sort | 										\
			uniq |										\
			tr -d '\n' | 								\
			tr -d '\r'									\
		)
 
		if [ -n "${includes}" ]; then
			get_includes "${includes}"
		fi
		echo ">${NEST_DTPTH}) : ${file}"
		NEST_DTPTH=$((NEST_DTPTH-1))
	done
}
 
# get *.c from kernel build log
SOURCE_LIST=$(						\
	grep -E '^\s*CC' ${FILE_IN} |	\
	sed -r 							\
		-e 's/^\s*CC\s*/ /'			\
		-e 's/\.o/\.c/'			|	\
	tr -d '\n' | 					\
	tr -d '\r'						\
)
echo ${SOURCE_LIST}
get_includes "${SOURCE_LIST}"
 
FILE_LIST=$(echo "${FILE_LIST}" | sed -r -e 's/\s/\r\n/g' )
 
echo "${FILE_LIST}" > ${FILE_OUT}

 

### 如何在 Source Insight导入源码 为了成功地在 Source Insight导入源码,可以遵循以下指南: #### 准备工作 确保已经安装并启动了最新版本的 Source Insight 应用程序。 #### 创建新项目 通过菜单栏中的 `File` -> `New Project...` 来创建一个新的工程文件。这一步骤会引导进入向导界面,在这里可以选择要分析的语言以及指定项目的根目录位置[^3]。 #### 添加文件到项目 利用 `Project` 菜单下的选项来管理所需加入的源代码文件或整个文件夹。对于大型项目来说,推荐采用通配符模式批量添加多个相同类型的文件,比如 *.cpp 或者 *.java 等等[^4]。 #### 配置索引设置 前往 `Tools` -> `Options` 下调整各种参数以优化性能表现,特别是针对较大规模的项目而言非常重要。例如,可以通过设定忽略某些特定路径下的内容从而加快处理速度;也可以自定义关键字高亮显示风格以便于阅读理解[^5]。 #### 开始解析过程 当一切准备就绪之后,点击工具条上的 “Reparse All” 按钮让软件重新扫描所有已加载进去的数据,并建立内部数据库用于后续查询操作。此时可能需要等待一段时间才能完成初次构建动作,具体取决于计算机硬件配置和个人所选参数的影响程度[^6]。 ```python # 示例 Python 代码片段展示如何调用外部命令执行上述步骤 import subprocess def start_source_insight(): result = subprocess.run(['sourceinsight', '-newproject'], capture_output=True) print(result.stdout.decode()) start_source_insight() ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值