开发板:mini2440(2011.04.21)环境:ubuntu9.10
为方便的将文件上传到开发板,采用vsftpd,移植过程如下:
1. 获取源码,地址:ftp://vsftpd.beasts.org/users/cevans/
2. 修改Makefile文件,按实际情况填写,请仔细查看路径,我的是
CC = /opt/FriendlyARM/toolschain/4.4.3/bin/arm-linux-gcc
3. 修改vsf_findlibs.sh
屏蔽53、54、57行
50 # Look for libcap (capabilities)
51 if locate_library /lib/libcap.so.1; then
52 echo "/lib/libcap.so.1";
53 #elif locate_library /lib/libcap.so.2; then
54 # echo "/lib/libcap.so.2";
55 else
56 locate_library /usr/lib/libcap.so && echo "-lcap";
57 # locate_library /lib/libcap.so && echo "-lcap";
58 locate_library /lib64/libcap.so && echo "-lcap";
59 fi
4. make
5. 把动态链接库从编译器的lib下拷贝到跟文件系统的lib目录下,进入vsftpd-3.0.2目录,执行
$ arm-none-linux-gnueabi-readelf -d vsftpd
Dynamic section at offset 0x1caa0 contains 35 entries:
Tag Type Name/Value
0x00000001 (NEEDED) Shared library: [libcrypt.so.1]
0x00000001 (NEEDED) Shared library: [libdl.so.2]
0x00000001 (NEEDED) Shared library: [libnsl.so.1]
0x00000001 (NEEDED) Shared library: [libresolv.so.2]
0x00000001 (NEEDED) Shared library: [libutil.so.1]
0x00000001 (NEEDED) Shared library: [libc.so.6]
0x00000001 (NEEDED) Shared library: [ld-linux.so.3]
0x0000000c (INIT) 0x44c8
0x0000000d (FINI) 0x19180
0x00000019 (INIT_ARRAY) 0x24a94
0x0000001b (INIT_ARRAYSZ) 4 (bytes)
0x0000001a (FINI_ARRAY) 0x24a98
0x0000001c (FINI_ARRAYSZ) 4 (bytes)
….
将上面的7个共享库拷贝过去,库路径是
/opt/FriendlyARM/toolschain/4.4.3/arm-none-linux-gnueabi/lib
cp –advfr libcrypt.so.1 libdl.so.2 libnsl.so.1 libresolv.so.2 libutil.so.1 libc.so.6 ld-linux.so.3 /rootfs/lib
6. 把生成的vsftpd 拷贝到跟文件系统的sbin目录下,把vsftpd.conf文件拷贝到 根文件系统的/rootfs/etc目录下。
至此,arm-linux环境下的ftp服务器移植完成,下面开始对服务器进行配置。以下为一个简单的配置,不考虑安全性。
anonymous_enable=YES
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
nopriv_user=ftp
ascii_upload_enable=YES
ascii_download_enable=YES
ftpd_banner=Welcome to blah FTP service.
ls_recurse_enable=YES
listen_port=21
anon_other_write_enable=YES
7. 将文件系统镜像烧写,启动后在开发板上创建必要的账号、目录
#addusr nobody //vsftpd 默认配置需要
#mkdir /usr/share/empty //vsftpd 默认配置需要
#adduser –D ftp
#chown root:root /home/ftp //注意不是/var/ftp
#chmod 755 /home/ftp
8. 创建一个本地账户michael,创建好之后可以用michael登录
#addusr michael
#passwd 123456
9. 添加一个只能从ftp登录,而不能从本地的登录的用户yaho
#addusr -G ftp -S yaho //-G -S 如果用-g -s 客户将不能登录:530 Login incorrect
#passwd 12345
10. 服务器端执行 vsftpd /etc/vsftpd.conf ,客户端执行ftp YOUR_IP_ADDR ,输入帐号名yaho和密码即登入。
11. 用cat /etc/passwd cat /etc/group 命令查看yaho和ftp是否是同一组。
12.测试
Ubuntu下
$ ftp 板子IP
Connected toXX.
220 Welcome to blah FTP service.
Name (XX:XX): yaho
331 Please specify the password.
Password:
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
测试一般操作
ftp> cd ..
250 Directory successfully changed.
ftp> ls
200 PORT command successful. Consider using PASV.
150 Here comes the directory listing.
-rwxr-xr-x 1 1000 1000 584718 Nov 16 2011 Server
drwxr-xr-x 1 0 0 2048 Aug 31 11:23 ftp
drwxr-sr-x 1 1001 1001 2048 Aug 31 12:19 yaho
可见远程登录后会进入/home/yaho目录下
ftp> cd yaho
ftp> mkdir work //在开发板上创建也可以,开放权限chmod 777
ftp> cd work
250 Directory successfully changed.
测试上传文件
ftp> put filename
local: epaServer remote: epaServer
200 PORT command successful. Consider using PASV.
150 Ok to send data.
226 Transfer complete.
11541 bytes sent in 0.06 secs (189.1 kB/s)
注意:ftp本身好像不支持这种绝对路径文件的上传,要上传,先进入要上传文件的目录中及FTP服务器具有写权限的目录中。
Windows XP下用Cuteftp测试也是可以的。登录时用户名和密码同上,端口21,其他置空即可。
结果如下
=============================================================================
vsftpd移植比较麻烦些,可以使用另外一个程序 stupid-ftpd, 这个移植起来很快,百度下就可以找到了