经常使用开发板,运行写好的程序,开发板的usb驱动已经移植好了,用usb把程序拷到开发班比较麻烦,所以在busybox中移植了vsftp服务器。在vsftp服务器移植过程中,折腾了好久才搞定匿名用户上传,这里把配置的过程总结下。
一. 在busybox中移植vsftp服务器
1. 获取vsftp源码
2. 修改Makefile cc --> arm-linux-gcc
3. 去掉libcap.so缺少警告
编辑vsf_findlibs.sh文件,将下面的内容注释掉
# Look for libcap (capabilities)
if locate_library /lib/libcap.so.1; then
echo "/lib/libcap.so.1";
elif locate_library /lib/libcap.so.2; then
echo "/lib/libcap.so.2";
else
locate_library /usr/lib/libcap.so && echo "-lcap";
locate_library /lib/libcap.so && echo "-lcap";
locate_library /lib64/libcap.so && echo "-lcap";
fi
4. make编译源码,生成vsftpd
# make
5. 修改vsftpd.conf文件为下面内容:
anonymous_enable=YES
write_enable=YES
local_umask=022
anon_upload_enable=YES
anon_mkdir_write_enable=YES
anon_other_write_enable=YES
anon_world_readable_only=NO
anon_umask=022
listen=YES
6. 将vsftpd.conf文件拷贝到etc下,将vsftpd拷贝到usr/sbin/下
7. 在passwd中增加nobody用户,(可拷贝linux中的passwd文件)
8. 在/usr/share中增加empty目录
#mkdir usr/share/empty/
9. 在/var/新建ftp目录
# mkdir var/ftp/
# useradd -d var/ftp ftp
# chown root.root /var/ftp
# chmod og-w /var/ftp
10. 在/var/ftp目录中建upload目录,用来存放上传的文件
# mkdir var/ftp/upload
# chown ftp var/ftp/upload
11. 在etc/init.d/rcS中增加启动项
/usr/sbin/vsftpd &
注意:
默认匿名用户家目录(var/ftp/)的权限是755,这个权限是不能改变的。切记!切记!!
下面是配置文件各项的意义,因为我是自己使用,所有权限设置的很宽松!
anonymous_enable=YES :运行匿名用户登录
anon_upload_enable=YES :允许匿名用户上传
anon_mkdir_write_enable=YES :允许匿名用户创建文件夹
anon_other_write_enable=YES :运行匿名用户删除、更名上传的文件
anon_world_readable_only=NO :允许匿名用户浏览整个服务器的文件系统
anon_umask=022 :匿名用户新增文件的umask数值022,权限为755
listen=YES :使用standalone启动vsftpd
二. busybox移植telnet
1. 配置busybox,进入busybox目录下,运行make menuconfig,找到telnetd配置部分,选上下面三项
Networking Utilities --->
[*] telnet
[*] telnetd
[*] Support standalone telnetd (not inetd only)
找到Character devices, 确保下面这项目被选中
Character devices --->
[*] Unix98_PTY support
2. 配置busybox后,编译busybox,会在usr/sbin下面生成telnetd,后面的操作同用busybox制作根文件系统,一般busybox默认都配置了上面
的telnet选项。
3. 配置内核,进入内核源码目录,运行make menuconfg,在Character devices中选中Unix98 PTY support,
在File systems中选中/dev/pts file system for Unix98 PTYs 退出后make zImage
4. 在ramdisk的etc/中新建inetd.conf文件,加入下面这行内容:
telnet stream tcp nowait root /sbin/telnetd /sbin/telnetd
也可以从linux系统中拷贝inetd.conf文件,确认上面上面这行内容没有被注释掉
5. 修改etc/init.d/rcS
telnet client功能只要选中配置选项就可以了,而telnetd需要devpts,因此要在启动脚本中开启devpts支持及启动telnetd。
在rcS中mount -a后面加入下面的内容:
mkdir /dev/pts
/bin/mknod /dev/pts/0 c 136 0
/bin/mknod /dev/pts/1 c 136 1
/bin/mknod /dev/pts/2 c 136 2
/bin/mknod /dev/pts/3 c 136 3
/bin/mknod /dev/pts/4 c 136 4
/bin/mknod /dev/pts/5 c 136 5
/bin/mount -t devpts devpts /dev/pts
在适当位置加入
/usr/sbin/telnetd &
修改后的etc/init.d/rcS如下所示:
#! /bin/sh
PATH=/sbin:/bin:/usr/sbin:/usr/bin
runlevel=S
prevlevel=N
umask 022
export PATH runlevel prevlevel
/bin/hostname CPEmbed
/sbin/ifconfig lo 127.0.0.1 up
/sbin/ifconfig eth0 192.168.1.8 netmask 255.255.255.0
/sbin/route add default gw 192.168.1.1 eth0
echo "---------------mount all-----------------"
/bin/mount -a
mkdir /dev/pts
/bin/mknod /dev/pts/0 c 136 0
/bin/mknod /dev/pts/1 c 136 1
/bin/mknod /dev/pts/2 c 136 2
/bin/mknod /dev/pts/3 c 136 3
/bin/mknod /dev/pts/4 c 136 4
/bin/mknod /dev/pts/5 c 136 5
/bin/mount -t devpts devpts /dev/pts
echo /sbin/mdev>/proc/sys/kernel/hotplug
mdev -s
/usr/sbin/telnetd &
/usr/sbin/vsftpd &
echo "******************************************"
echo "******************************************"
echo "** Kernel version: linux-2.6.31.1 **"
echo "** Date: 2012.04.12 **"
echo "******************************************"
6. 修改etc/passwd文件中root一行,改成下面这样
root::0:0:root:/root:/bin/sh
7. 修改好上面的内容后,用yaffs2文件系统镜像制作工具mkyaffs2image,制作根文件系统镜像。
#./mkyaffs2image root_fs root_fs.bin
将root_fs.bin烧到NandFlash就可以了。
阅读(6655) | 评论(0) | 转发(2) |