配置Samba服务
1、安装 Samba:
sudo apt-get install samba
2、编辑 samba 配置文件 :
sudo vi /etc/samba/smb.conf
在文件末尾输入以下配置:
3、执行如下命令启动 samba 服务:
sudo service smbd restart
sudo ufw allow samba
/4、根据自己的情况,添加 samba 账户:
sudo smbpasswd -a yourname
5、在 Windows 系统上右击 此电脑 ------->映射网络驱动器 :
share为配置文件中方括号的名字,然后输入刚刚配置的Samba账户和密码登录即可。
到此便可以通过Samba服务进行linux和Windows的文件共享
交叉编译内核源码
用 SourceInsight 查看 Linux Kernel 源码,但导入源码时会遇到一些问题:
- 如果把整个源码树都导入进去,进行文件同步时候会花费较长时间
- 查看符号定义的时候,会发现有大量重复定义,很难找到正确的位置
- 如果手动导入只和该硬件平台相关的源码,工作量太大
此处提供了一个方法,可用脚本生成只和该硬件平台相关的源码的文件列表,然后通过该文件列表,将相应文件导入 SourceInsight 。
1、完整编译内核,将编译时输出的信息保存到一个文件中,对于已经编译过的内核源码,可以使用make distclean重新来过。
make ARCH=arm > build_log.txt
build_log.txt文件中的内容大致如下:
其中的每个.o文件对应一个.c文件,这个.c文件就是我们需要的文件。
只要把编译时打印的信息保存到log里,然后通过分析log来提取所有.c文件以及.c文件里包含的头文件,那么就可以获得我们需要的所有内核源码了!!!
2、新建getKernelSourceCode.sh脚本文件,然后输入以下指令:
./getKernelSourceCode.sh build_log.txt file_lists.txt
得到对应硬件平台使用的Linux源码文件列表。
编辑脚本两个变量,ARCH 和 MACH,MACH是平台的名字。如果你用的平台对应 arch/arm/mach-at91 的话,就改成 MACH=at91,以此类推,getKernelSourceCode.sh脚本文件如下:
#!/bin/sh
ARCH=arm
MACH=imx
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源码工程
在File Paths的空白处选择要打开的源码目录路径。
在Projects Source Files处选择Use a Master File List一项,并填入file_lists.txt的文件路径。
最后点击OK,即可导入并打开Linux源码进行阅读和编辑。