于是写了一个脚本,通过kernel makefile 来生成这些数据库,这样查找就能很精确,一步到位 ^_^
source_file=/tmp/source.list
include_file=/tmp/include.list
output_file=cscope.files
source_file_temp=/tmp/source_file_temp
output_file_temp=/tmp/output.temp
make clean
make ARCH=arm CROSS_COMPILE=arm-eabi- CFLAGS_KERNEL=-H -j4 1>$source_file 2>$include_file
#for test
#source_file=source.list
#include_file=include.list
#output_file=cscope.files
#source_file_temp=/tmp/source_file_temp
# generate the include file
grep "^\.\+\ " $include_file | awk '{print $NF}' | sort -u >$output_file
# generate the source file
grep "\(\<CC\>\|\<AS\>\|LOGO\)" $source_file | awk '{print $NF}' >$source_file_temp
for i in $(cat $source_file_temp)
do
cc_source=${i%.o}.c
as_source=${i%.o}.S
if [ -f $cc_source ]; then
echo $cc_source >>$output_file
else
if [ -f $as_source ]; then
echo $as_source >>$output_file
fi
fi
done
mv $output_file $output_file_temp
for i in $(cat $output_file_temp)
do
if [ -f $i ]; then
echo $i >>$output_file
fi
done
rm $output_file_temp $source_file_temp $source_file $include_file
rm cscope.*out*
cscope -bkq -i $output_file
ctags -L $output_file
使用方法:先配置好.config, 使内核能正常编译。然后,在kernel 的目录下运行该脚本,就会自动生成。
通过这个脚本,还可以生成一个文件列表 output.temp, 可以加快以后更新cscope 数据库的速度。