vsftpd移植到ARM开发板

21 篇文章 2 订阅
1 篇文章 0 订阅

玩ARM开发板时一般在pc上进行交叉编译,编译好后拷贝到开发板上运行。用u盘拷来拷去很不方便,所以想在开发板上装一个FTP服务器,pc和开发板上就可以通过ftp来回下载了。查了一下,开发板上一般使用vsftpd,因此记录一下vsftpd的移植过程。
vsftpd即very secure FTP daemon(非常安全的FTP进程),是一个基于GPL发布的类UNIX类操作系统上运行的服务器的名字(是一种守护进程),可以运行在诸如Linux、BSD、Solaris、HP-UX以及Irix等系统上面。vsftpd支持很多其他传统的FTP服务器不支持的良好特性。使用 vsftpd 可以在 Linux/Unix 系统上搭建一个安全、高性能、稳定性好的轻量级FTP服务器。

1 libcap交叉编译

vsftpd的编译需要依赖libcap,因此需要先对libcap进行交叉编译。

1.下载源码,下载地址为:https://www.kernel.org/pub/linux/libs/security/linux-privs/libcap2/libcap-2.24.tar.gz

2.使用gcc生成libcap/_makenames(x86)

tar  -zxvf  libcap-2.24.tar.gz
cd  libcap-2.24
make  clean
make
mv  ./libcap/_makenames  ./libcap/_makenames_x86

3.修改根目录下Make.Rules
(1)定义lib是为了让so安装到arm-none-linux-gnueabi/lib目录下,否则会安装到lib64目录。

lib=lib
ifndef lib
lib=$(shell ldd /usr/bin/ld|egrep "ld-linux|ld.so"|cut -d/ -f2)
endif

(2)prefix 目录指定libpc的安装目录,一般安装在路径为arm-linux-gcc交叉编译器的路径。

ifdef prefix
exec_prefix=$(prefix)
lib_prefix=$(exec_prefix)
inc_prefix=$(lib_prefix)
man_prefix=$(prefix)/share
else
prefix=/usr/local/arm/opt/FriendlyARM/toolschain/4.4.3/arm-none-linux-gnueabi
exec_prefix=$(prefix)
lib_prefix=$(exec_prefix)
inc_prefix=$(prefix)
man_prefix=$(prefix)/share
endif

(3)将gcc修改为交叉编译工具链

CC := arm-none-linux-gnueabi-gcc

4.修改libcap/Makefile
(1)注释掉attr

ifeq ($(LIBATTR),yes)
FILES += cap_file
#LDFLAGS += -lattr
#3DEPS = -lattr
endif

(2)更改cap_names.h生成方式

cap_names.h: _makenames
	./_makenames_x86 > cap_names.h

5.在libcap/cap_file.c中新增以下code

#define XATTR_NAME_CAPS XATTR_SECURITY_PREFIX "capability"

6.更改根目录makefile

all install clean: %: %-here
	$(MAKE) -C libcap $@
ifneq ($(PAM_CAP),no)
	$(MAKE) -C pam_cap $@
endif
#	$(MAKE) -C progs $@
	$(MAKE) -C doc $@

主要是取消progs的编译,因为在安装的时候会报的错误,还没找到原因。progs/下面只是提供一些局域libcap库的工具而已,可以选择跳过编译progs目录。
7.交叉编译

make clean
make
make install

安装完成后会在arm-none-linux-gnueabi/lib生成libcap.so等动态库文件。

2 vsftpd交叉编译

1.源码下载

下载网址为:https://www.linuxfromscratch.org/blfs/view/svn/server/vsftpd.html
,下载后解压。

tar  -zxvf  vsftpd-3.0.5.tar.gz
cd  vsftpd-3.0.5

2.修改根目录makeflie
(1)指定交叉编译器

CC 	=	arm-linux-gcc-4.4.3

(2)链接到libcap、libcrypt库

LIBS	=	`./vsf_findlibs.sh`
LIBS    =    -lcap -lcrypt
LINK	=	-Wl,-s
LDFLAGS	=	-fPIE -pie -Wl,-z,relro -Wl,-z,now

(3)指定install路径
3.编译

make

make 后,当前目录下会生成两个文件:vsftpd 和 vsftpd.conf。
4.修改vsftpd.conf文件。
最好在pc上修改一下vsftpd.conf,在开发板上修改也可以,只不过不太方便。

anonymous_enable=NO
local_enable=YES
write_enable=YES
anon_upload_enable=YES
anon_mkdir_write_enable=YES
dirmessage_enable=YES
xferlog_enable=YES
connect_from_port_20=YES
chown_uploads=YES
xferlog_file=/var/log/vsftpd.log
xferlog_std_format=YES
async_abor_enable=YES
ascii_upload_enable=YES
ascii_download_enable=YES
ftpd_banner=Welcome to blah FTP service.
ls_recurse_enable=YES
listen=YES

5.在开发板上运行
(1)拷贝vsftpd依赖的so到开发板/llib/目录
vsftpd运行时依赖libcup库,使用的是动态连接库的方式编译的,因此需要把交叉编译好libcup.so.2的复制到开发板/lib/目录。

cp sdcard/libcap.so.2 /lib/

如果vsftpd运行提示有so找不到,把交叉编译器目录下相应的so复制到开发板/lib/目录即可。

(2)将vsftpd.conf拷贝到开发板/etc/目录,并修改权限

cp /sdcard/vsftpd.conf /etc/
chmod 775 /etc/vsftpd.conf

(3)启动vsftpd

mkdir /usr/share/empty
/home/vsftpd/vsftpd &

别忘记&符号,我在开发板上启动后报了500 OOPS: could not bind listening IPv4 socket的错误,但是好像也没什么影响。
(4)添加用户

adduser zhy

然后设置密码就可以了,想要修改密码使用:

passwd zhy

3 安装filezilla 连接开发板

在pc 上安装filezilla连接开发板上的ftp,我的是ubuntn18.04的系统,安装命令如下:

sudo apt-get install filezilla

在filezilla输入host、username、pwd即可连接开发板,pc上filezilla截图如下:
在这里插入图片描述开发板我使用的友善之臂2416,pc上使用Asbru通过ssh连接到开发板,终端界面截图如下:
在这里插入图片描述这样就可以在pc上进行交叉编译,通过ftp下载到开发板上运行,不需要u盘拷来拷去了。(ps:搭建环境真的是个费功夫的事,一个ftp搞了一天)

参考文章

http://doc.okbase.net/fqheda/archive/123511.html

  • 2
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
安装步骤: 0、交叉编译环境配置 在/etc/profiel 和 .bashrc 文件中增加以下内容 export PTAH=$PATH://root/compile/arm-none-linux-gnueabi/bin source .bashrc 1、解压 tar -zxvf vsftpd-3.0.3.tar.gz.tar 2、修改Makefile文件 vim Makefile CC=arm-none-linux-gnueabi-gcc 3、执行make,已修复以下错误 make (1)错误提示:/bin/sh:./vsf_findlibs.sh: Permission denied 解决措施:chmod 775 ./vsf_findlibs.sh (2)错误提示:/lib/libcap.so.2:could not read symbols: File in wrong format 解决措施:修改vsffindlibs.sh,屏蔽掉50-60行 (3)错误提示:sysdeputil.c:(.text+0xdcc):undefined reference to `crypt' 解决措施:arm-none-linux-gnueabi/libc/lib/下的libcrypt.so.1复制到开发板根文件系统/lib目录下 4、拷贝文件到开发板中 make成功之后有在当前目录生成了vsftpd文件,通过以下命令查找对应的依赖性 arm-linux-readelf -d vsftpd   Tag        Type                        Name/Value 0x00000001 (NEEDED)                    Shared library: [libcrypt.so.1] 0x00000001(NEEDED)                     Shared library: [libc.so.6] 把vsftpd、libcrypt.so.1及这两个连接所指向的源文件拷贝开发板系统根目录/lib中。 把生成的vsftpd拷贝到根文件系统的sbin目录,vsftpd.conf文件拷贝到开发板系统根文件系统的etc目录下。 5、配置vsftpd.conf #使vsftpd处于独立启动模式 listen=YES listen_port=21 anon_other_write_enable=YES 6、开发板根文件系统创建必要的目录: mkdir-p /var/ftp/pub mkdir -p /usr/share/empty chown root:root/var/ftp chmod 755 /var/ftp cd /var/ftp chmod 777 pub pub这个目录是用来供匿名用户上传文件的,上传的文件存放在此处,故其属性为777,而其他目录无此属性,不能用来作为上传目录。 7、开发板执行以下命令启动 vsftpd/etc/vsftpd.conf& 8、启动ftp登录 用户名root密码空,可访问开发板任意目录; 用户名anonymous密码空,可访问/var/ftp/pub目录 用户名ftp密码空,可访问/var/ftp/pub目录

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值