source insight 精确导入内核文件

原文链接

1. 环境

目前使用的是 4.00.0120 版本的 source insight

使用 samba 服务,来访问 ubuntu 的代码;

2. 导入工作

2.1 关闭自动添加新文件功能

Options => Preferences => General

将下图的 Add new files automatically 勾去除;

source insight 精确导入内核文件_第1张图片

2.2 完整编译内核,将编译时输出的信息保存到一个文件中

# 将之前的编译清除

make distclean

# 配置自己的单板 xxx 为自定义的名字

make xxx_defconfig

# 编译并记录编译过程

make zImage -j8 2>&1 | tee build_log.txt

 # 将下面脚本命名为 sg.sh;给予 777 权限;

#!/bin/sh
ARCH=arm
MACH=fsl
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}

#   编辑脚本两个变量,ARCH 和 MACH,MACH是平台的名字。如果你用的平台对应 arch/arm/mach-at91 的话,就改成 MACH=at91,以此类推。

# 通过脚本来生成需要导入的文件列表

./sg.sh build_log.txt file_list.txt

2.3 将源码文件导入工程

# 新建 SourceInsight 项目,先不要导入文件,停在如下界面:

source insight 精确导入内核文件_第2张图片

 # 导入文件列表;点击窗口右下角 help 按钮上方的 “add from list” 按钮导入生成的 file_list.txt 文件。 

source insight 精确导入内核文件_第3张图片

到此为止,文件导入完成了。重新打开工程,会提示同步、构建,之后就可以正常的查看源码了。 

你可能感兴趣的:(一时兴起,source,insight)