通过网络添加应用程序到44B0系统全攻略
时间:2009-06-09 来源:风城少主
写在前面:玩ARM9的人肯定会觉得ARM7是鸡肋,没有MMU,像Linux和Wince之类的操作系统都没法跑,而且比较少的ARM7的CPU总线是开放的,总线不开放通常意味比较少的RAM和ROM空间,uClinux也没法跑,能跑也没意思^_^,当然市场上不少学习板使用总线开放的ARM7,如44B0公板。
相信很多人像我一样用44b0学习linux的近亲uClinux,不过不少人由于没有掌握好uClinux的开发和调试方法,学习或开发效率比较低,每做一点修改都要求重新编译内核并烧写入FLASH存储器运行,其工作量是可想而知的。本文讲解通过网络添加应用程序到目标系统的具体方法,写出来致在温故而知新和对前一阶段的学习做一个总结,这个过程也是本人的辛酸历程,关于这方面的书籍和资料比较少,本人只得不断尝试和摸索,个中的曲折和成功的喜悦都是无法忘怀的,同时希望本文能对你有所启发!
一、
首先你得准备一条交叉网线,用于连接你的目标板和XP系统主机。交叉网线是有分公头和母头的,当你正确连接时,XP系统会提示你连接成功,不过当交叉网线接反了时,它也会提示你连接成功,所以切莫大意!

二、
首先将目标板与XP系统主机连接在同一网段内,我的XP系统主机的IP地址设置为192.168.0.80,子网掩码为255.255.255.0,网关就不用了。
三、下面讲解设置目标板的IP地址的方法:
为了将目标板与XP系统主机连接在同一网段内,我的目标板的IP地址设置为192.168.0.100,网关为192.168.0.255,子网掩码为255.255.255.0。
启动目标板的uClinux,通过超级终端,输入下面的命令:
ifconfig
超级终端显示信息如下:

ifconfig命令用于显示或设置目标板的网卡配置,例如:IP地址、子网掩码、IRQ及IO Port等。
输入下面的命令:
ifconfig eth0 192.168.0.100
在上述命令中,参数eth0代表目标板的网络设备,IP地址192.168.0.100为目标板的IP地址。
再次输入ifconfig命令,超级终端显示信息如下:

可以看到目标板的IP地址已经被正确配置!
输入下面的命令:
ping 192.168.0.100
应能得到XP系统主机的应答信息,超级终端显示信息如下:

四、笔者在使用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登陆了。
我改了一下uClinux\uClinux44b0\uClinux-dist\user\ftpd 下的auth.c的源代码:
在
auth_user (const char *name,struct credentials *pcred)
{
/*Jiao JinXing debug*/
return 0;
/*------------------------*/
在
auth_pass (const char *passwd, struct credentials *pcred)
{
/*Jiao JinXing debug*/
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文件系统的建立,请读者参考相关技术资料。
风城少主于 2008年7月15日笔
E_mail : [email protected]
欢迎转载和与我交流!
一、
首先你得准备一条交叉网线,用于连接你的目标板和XP系统主机。交叉网线是有分公头和母头的,当你正确连接时,XP系统会提示你连接成功,不过当交叉网线接反了时,它也会提示你连接成功,所以切莫大意!

二、
首先将目标板与XP系统主机连接在同一网段内,我的XP系统主机的IP地址设置为192.168.0.80,子网掩码为255.255.255.0,网关就不用了。
三、下面讲解设置目标板的IP地址的方法:
为了将目标板与XP系统主机连接在同一网段内,我的目标板的IP地址设置为192.168.0.100,网关为192.168.0.255,子网掩码为255.255.255.0。
启动目标板的uClinux,通过超级终端,输入下面的命令:
ifconfig
超级终端显示信息如下:

ifconfig命令用于显示或设置目标板的网卡配置,例如:IP地址、子网掩码、IRQ及IO Port等。
输入下面的命令:
ifconfig eth0 192.168.0.100
在上述命令中,参数eth0代表目标板的网络设备,IP地址192.168.0.100为目标板的IP地址。
再次输入ifconfig命令,超级终端显示信息如下:

可以看到目标板的IP地址已经被正确配置!
输入下面的命令:
ping 192.168.0.100
应能得到XP系统主机的应答信息,超级终端显示信息如下:

四、笔者在使用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登陆了。
我改了一下uClinux\uClinux44b0\uClinux-dist\user\ftpd 下的auth.c的源代码:
在
auth_user (const char *name,struct credentials *pcred)
{
/*Jiao JinXing debug*/
return 0;
/*------------------------*/
在
auth_pass (const char *passwd, struct credentials *pcred)
{
/*Jiao JinXing debug*/
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文件系统的建立,请读者参考相关技术资料。
风城少主于 2008年7月15日笔
E_mail : [email protected]
欢迎转载和与我交流!
相关阅读 更多 +