百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 编程字典 > 正文

在sourceinsight 导入linux内核

toyiye 2024-06-21 12:19 15 浏览 0 评论

想用sourceinsight 看linux源码下载下来的话,会发现导入起来特别麻烦,而且我们只用到特定平台的源码,很多信息是不需要的,所以就搜了下,看看有什么好办法。

一 下载对应版本的linux内核源码

这个没什么好说的,我用的是centos7.4版本,linux内核版本3.10 ,下载地址为:https://github.com/tinalinux/linux-3.10


二 编译

上传linux源码到编译目录上去,然后进入目录,执行命令:

cp /boot/config-3.10.0-1160.31.1.el7.x86_64 ./.config

如果配置不用变动就不用更改什么,如果需要更改执行命令:

make menuconfig

会进入一个字符界面,然后选择或取消相关选项即可。

然后编译下,由于内核比较大,资源准许的情况下建议多核心编译:

make -j8

即上面脚本采用8个线程同时编译。

编译后之后,执行make clean ,因为我们只需要源码,编译是因为有的源码需要生成,还有生成source insight的脚本需要。

三 脚本生成需要导入的文件

脚本:

#! /bin/bash


#Err Macro

SUCCESS=0

ERR_BUILD_BOARD=1

ERR_EXIST_DIR=2

ERR_NO_CFG=3

ERR_TAGFILE_NOT_FOUND=4

ERR_FILE_NOT_EXIST=5

ERR_VERSION_MISMATCH=6

ERR_PROGRAM_PARA=7

ERR_TOOLKIT=8

ERR_CHECK_CONFIG=9

ERR_NO_TARGET_RELEASE=10

ERR_FILE_ALREADY_EXIST=11

ERR_NOT_EXIST=12

ERR_CMD_NOT_FOUNT=13


# Color used in echo

## Text--forground

Echo_Black_Text=`tput setaf 0`

Echo_Red_Text=`tput setaf 1`

Echo_Green_Text=`tput setaf 2`

Echo_Yellow_Text=`tput setaf 3`

Echo_Blue_Text=`tput setaf 4`

Echo_Magenta_Text=`tput setaf 5`

Echo_Cyan_Text=`tput setaf 6`

Echo_White_Text=`tput setaf 7`

Echo_Color_Reset=`tput sgr0`

## background color

Echo_Black_BG=`tput setab 0`

Echo_Red_BG=`tput setab 1`

Echo_Green_BG=`tput setab 2`

Echo_Yellow_BG=`tput setab 3`

Echo_Blue_BG=`tput setab 4`

Echo_Magenta_BG=`tput setab 5`

Echo_Cyan_BG=`tput setab 6`

Echo_White_BG=`tput setab 7`

Echo_Color_Reset=`tput sgr0`


print_help()

{

echo "Usage: "

## $0 $1 $2

## dir_to_be_count result_dir

echo " ${Echo_Green_Text}`basename $0` <Directory to be count> <result output directory>${Echo_Color_Reset}"

echo " `basename $0` --help/-h"

echo

echo "For example:"

echo -e " \t `basename $0` kernel-ZZZ kernelResult"

echo -e " \t this would count the valid source code line number of kernel source in kernel-ZZZ, the result would output to kernelResult"

echo

echo -e " \t `basename $0` uboot-ZZZ ubootResult"

echo -e " \t this would count the valid source code line number of uboot source in uboot-ZZZ, the result would be in ubootResult"

}


if [ $1 = "-h" -o $1 = "--help" ]; then

print_help

exit 0

fi


DIR_TO_BE_COUNT=$1

cd "${DIR_TO_BE_COUNT}" >/dev/null

REALPATH_DIR_TO_BE_COUNT="${PWD}"

cd - >/dev/null

REALPATH_DIR_TO_BE_COUNT="${REALPATH_DIR_TO_BE_COUNT}""/"

RESULT_PRJ=$2


Gen_Tmp="Gen_Tmp"

if [ -d "${Gen_Tmp}" ] ; then

echo "${Gen_Tmp} already existed"

else

mkdir "${Gen_Tmp}"

fi

HeadFileList_All="${Gen_Tmp}"/"HF_All.txt"

HF_NoHost="${Gen_Tmp}"/"HF_NoHost.txt"

HF_NoHost_ND="${Gen_Tmp}"/"HF_NoHost_ND.txt"

HF_AbPath="${Gen_Tmp}"/"HF_AbosultePath.txt"

HF_AbsPath_ND="${Gen_Tmp}"/"HF_AbosultePath_ND.txt"

HF_RelPath="${Gen_Tmp}"/"HF_RelPath.txt"

HF_RelPath_ND="${Gen_Tmp}"/"HF_RelPath_ND.txt"

NotFound="${Gen_Tmp}"/"NotFound.txt"

NotFound_TT="${Gen_Tmp}"/"NotFound_Type2.txt"

Valid_HF="${Gen_Tmp}"/"Valid_HF.txt"

VALID_SRC="${Gen_Tmp}"/"Valid_SRC.txt"

NotFound_Verified="${Gen_Tmp}"/"NotFOund_Valid.txt"

HF_NoPath="${Gen_Tmp}"/"HF_NoPath.txt"

HF_NoPath_ND="${Gen_Tmp}"/"HF_NoPath_ND.txt"

##Source code type: UBOOT KERNEL UNKNOWN

SOURCE_CODE_TYPE=


echo -e "${Echo_Yellow_BG}"

echo -e "${Echo_Color_Reset}"

yes '-' | head -n$(tput cols) | tr -d '\n'

## Check the output directory whether is exist

if [ ! -d "${RESULT_PRJ}" ]; then

mkdir "${RESULT_PRJ}"

else

echo "${Echo_Red_Text}Direcotry $RESULT_PRJ already exist${Echo_Color_Reset}"

exit ${ERR_EXIST_DIR}

fi


## Check the source code directory whether is exist

if [ ! -d "${DIR_TO_BE_COUNT}" ]; then # Not found

echo "${Echo_Red_Text}Direcotry $DIR_TO_BE_COUNT NOT exist${Echo_Color_Reset}"

exit ${ERR_NOT_EXIST}

fi


U_BOOT_ID_FILE=u-boot

KERNEL_ID_FILE=vmlinux

DotConfig=".config"


## Check the source code type: u-boot or kernel

if [ ! -e "${DIR_TO_BE_COUNT}"/"${U_BOOT_ID_FILE}" -a -e "${DIR_TO_BE_COUNT}"/"${KERNEL_ID_FILE}" ]; then

#echo "${Echo_Green_Text} ${DIR_TO_BE_COUNT} source code type is: kernel${Echo_Color_Reset}"

echo "Source code type is: [${Echo_Green_Text}kernel${Echo_Color_Reset}]"

SOURCE_CODE_TYPE="KERNEL"

elif [ -e "${DIR_TO_BE_COUNT}"/"${U_BOOT_ID_FILE}" -a -e "${DIR_TO_BE_COUNT}"/"${U_BOOT_ID_FILE}" ]; then

echo "Source code type is: [${Echo_Green_Text}u-boot${Echo_Color_Reset}]"

SOURCE_CODE_TYPE="UBOOT"

else

echo "Source code type is: [${Echo_Red_Text}UNKNOWN${Echo_Color_Reset}]"

SOURCE_CODE_TYPE="UNKNOWN"

#exit $ERR_FILE_NOT_EXIST

fi

if [ -e "${DIR_TO_BE_COUNT}"/"${DotConfig}" -a "UBOOT" == "${SOURCE_CODE_TYPE}" ]; then

echo "U-boot: [${Echo_Green_Text}has .config${Echo_Color_Reset}]"

SOURCE_CODE_TYPE="UBOOT_WITH_DOTCONFIG"

elif [ ! -e "${DIR_TO_BE_COUNT}"/"${DotConfig}" -a "UBOOT" == "${SOURCE_CODE_TYPE}" ]; then

echo "U-boot: [${Echo_Green_Text}without .config${Echo_Color_Reset}]"

fi


if [ "${SOURCE_CODE_TYPE}" == "UBOOT_WITH_DOTCONFIG" -o "${SOURCE_CODE_TYPE}" == "KERNEL" ]; then

KERNEL_SRC_WORK_DIR=kernel_src_work_dir

KERNEL_HEADER_WORK_DIR=kernel_valid_header_files


KERNEL_VALID_HEADER_FILES=


# Get kernel version

VER=`head -n 3 ${DIR_TO_BE_COUNT}/Makefile | awk -F'=' '{print $2}'`

KERN_VERSION=`echo ${VER} | awk '{print $1}'`

KERN_PATCHLEVEL=`echo ${VER} | awk '{print $2}'`

KERN_SUBLEVEL=`echo ${VER} | awk '{print $3}'`


#echo VER=${VER}

#echo VERSION=[${KERN_VERSION}], KERN_PATCHLEVEL=[${KERN_PATCHLEVEL}], KERN_SUBLEVEL=[${KERN_SUBLEVEL}]

# the source file used to be compiled (.S .s .c)

KERNEL_VALID_SRC_FILES=


KERNEL_VALID_SRC_FILES=`find "${DIR_TO_BE_COUNT}" ! -path "./tools/*" ! -path "./examples/*" \

! -path \*/.built-in.o.cmd -name '.*.o.cmd' -print0 | xargs -0 egrep ":=[[:space:]]+[[:alnum:]]+" \

| grep -v '\-gcc' | grep -v '\-ld' | grep -v ' := gcc' | grep -v ' := g++' \

| awk -F':=' '{print $2}' | grep -v 'scripts' | grep -v 'tools'`


if [ -z "${KERNEL_VALID_SRC_FILES}" ] ; then

echo "${Echo_Red_Text}Old kernel found! kernel version=[${KERN_VERSION}.${KERN_PATCHLEVEL}.${KERN_SUBLEVEL}]${Echo_Color_Reset}"

KERNEL_VALID_SRC_FILES=`find "${DIR_TO_BE_COUNT}" ! -path "./tools/*" ! -path "./examples/*" \

! -path \*/.built-in.o.cmd -name '.*.o.cmd' -print0 | xargs -0 egrep ":=[[:space:]]+[[:alnum:]]+" \

| awk '{print $NF}' | sed '/^.*.o$/d' | sed '/--end-group/d'`

fi


#######################################################################

# .S .c .s source file list

#######################################################################


## copy the valid files

# file not found in dir_to_be_count

File_Not_Exist=

Index=0

for files in `echo "${KERNEL_VALID_SRC_FILES}" | sed -e 's/\ /\n/g'`; do

DIR_OF_FILES=`dirname "${files}"`

#echo "${KERNEL_VALID_SRC_FILES}" dirnames=${DIR_OF_FILES}

if [ ! -e "${DIR_TO_BE_COUNT}"/"${files}" ]; then

File_Not_Exist+="${DIR_TO_BE_COUNT}"/"${files}"

File_Not_Exist+=" "

#echo "File not found: ${Echo_Red_Text}"${DIR_TO_BE_COUNT}"/"${files}" ${Echo_Color_Reset}"

continue

fi

echo "${files}" >> "${VALID_SRC}"

((Index++))

echo -e -n "\rSource file[.c .S .s] Index:\t"

echo -e -n "[${Echo_Cyan_Text}${Index}${Echo_Color_Reset}]"

done


if [ -n "${File_Not_Exist}" ]; then

#echo "${Echo_Red_Text}Some files not found, please check:${Echo_Color_Reset}"

echo "${File_Not_Exist}" | sed -e 's/\ /\n/g'

fi


#######################################################################

# .h header file copy

#######################################################################


# file not found in dir_to_be_count

File_Not_Exist=

Index=0


# Find all the header files, include the host PCs, which is start with /usr

find "${DIR_TO_BE_COUNT}" -name .*.o.cmd -print0 | xargs -0 grep '\.h' | awk '{for(i=2;i<=NF;i++){printf "%s ", $i}; printf "\n"}' \

| grep -v ':=' | sed -e 's/\$.*include/include/g' -e 's/\.h.*$/\.h/g' > "${HeadFileList_All}"

# Exclude the hostPCs header file. remain the toolchain libc header, linux kernel headerfiles

grep -v '^\/usr' "${HeadFileList_All}" > "${HF_NoHost}"

awk '!seen[$0]++' "${HF_NoHost}" > "${HF_NoHost_ND}"


## Type 1: absolutely path

# Sort the header files with absolutely path. Contain the toolchain libc header files, linux kenrel header files

grep '^\/' "${HF_NoHost}" > "${HF_AbPath}"

awk '!seen[$0]++' "${HF_AbPath}" > "${HF_AbsPath_ND}"

## Type 2: relative path

# Sort the header files with relative path, only the linux kernel header files

grep -v '^\/' "${HF_NoHost}" > "${HF_RelPath}"

awk '!seen[$0]++' "${HF_RelPath}" > "${HF_RelPath_ND}"


## Handle the Type 2: relative path

File_Not_Exist=

KERNEL_VALID_HEADER_FILES=

KERNEL_VALID_HEADER_FILES=`cat "${HF_RelPath_ND}"`

echo; yes '-' | head -n$(tput cols) | tr -d '\n'

echo "Header file list in relative path mode"

for files in `echo "${KERNEL_VALID_HEADER_FILES}" | sed -e 's/\ /\n/g'`; do

DIR_OF_FILES=`dirname "${files}"`

if [ ! -e "${DIR_TO_BE_COUNT}"/"${files}" ]; then

File_Not_Exist+="${DIR_TO_BE_COUNT}"/"${files}"

File_Not_Exist+=" "

continue

fi

echo "${files}" >> "${Valid_HF}"

((Index++))

echo -e -n "\rHeader file[.h] Index:\t"

echo -e -n "\t[${Echo_Cyan_Text}${Index}${Echo_Color_Reset}]"

done


if [ -n "${File_Not_Exist}" ]; then

#echo "${Echo_Red_Text}Some files not found, please check:${Echo_Color_Reset}"

echo "${File_Not_Exist}" | sed -e 's/\ /\n/g' >> "${NotFound_TT}"

fi

## Handle the Type 1: absolutely path

File_Not_Exist=

DIR_OF_FILES=

KERNEL_VALID_HEADER_FILES=

KERNEL_VALID_HEADER_FILES=`cat "${HF_AbsPath_ND}"`


## For some dir is symbol link

cd "${DIR_TO_BE_COUNT}" && PATH_OF_CODE_DIR=`echo "${PWD}"` && cd - > /dev/null

#echo PATH_OF_CODE_DIR is "${PATH_OF_CODE_DIR}"


echo

yes '-' | head -n$(tput cols) | tr -d '\n'

echo "Header file list in absolutely path mode"

for files in `echo "${KERNEL_VALID_HEADER_FILES}" | sed -e 's/\ /\n/g'`; do

## SubType 1: header files in kernel code

if [ -n `echo "${files}" | grep "${PATH_OF_CODE_DIR}"` ]; then

# files --> DIR_OF_FILES

#/home/XXX/YYY/kernel-ZZZ/include/XXX.h --> /kernel-ZZZ/include/XXX.h

DIR_OF_FILES=`echo "${files}" | sed -r "s#${PATH_OF_CODE_DIR}##"`


#/kernel-ZZZ/include/XXX.h --> /kernel-ZZZ/include/

DIR_OF_FILES=`dirname "${DIR_OF_FILES}"`


#echo DIR_OF_FILES is "${DIR_OF_FILES}"

if [ ! -e "${files}" ]; then

File_Not_Exist+="${files}"

File_Not_Exist+=" "

#echo "File not found: ${Echo_Red_Text}"${DIR_TO_BE_COUNT}"/"${files}" ${Echo_Color_Reset}"

continue

fi

file_rel=`echo "${files}" | sed "s@^${REALPATH_DIR_TO_BE_COUNT}@@"`

#echo "${file_rel}"

echo "${file_rel}" >> "${Valid_HF}"

((Index++))

echo -e -n "\rHeader file[.h] Index:\t"

echo -e -n "\t[${Echo_Cyan_Text}${Index}${Echo_Color_Reset}]"

## Subtype 2: header file comes from the toolchain libc, we just skip it

else

continue

fi

done


if [ -n "${File_Not_Exist}" ]; then

echo "${Echo_Red_Text}Some files not found, please check:${Echo_Color_Reset}"

echo "${File_Not_Exist}" | sed -e 's/\ /\n/g' >> "${NotFound}"

fi


## See whether the file is existed

if [ -f "${NotFound_Verified}" ] ; then

echo "Starting verify type2" >> "${NotFound_Verified}"

for files in `cat "${NotFound_TT}"`; do

filename=`echo "${files}" | sed 's/^.*\///'`

#echo "${filename}"

Exist=`grep "${filename}" "${Valid_HF}"`

if [ -z "${Exist}" ] ; then

echo "${files}" >> "${NotFound_Verified}"

fi

done

echo "Done verify type2" >> "${NotFound_Verified}"

echo "Done verify type2"

fi

## See whether the file is existed

if [ -f "${NotFound}" ] ; then

for files in `cat "${NotFound}"`; do

filename=`echo "${files}" | sed 's/^.*\///'`

Exist=`grep "${filename}" "${Valid_HF}"`

if [ -z "${Exist}" ] ; then

echo "${files}" >> "${NotFound_Verified}"

fi

done

echo "Done verify type1"

fi


if [ -e "${VALID_SRC}" -a -e "${Valid_HF}" ] ; then

cat "${VALID_SRC}" "${Valid_HF}" > valid_filelist.txt

fi

sed "s@^@${REALPATH_DIR_TO_BE_COUNT}@" -i valid_filelist.txt


echo

for files in `cat valid_filelist.txt`; do

if [ ! -e "${files}" ] ; then

NotFoundFileName=`echo "${files}" | sed 's/^.*\///'`

sed 's@${files}@@' -i valid_filelist.txt

SearchMissFile=`find "${REALPATH_DIR_TO_BE_COUNT}" -name "${NotFoundFileName}"`

if [ -n "${SearchMissFile}" ] ; then

echo "${SearchMissFile}" >> valid_filelist.txt

else

## exclude the libc header files

if [ "stdarg.h" != "${NotFoundFileName}" ] ; then

echo "Not found file: ${files}"

fi

fi

fi

done

fi


if [ "${SOURCE_CODE_TYPE}" = "UBOOT" ]; then

PATH_OF_CODE_DIR=

UBOOT_VALID_HEADER_FILES=

UBOOT_SRC_WORK_DIR=uboot_src_work_dir

UBOOT_HEADER_WORK_DIR=uboot_valid_header_files


## For some dir is symbol link

cd "${DIR_TO_BE_COUNT}" && PATH_OF_CODE_DIR=`echo "${PWD}"` && cd - > /dev/null


# the source file used to be compiled (.S .s .c), exclude the tools and examples directories

UBOOT_VALID_SRC_FILES=

UBOOT_VALID_SRC_FILES=`cd "${DIR_TO_BE_COUNT}" && find -name .depend ! -path "./tools/*" ! -path "./examples/*" \

| xargs grep ':' | sed -e 's/.depend.*: //g' | sed -e 's/\ .*$//' && cd - >/dev/null`


#######################################################################

# .S .c .s source file

#######################################################################

# file not found in dir_to_be_count

File_Not_Exist=

Index=0

for files in `echo "${UBOOT_VALID_SRC_FILES}" | sed -e 's/\ /\n/g'`; do

DIR_OF_FILES=`dirname "${files}"`

if [ ! -e "${DIR_TO_BE_COUNT}"/"${files}" ]; then

File_Not_Exist+="${DIR_TO_BE_COUNT}"/"${files}"

File_Not_Exist+=" "

continue

fi

echo "${files}" >> "${VALID_SRC}"

((Index++))

echo -e -n "\rSource file[.c .S .s] Index: "

echo -e -n "\t[${Echo_Cyan_Text}${Index}${Echo_Color_Reset}]"

done

echo


## the depend is seperate to 2 line in .depend.XXX, eg:

# a.o: \

# c.c

# So we should remove the c.c

Src_In_Next_Line=`find "${DIR_TO_BE_COUNT}" -name .depend | xargs egrep ':[[:space:]]+\\#39; -A 1 -h | awk 'BEGIN{RS="--" } {print $1 $3}' | sed 's/o:.*\.//' | sed 's/spl//'`


for files in `echo "${Src_In_Next_Line}" | sed -e 's/\ /\n/g'`; do

if [ ! -e "${files}" ] ; then

echo "${files}" >> "${VALID_SRC}"

else

echo "Not found:${files}"

fi

done


## Handler the spl files, for these files the .c file path in .depend add a spl, lets remove it

for files in `echo "${File_Not_Exist}" | sed -e 's/\ /\n/g'`; do

if [ ! -e "${files}" ] ; then

#echo ccc

NotFound_Remove_SPL=`echo "${files}" | sed 's@spl@@'`

if [ -e "${NotFound_Remove_SPL}" ] ; then

echo "${NotFound_Remove_SPL}" >> "${VALID_SRC}"

File_Not_Exist=`echo "${File_Not_Exist}" | sed "s@${files}@@"`

fi

fi

done


if [ -n "${File_Not_Exist}" ]; then

echo

echo "${Echo_Red_Text}Check file status${Echo_Color_Reset}"

for files in `echo "${File_Not_Exist}" | sed -e 's/\ /\n/g'`; do

## for the line like these: /home/github/BBB/u-boot/./spl/arch/arm/cpu/armv7/\

End_With_Slash=`echo "${files: -1}"`

if [ -z "${End_With_Slash}" ] ; then

echo "${files}"

#echo "${File_Not_Exist}" | sed -e 's/\ /\n/g' #| tr -d '\n' #sed 's/^$//'

fi

done

fi


#######################################################################

# .h header file copy

#######################################################################

# file not found in dir_to_be_count

File_Not_Exist=

Index=0


# Find all the header files, include the host PCs, which is start with /usr

find "${DIR_TO_BE_COUNT}" -name .depend ! -path "./tools/*" ! -path "./examples/*" | xargs sed 's/^.*:\ .*\.[c|s|S]//' | tr -d '\\' | sed 's/\ /\n/g'\

> "${HeadFileList_All}"

# Remove the : line

sed -i '/:/d' "${HeadFileList_All}"

# Remove blank lines

sed '/^$/d' -i "${HeadFileList_All}"

# Exclude the hostPCs header file. remain the toolchain libc header, linux uboot headerfiles

grep -v '^\/usr' "${HeadFileList_All}" > "${HF_NoHost}"

awk '!seen[$0]++' "${HF_NoHost}" > "${HF_NoHost_ND}"


## Type 1: absolutely path

# Sort the header files with absolutely path. Contain the toolchain libc header files, linux kenrel header files

grep '^\/' "${HF_NoHost}" > "${HF_AbPath}"

awk '!seen[$0]++' "${HF_AbPath}" > "${HF_AbsPath_ND}"

## Type 2: no path file

# Sort the header files with no path file, only the linux uboot header files

grep -v '^\/' "${HF_NoHost}" > "${HF_NoPath}"

awk '!seen[$0]++' "${HF_NoPath}" > "${HF_NoPath_ND}"


## Handle the Type 2: No path file

File_Not_Exist=

PATH_OF_NOPATH_FILE=

UBOOT_VALID_HEADER_FILES=

UBOOT_VALID_HEADER_FILES=`cat "${HF_NoPath_ND}"`

for files in `echo "${UBOOT_VALID_HEADER_FILES}" | sed -e 's/\ /\n/g'`; do

#echo files is ${files}

cd "${DIR_TO_BE_COUNT}" && \

PATH_OF_NOPATH_FILE=`find -name .depend.* | xargs grep -w ${files} -nIR | \

sed "s@\.depend.*${files}@${files}@" | \

tr -d '\\' 2>/dev/null` \

&& cd - > /dev/null


#echo PATH_OF_NOPATH_FILE is $PATH_OF_NOPATH_FILE

PATH_OF_NOPATH_FILE=`echo ${PATH_OF_NOPATH_FILE} | awk -F' ' '{print $1}'`

#echo PATH_OF_NOPATH_FILE is $PATH_OF_NOPATH_FILE


DIR_OF_FILES=`dirname "${PATH_OF_NOPATH_FILE}"`

if [ ! -e ${DIR_TO_BE_COUNT}/${PATH_OF_NOPATH_FILE} ]; then

File_Not_Exist+=${DIR_TO_BE_COUNT}/${PATH_OF_NOPATH_FILE}

File_Not_Exist+=" "

#echo "${DIR_TO_BE_COUNT}/${PATH_OF_NOPATH_FILE} not found!"

continue

fi

echo "${files}" >> "${Valid_HF}"

((Index++))

echo -e -n "\rHeader file[.h] Index: "

echo -e -n "[${Echo_Cyan_Text}${Index}${Echo_Color_Reset}]"

done

#echo -e "${Echo_Green_Text}...Done${Echo_Color_Reset}"

#echo -e "\nType 2 item number: ${Index}"


if [ -n "${File_Not_Exist}" ]; then

#echo "${Echo_Red_Text}Some files not found, see file: "${NotFound_TT}"${Echo_Color_Reset}"

echo "${File_Not_Exist}" | sed -e 's/\ /\n/g' >> "${NotFound_TT}"

fi


## Handle the Type 1: absolutely path

File_Not_Exist=

DIR_OF_FILES=

UBOOT_VALID_HEADER_FILES=

UBOOT_VALID_HEADER_FILES=`cat "${HF_AbsPath_ND}"`


## For some dir is symbol link

cd "${DIR_TO_BE_COUNT}" && PATH_OF_CODE_DIR=`echo "${PWD}"` && cd - > /dev/null

#echo PATH_OF_CODE_DIR is "${PATH_OF_CODE_DIR}"


for files in `echo "${UBOOT_VALID_HEADER_FILES}" | sed -e 's/\ /\n/g'`; do

## SubType 1: header files in uboot code

if [ -n `echo "${files}" | grep "${PATH_OF_CODE_DIR}"` ]; then

# files --> DIR_OF_FILES

#/home/XXX/YYY/uboot-ZZZ/include/XXX.h --> /uboot-ZZZ/include/XXX.h

DIR_OF_FILES=`echo "${files}" | sed -r "s#${PATH_OF_CODE_DIR}##"`


#/uboot-ZZZ/include/XXX.h --> /uboot-ZZZ/include/

DIR_OF_FILES=`dirname "${DIR_OF_FILES}"`


#echo DIR_OF_FILES is "${DIR_OF_FILES}"

if [ ! -e "${files}" ]; then

File_Not_Exist+="${files}"

File_Not_Exist+=" "

#echo "File not found: ${Echo_Red_Text}"${DIR_TO_BE_COUNT}"/"${files}" ${Echo_Color_Reset}"

continue

fi


file_rel=`echo "${files}" | sed "s@^${REALPATH_DIR_TO_BE_COUNT}@@"`

echo "${file_rel}" >> "${Valid_HF}"

((Index++))

echo -e -n "\rType 1 header file[.h], item index: "

echo -e -n "[${Echo_Cyan_Text}${Index}${Echo_Color_Reset}]"

## Subtype 2: header file comes from the toolchain libc, we just skip it

else

continue

fi

done

#echo -e "${Echo_Green_Text}.\tDone${Echo_Color_Reset}"


if [ -n "${File_Not_Exist}" ]; then

echo "${Echo_Red_Text}Some files not found, please check:${Echo_Color_Reset}"

echo "${File_Not_Exist}" | sed -e 's/\ /\n/g' > "${NotFound}"

fi


fi

############################################################################

### Generate the filelist

############################################################################

sed "s@^${REALPATH_DIR_TO_BE_COUNT}@@" -i ${Valid_HF}

sed "s@^${REALPATH_DIR_TO_BE_COUNT}@@" -i ${VALID_SRC}

if [ -e "${VALID_SRC}" -a -e "${Valid_HF}" ] ; then

cat "${VALID_SRC}" "${Valid_HF}" > valid_filelist.txt

fi

sed "s@^@${REALPATH_DIR_TO_BE_COUNT}@" -i valid_filelist.txt


for files in `cat valid_filelist.txt`; do

if [ ! -e "${files}" ] ; then

NotFoundFileName=`echo "${files}" | sed 's/^.*\///'`

sed 's@${files}@@' -i valid_filelist.txt

SearchMissFile=`find "${REALPATH_DIR_TO_BE_COUNT}" -name "${NotFoundFileName}"`

if [ -n "${SearchMissFile}" ] ; then

echo "${SearchMissFile}" >> valid_filelist.txt

else

## Remove the not found files

#echo "Not found file: ${files}"

sed "s@${files}@@" -i valid_filelist.txt

sed '/^$/d' -i valid_filelist.txt

fi

fi

done

## ./ --> /, // --> /

sed "s@\./@/@" -i valid_filelist.txt

sed "s@//@/@" -i valid_filelist.txt


for files in `cat valid_filelist.txt`; do

if [ ! -e "${files}" ] ; then

sed "s@${files}@@" -i valid_filelist.txt

sed '/^$/d' -i valid_filelist.txt

fi

done

sed "s@^${REALPATH_DIR_TO_BE_COUNT}@@" valid_filelist.txt > valid_filelist_NoPath.txt

cp valid_filelist_NoPath.txt FileList_SourceInsight.txt

cp valid_filelist.txt FileList_understand.txt


#sed "s@^@${REALPATH_DIR_TO_BE_COUNT}@" -i valid_filelist.txt

cat "${Valid_HF}" | sed "s@^@${REALPATH_DIR_TO_BE_COUNT}@" | sed 's/^/<F N="/' | sed 's/$/"\/>/' | sed 's/^/\t\t\t/' > valid_hf_se.txt

cat "${VALID_SRC}" | sed "s@^@${REALPATH_DIR_TO_BE_COUNT}@" | sed 's/^/<F N="/' | sed 's/$/"\/>/'| sed 's/^/\t\t\t/' > valid_src_se.txt

sed "s@\./@/@" -i valid_hf_se.txt

sed "s@//@/@" -i valid_hf_se.txt

sed "s@\./@/@" -i valid_src_se.txt

sed "s@//@/@" -i valid_src_se.txt


cp misc/sample.vpj .

cp misc/sample.vpw .

## !!TODO!! Add the dts file

## Append to project file

sed '/<!--SRCFILES-->/r valid_src_se.txt' -i sample.vpj

sed '/<!--HEADFILES-->/r valid_hf_se.txt' -i sample.vpj

sed "s/PRJNAME/${RESULT_PRJ}/" -i sample.vpj

sed "s/PRJNAME/${RESULT_PRJ}/" -i sample.vpw

mkdir "${RESULT_PRJ}"/"${RESULT_PRJ}"

mv sample.vpj "${RESULT_PRJ}"/"${RESULT_PRJ}"/"${RESULT_PRJ}".vpj

mv sample.vpw "${RESULT_PRJ}"/"${RESULT_PRJ}"/"${RESULT_PRJ}".vpw

mv valid*.txt "${Gen_Tmp}"

mv FileList_understand.txt "${RESULT_PRJ}"

mv FileList_SourceInsight.txt "${RESULT_PRJ}"

rm ."${Gen_Tmp}" -rf 2>/dev/null && mv "${Gen_Tmp}" ."${Gen_Tmp}"

sync


if [ "${SOURCE_CODE_TYPE}" = "UNKNOWN" ]; then

echo UNKNOWN

fi


echo -e "${Echo_Yellow_BG}"

echo -e "${Echo_Color_Reset}"

yes '-' | head -n$(tput cols) | tr -d '\n'


exit 0

执行命令:

./gen.sh ./linux-3.10/ ./output

生成output目录以及相关文件。

生成的文件为:FileList_SourceInsight.txt是我们需要的


四. 导入source insight

新建工程,导入选择 ”Add from list"


注意工程文件的位置要放在源码主目录,FileList_SourceInsight.txt也要存在这个目录,等完毕后,close即可。

相关推荐

为何越来越多的编程语言使用JSON(为什么编程)

JSON是JavascriptObjectNotation的缩写,意思是Javascript对象表示法,是一种易于人类阅读和对编程友好的文本数据传递方法,是JavaScript语言规范定义的一个子...

何时在数据库中使用 JSON(数据库用json格式存储)

在本文中,您将了解何时应考虑将JSON数据类型添加到表中以及何时应避免使用它们。每天?分享?最新?软件?开发?,Devops,敏捷?,测试?以及?项目?管理?最新?,最热门?的?文章?,每天?花?...

MySQL 从零开始:05 数据类型(mysql数据类型有哪些,并举例)

前面的讲解中已经接触到了表的创建,表的创建是对字段的声明,比如:上述语句声明了字段的名称、类型、所占空间、默认值和是否可以为空等信息。其中的int、varchar、char和decimal都...

JSON对象花样进阶(json格式对象)

一、引言在现代Web开发中,JSON(JavaScriptObjectNotation)已经成为数据交换的标准格式。无论是从前端向后端发送数据,还是从后端接收数据,JSON都是不可或缺的一部分。...

深入理解 JSON 和 Form-data(json和formdata提交区别)

在讨论现代网络开发与API设计的语境下,理解客户端和服务器间如何有效且可靠地交换数据变得尤为关键。这里,特别值得关注的是两种主流数据格式:...

JSON 语法(json 语法 priority)

JSON语法是JavaScript语法的子集。JSON语法规则JSON语法是JavaScript对象表示法语法的子集。数据在名称/值对中数据由逗号分隔花括号保存对象方括号保存数组JS...

JSON语法详解(json的语法规则)

JSON语法规则JSON语法是JavaScript对象表示法语法的子集。数据在名称/值对中数据由逗号分隔大括号保存对象中括号保存数组注意:json的key是字符串,且必须是双引号,不能是单引号...

MySQL JSON数据类型操作(mysql的json)

概述mysql自5.7.8版本开始,就支持了json结构的数据存储和查询,这表明了mysql也在不断的学习和增加nosql数据库的有点。但mysql毕竟是关系型数据库,在处理json这种非结构化的数据...

JSON的数据模式(json数据格式示例)

像XML模式一样,JSON数据格式也有Schema,这是一个基于JSON格式的规范。JSON模式也以JSON格式编写。它用于验证JSON数据。JSON模式示例以下代码显示了基本的JSON模式。{"...

前端学习——JSON格式详解(后端json格式)

JSON(JavaScriptObjectNotation)是一种轻量级的数据交换格式。易于人阅读和编写。同时也易于机器解析和生成。它基于JavaScriptProgrammingLa...

什么是 JSON:详解 JSON 及其优势(什么叫json)

现在程序员还有谁不知道JSON吗?无论对于前端还是后端,JSON都是一种常见的数据格式。那么JSON到底是什么呢?JSON的定义...

PostgreSQL JSON 类型:处理结构化数据

PostgreSQL提供JSON类型,以存储结构化数据。JSON是一种开放的数据格式,可用于存储各种类型的值。什么是JSON类型?JSON类型表示JSON(JavaScriptO...

JavaScript:JSON、三种包装类(javascript 包)

JOSN:我们希望可以将一个对象在不同的语言中进行传递,以达到通信的目的,最佳方式就是将一个对象转换为字符串的形式JSON(JavaScriptObjectNotation)-JS的对象表示法...

Python数据分析 只要1分钟 教你玩转JSON 全程干货

Json简介:Json,全名JavaScriptObjectNotation,JSON(JavaScriptObjectNotation(记号、标记))是一种轻量级的数据交换格式。它基于J...

比较一下JSON与XML两种数据格式?(json和xml哪个好)

JSON(JavaScriptObjectNotation)和XML(eXtensibleMarkupLanguage)是在日常开发中比较常用的两种数据格式,它们主要的作用就是用来进行数据的传...

取消回复欢迎 发表评论:

请填写验证码