四、笔者在使用ftp
时,由于没有目标板的uClinux
的用户名和密码,所以登录失败;如果你没有遇到这样的问题,最好不要按照下面的方法来做!
下面是我总结了的解决方法:
在uClinux
的user
目录里面有tftp
和ftp
两个服务器,可以实现远程文件传输功能,tftp
比较简单,不需要用户名和密码,ftp
则比较完整,可以检测用户名和密码。
在编译uClinux
时,在make menuconfig
里选择应用程序要选上ftpd
,同时在busybox
里要选上chroot
,在tinylogin
里要选上passwd
,之后make user_only
,make romfs
,make image
,make
就可以生成uClinux
启动时自动运行ftpd
程序的image
了,不过使用ftp
登陆时要用到检测用户的passwd
文件,而passwd
文件是由tinylogin
生成的。
在Tinylogin
里用的passwd
文件是在/etc
目录下,而uc-libc
里ftpd
用的库函数getpwnam
所检测的passwd
文件是在/etc/config
下,所以我就直接修改了lib/libc/getent/getpwnam.c
文件,把里面passwd
文件完整路径定义为/etc/passwd
,这样重新编译make lib_only
,make user_only
,make romfs
,make image
,make
后生成的image
就可以实现ftp
登陆了。
我改了一下uClinuxuClinux44b0uClinu
x-distuserftpd
下的auth.c
的源代码:
在
auth_user (const char *name,struct credentials *pcred)
{
return 0;
在
auth_pass (const char *passwd, struct credentials *pcred)
{
return 0;
这样,登录ftp
时,你就可以输入任意的用户名和密码了。
至于telnet
,不用用户名和密码,在运行里输入telnet 192.168.0.100
就可登录到目标板的uClinux
;不过telnet
的键盘输入不太好,退格不正常,不建议使用。
比较奇怪的是,经过上面这样做,串口终端的目录显示也正常了(原来多了点不应该显示的符号)!
在运行里输入ftp 192.168.0.100
登录目标板uClinux
的ftp
:
输入任意的用户名和密码,下面是登录成功后的界面:
退出输入bye
命令,其它命令可以输入help
命令来显示。
五、XP
系统主机通过FTP
访问目标板的uClinux
打开FlashFXP
,点击快速连接,在出现的对话框里输入目标板的IP
地址,这里是192.168.0.100
,端口号为21
,用户名不用填,记得打上Anonymous
前面的勾,其它不用填,之后点击连接。
OK
,连接上了!可以看到目标板uClinux
的目录!之后把主机的查看文件夹设为VM5.0
虚拟机中的Red Hat Linux
与Windows XP
的共享文件夹,方便以后的文件的传输!
在FlashFXP
,双击目标板uClinux
的var
或tmp
目录,进入var
或tmp
目录(因为vart
和tmp
目录建立在RAM
中,是可写的,当然断电后资料就会消失,这样的方式常用于调试),之后可以把可执行文件拖到var
或tmp
目录中完成文件的传输。
此时,可执行文件已传输至目录/var
或/tmp
下,但文件的可执行属性未被设置,添加文件的可执行属性,键入命令:
chmod
755
armtest
(armtest
为可执行文件的文件名)
chmod
是一个文件权限修改的命令,在文件创建的时候会自动设置存取权限,若是这些默认权限无法适合企业环境的需求,就可以利用chmod
命令来修改存取权限。通常在权限修改的时候可以用两种方式表示权限类,数字表示法和文字表示法。
这里我们采用的是数字表示法,就是说将读取(r)
,写入(w)
和执行(x)
分别以4
,2
,1
来代表,没有授予的权限的部分就表示值为0
,然后再把所授予的权限先加而成。表7.4
为读者列出了几个例子。
每三位字符为一组,这样权限可以被分为三组,第一组表示此文件拥有者的存取权限,第二组表示该文件拥有者所属组成员的存取权限,最后一组表示该文件拥有者所属组之外的用户存取权限。希望读者能够研究清楚权限的分配。
这里所键入的命令表示授予文件拥有者读取、写入、执行的权限,而该文件拥有者所属组成员和该文件拥有者所属组之外的用户只拥有读取、执行的权限。
执行程序armtest
,键入命令:
./ armtest
(呵呵,目标板上的LED
终于闪了)
六、Linux
系统主机通过FTP
访问目标板的uClinux
在RedHat Linux 9.0
系统运行gtfp
软件,有关网络配置的问题请参看《Vmware
虚拟机+RedHat 9.0 Linux
网络配置》:
输入目标板系统的IP地址和设置端口号为21,登录即可:
七、在XP
系统主机架设FTP
服务器
在XP
系统主机架设FTP
服务器后,目标板的uClinuxXP
就可以通过FTP
访问XP
系统主机,自行下载文件,不过方法不如FlashFXP
好用。
先上网一个下载wftpd.exe
文件,启动该软件,选择菜单”Security”->”users and Rrights”
在弹出来的对话框里点击“New User”
,接着在弹出对话框输入你想新建的用户名,
最后在弹出来的对话框输入你想设置的登录密码
为了以后输入方便,让它空着也可以^_^
点击OK
后回到第一个对话框:
在“User Name
”里选择刚才新建的用户,点击“Right<<
”按钮,设置好用户的权限和可访问的目录,最好点击“Done
”按钮完成配置和退出。
至些在XP
系统主机的FTP
服务器总算架设好了!
八、目标板的uClinux
通过FTP
访问XP
系统主机
当目标板与XP
系统主机已经正确建立连接并且在XP
系统主机架设好FTP
服务器后,先进入目标板的uClinux
系统的可写目录var
或tmp
(这个别忘了),并登录到XP
系统主机:
cd
var
ftp
192.168.0.80
此时输入XP
系统主机上的用户名及密码,便与XP
系统主机建立了FTP
连接。为传输二进制文件,键入命令:
Binary
超级终端会显示:
200 Type set to I
这里请各位注意:在用FTP
进行文件传输的时候,一定要选好文件传输的模式,FTP
缺省模式为二进制模式,但是为了保险起见,还是手动把传输模式显式改写为二进制模式。通常的txt
,html
和绝大多数PS
文件都是文本格式的,而其他的可执行文件,压缩文件都是二进制格式。两种格式之间要用ascii
和binary
命令切换,两者都可以适当缩写。
传输已编译好的可执行文件(如armtest
)到目标板,键入如下所示命令:
get
armtest
退出FTP
服务,键入如下所示命令:
bye
设置文件权限和执行程序请参考第五节。
九、目标板上网!
首先用网线连接你的目标板和外网;
使用SecureCRT
这个软件作为目标板的串口显示终端;SecureCRT
是可以显示颜色的,也比普通的串口终端智能。
输入下面的命令设置路由IP
:
route add default gw 192.168.0.1
最后使用telnet
命令登录你要登录的主机,在此登录的是华南木棉bbs
输入下面的命令:
telnet 202.112.17.137
十、写在最后
这种方法在应用程序的开发中是比较有用的,使用这种方式可以使用户在宿主机的开发环境下,编译代码,但编译出来的flat
格式的文件并没有放到目标系统的FLASH
存储器,而是在系统的SDRAM
中运行,这就大大节省了调试的时间,内核编译只需要进行一次,使开发人员能够将更多的精力投入到应用程序的开发中来。
但由于目前所使用的uClinux
操作系统内核采用ROMFS
作为其根文件系统,当目标系统的uClinux
启动运行以后,其目录大多数是建在FLASH
存储器中,因而是不可写的,只有var
、tmp
等少数几个目录是建立在SDRAM
,是可读写的,但若目标系统掉电,内容就丢失了,因此只能作为应用程序调试之用,当应用程序调试完成后,还应将其写入FLASH
存储器。当然,若能在目标系统中使用JFFS/JFFS2,
用以代替ROMFS
作为其根文件系统,则整个目标系统就像有磁盘一样方便,用户应用程序的加载再也不用像前面介绍的方式进行了。关于JFFS/JFFS2
文件系统的建立,请读者参考相关技术资料。