【版权声明: 本文为博主原创作品,请尊重劳动果实,请保留原文链接,谢谢】
【http://www.cnblogs.com/Recan/p/6087083.html 】
------------------------------------------------------------------------------------------------------------------
本文以POS嵌入式linux程序开发为例,讲解了如下在Windows开发环境(Source Insight)下实现,POS程序一键编译下载。
以下是详细教程:
------------------------------------------------------------------------------------------------------------------
嵌入式应用开发一键编译下载
众所周知,嵌入式应用的开发与通用PC应用开发有些不太一样,主要是因为嵌入式应用它运行的环境是有特殊性的,它的运行环境并不是普通的PC环境,而是一个资源相对匮乏的嵌入式系统,往往又不具备编译程序的能力,所以在它的开发流程上,通常我们采用的方法是交叉编译,即在宿主机(PC端主机)编码、编译,然后通过各种方式将应用程序下载到嵌入式系统中运行验证。有关嵌入式开发,交叉编译的方法,这里不在阐述,可自行了解。
本文重点介绍的是,如何在交叉编译的基础上,实现windows下编码,之后一键完成程序编译、下载到嵌入式系统的方法。
看到这里的客官,可能觉得不可思议,一键编译下载?怎么可能?不相信的吃瓜群众,且听我细细道来。
【注:不带WIFI或以太网模块的POS机,或非调试版本镜像的POS机,请点击右上角叉叉】
-----------------------------------------------华丽丽的分界线----------------------------------------------------
一、开发环境介绍
本人的开发环境如下:
Windows主机:Win7专业版,64位操作系统
Linux主机:(宿主机)Red Hat Enterprise Linux6,安装在VMware Workstation 7.0
linux内核:[root@localhost ~]# uname -a
Linux localhost.localdomain 2.6.32-71.el6.i686 #1 SMP Wed Sep 1 01:26:34 EDT 2010 i686 i686 i386 GNU/Linux
嵌入式系统:搭载ARM11处理器的定制linux系统,内核:Linux newpostech 2.6.32.65-bcm5892-secure #2 PREEMPT Mon May 25 10:53:57 CST 2015 armv6l GNU/Linux
Windows下代码编译IDE:Source Insgith 3.5 英文版
POS终端:NEW8210,带GPRS+WIFI+以太网通讯能力
其他辅助工具:
putty.exe,版本 Release 0.67
plink.exe,版本 Release 0.67
pfstp.exe,版本 Release 0.67
二、网络环境介绍
由于整一篇文章介绍的方法,都依赖于SSH协议的应用,自然而然,网络环境是必不可少的。
主要有3个方面的网络环境,Windows系统的网络、Linux宿主机的网络、嵌入式系统(POS终端)的网络,三者的网络情况至少满足:Windows系统与嵌入式系统网络互通,Windows系统与Linux宿主机网络互通。三者关系拓扑图如下所示:
图 1 关系拓扑图
其中,windows主机和嵌入式系统要求网络互相可达,是很容易实现的,比如两者均连入同一个wifi热点(前提是POS有配置wifi模块),或者两者接入同一台交换机(或路由器的不同LAN口);即,只要保证两者在同一个局域网内,即可实现网络互达。
至于windows主机和linux主机网络互达的设置,不同的虚拟机工具,可能设置的菜单不太一样。不过,一般而言,windows主机和虚拟机网络连接方式有4中,桥接方式Bridged、NAT(Network Address Translation,网络地址转换)、Host-Only、Custom自定义模式。常用的是前面两种方式,本文介绍的是桥接方式Bridged,用这一种方式最大的好处就是,虚拟机主机与windows主机处于同一局域网内,具备与windows主机同样地位的IP地址,相当于一台正式的网络主机而存在。
以下是WM设置虚拟主机使用桥接方式联网的设置方法。选中虚拟机中打开的主机列表,在菜单栏中VM---settings,然后在Hardware中的Network Adapter,右边选项就可以看到相应的选择了,按图中设置即可。设置成功后,可在linux下的终端上使用ifconfig命令,看下是否获取到ip,有些情况下,重新设置了,需要重启虚拟机。正常的时候,可以看到右上角的网络图标正常,ifconfig查看网络也获取到了ip。
图 2 VM设置桥接方式
图 3 linux虚拟主机ip地址查看
以下是我的开发环境,三者的网络情况:
Windows主机,ip 192.168.1.92 (有线方式接入公司网络,未使用无线连接)
Linux主机(虚拟机),ip 192.168.1.80 (与windows主机桥接的方式)
POS主机(嵌入式系统),ip 192.168.2.92(wifi模式接入公司统一热点);虽然它和windows主机192.168.1.92不再同一个子网,但是公司上层路由器有做两者的转发,故网络是互通的,这也解释了为何笔记本主机连入公司热点也可以访问内网的原因。
三者做网通互通ping测试,结果如图5所示:注意关闭防火墙。
图 4 网络ping测试
至此,网络环境已基本搭建完成。只有当这一步成功后,往下的操作才有可能是成功的。另外,需要特别注意的是GPRS/CDMA的机器(仅带GPRS或CDMA模块,不带wifi和以太网模块的),由于其IP地址是在ppp拨号时,由运营商临时分配的一个子网(局域网)IP,这个IP通常外面的网络设备时不能访问的,所以这种机器是无法试用此方法的。
三、SSH协议介绍
(一) SSH协议
以下是摘自bing网典对SSH的简要介绍:
SSH 为 Secure Shell 的缩写,由 IETF 的网络工作小组(Network Working Group)所制定;SSH 为建立在应用层和传输层基础上的安全协议。SSH 是目前较可靠,专为远程登录会话和其他网络服务提供安全性的协议。利用 SSH 协议可以有效防止远程管理过程中的信息泄露问题。SSH最初是UNIX系统上的一个程序,后来又迅速扩展到其他操作平台。SSH在正确使用时可弥补网络中的漏洞。SSH客户端适用于多种平台。几乎所有UNIX平台—包括HP-UX、Linux、AIX、Solaris、Digital UNIX、Irix,以及其他平台,都可运行SSH。
通常来说,SSH专为远程登入并管理主机而存在的。本文所要介绍的方法,都是基于这个协议来完成的。
至于,SSH服务器的安装方法,可自行网络了解并实践,本文不再阐述。后续的介绍中,默认宿主机Linux环境和嵌入式Linux环境均已安装好SSH服务器环境,即要求从Windows主机通过22号端口(SSH协议的默认端口),登入到宿主机Linux环境和嵌入式Linux环境。如下测试:
图 5 宿主机linux系统下看ssh服务器sshd的运行状态及22号端口的状态
图 6 嵌入式linux系统(POS机)下看ssh服务器sshd的运行状态及22号端口的状态
从上面的测试可知,两个linux系统都在运行sshd,并且22端口也都处于被监听状态。下面就22号端口,测试一下ssh服务是否打开。
Windows主机通过ssh登入宿主机Linux系统,成功后可看到光标在跳动
Windows主机通过ssh登入嵌入式Linux系统(pos机),成功后可看到光标在跳动
以上是通过windows下自带的cmd窗口,利用telnet命令做的测试。
(二) putty工具
下面介绍一个专门的SSH客户端登入程序,putty。这个工具在业界很有名,由于其体积小,速度快,绿色,可免安装等优势,受到很大用户群的追捧。putty本身是带界面的,而由此工具延伸出来,plink、pscp、psftp等工具都是命令行下运行的,不带界面的。它们的存在,恰好解决了需要用脚本来完成一些自动化操作的利器。而plink、psftp则是本文借助的主要工具。
putty等工具,可从http://www.chiark.greenend.org.uk/~sgtatham/putty/download.html 网页中下载得到,通过该网页也可以了解putty相关的前前后后的东西。
关于putty工具的操作,可自行上网检索相应的操作指导手册,本文不再阐述。以下简易介绍下plink和psftp的命令,熟悉这段字段之后,就可以自行编写脚本实现自动化操作。
(三) plink工具
plink:命令行方式,通过ssh协议远程连接主机,可接受参数输入,它的参数列表:
Plink: command-line connection utility
Release 0.67
Usage: plink [options] [user@]host [command]
("host" can also be a PuTTY saved session name)
Options:
-V print version information and exit
-pgpfp print PGP key fingerprints and exit
-v show verbose messages
-load sessname Load settings from saved session
-ssh -telnet -rlogin -raw -serial force use of a particular protocol
-P port connect to specified port
-l user connect with specified username
-batch disable all interactive prompts
-sercfg configuration-string (e.g. 19200,8,n,1,X)
Specify the serial configuration (serial only)
The following options only apply to SSH connections:
-pw passw login with specified password
-D [listen-IP:]listen-port Dynamic SOCKS-based port forwarding
-L [listen-IP:]listen-port:host:port Forward local port to remote address
-R [listen-IP:]listen-port:host:port Forward remote port to local address
-X -x enable / disable X11 forwarding
-A -a enable / disable agent forwarding
-t -T enable / disable pty allocation
-1 -2 force use of particular protocol version
-4 -6 force use of IPv4 or IPv6
-C enable compression
-i key private key file for user authentication
-noagent disable use of Pageant
-agent enable use of Pageant
-hostkey aa:bb:cc:... manually specify a host key (may be repeated)
-m file read remote command(s) from file
-s remote command is an SSH subsystem (SSH-2 only)
-N don't start a shell/command (SSH-2 only)
-nc host:port open tunnel in place of session (SSH-2 only)
-sshlog file
-sshrawlog file log protocol details to a file
我们不必了解全部的命令,仅需了解常用的几个即可:
-V (大写的V)显示plink版本信息
-P (大写的P)ssh协议的端口,默认为22,不传值自动使用22
-l 用户名,即用于登入远程主机的用户名,如user0
-pw 用户名密码,即用于登入远程主机的用户名对应的用户密码,如appuser0;
注意:这里的密码是明文的,安全性有待考究,仅供下载调试程序,没有问题。
-ssh 表示使用ssh协议
User@host_ip,用户名+远程主机ip
在最后可以跟随一串命令组,可实现远程登入主机后就执行这一串命令。
如,登入宿主机linux的脚本命令为:(最后的命令组,命令直接用;号隔开)
"D:\my_putty\plink.exe" -ssh -pw comtop root@192.168.1.80 echo hello, remote host; echo bye-bye, remote host
测试结果如下:
在执行完传入的命令后,登入动作自动退出。
注意:这里"D:\my_putty\plink.exe"加了双引号,是为了防止路径中有空格(windows下路径运行有空格,如D:\Program Files (x86)\)。
(四) psftp工具
psftp:命令行方式,通过sftp协议(叠加了ssh协议的ftp协议)将本地的文件与远程主机的文件进行交互(上传或下载),同时也支持登入到远程主机后,执行若干命令操作。它的参数列表如下:
PuTTY Secure File Transfer (SFTP) client
Release 0.67
Usage: psftp [options] [user@]host
Options:
-V print version information and exit
-pgpfp print PGP key fingerprints and exit
-b file use specified batchfile
-bc output batchfile commands
-be don't stop batchfile processing if errors
-v show verbose messages
-load sessname Load settings from saved session
-l user connect with specified username
-P port connect to specified port
-pw passw login with specified password
-1 -2 force use of particular SSH protocol version
-4 -6 force use of IPv4 or IPv6
-C enable compression
-i key private key file for user authentication
-noagent disable use of Pageant
-agent enable use of Pageant
-hostkey aa:bb:cc:... manually specify a host key (may be repeated)
-batch disable all interactive prompts
-sshlog file
-sshrawlog file log protocol details to a file
从参数列表上看,与plink差不多,我们也不必了解全部,熟悉常用几个即可。
-V (大写的V)显示plink版本信息
-P (大写的P)ssh协议的端口,默认为22,不传值自动使用22
-l 用户名,即用于登入远程主机的用户名,如user0
-pw 用户名密码,即用于登入远程主机的用户名对应的用户密码,如appuser0
注意:这里的密码是明文的,安全性有待考究,仅供下载调试程序,没有问题。
User@host_ip,用户名+远程主机ip
-b batch.file 这个是区别于plink的一个参数,通过-b可传入一个批处理文件,文件里面可以罗列一系列的命令,自然可以包含下载/上传多个文件。
下面是psftp批处理文件中支持的命令列表:不在此列的命令则不支持,比如常用的rm命令就不支持。
psftp> help
! run a local command
bye finish your SFTP session
cd change your remote working directory
chmod change file permissions and modes
close finish your SFTP session but do not quit PSFTP
del delete files on the remote server
dir list remote files
exit finish your SFTP session
get download a file from the server to your local machine
help give help
lcd change local working directory
lpwd print local working directory
ls list remote files
mget download multiple files at once
mkdir create directories on the remote server
mput upload multiple files at once
mv move or rename file(s) on the remote server
open connect to a host
put upload a file from your local machine to the server
pwd print your remote working directory
quit finish your SFTP session
reget continue downloading files
ren move or rename file(s) on the remote server
reput continue uploading files
rm delete files on the remote server
rmdir remove directories on the remote server
其中标红的这几个为常用命令。
如,将本地目录d:\my_putty下的test0.txt和tmp.cmd文件下载到嵌入式linux系统的/home/user0/目录下为:
tmp.cmd批处理文件的内容如下:
cd /home/user0/
put D:\my_putty\test0.txt
put D:\my_putty\tmp.cmd
close
执行的脚本命令为:
"D:\my_putty\psftp.exe" -pw appuser0 user0@192.168.2.92 -b tmp.cmd
"D:\my_putty\psftp.exe" -pw appuser0 user0@192.168.2.61 -b tmp.cmd
注意当tmp.cmd使用相对路径时,务必保证它处于执行目录下,否则可能会报“Fatal: unable to open tmp.cmd”
正常执行结果如下:
D:\my_putty>"D:\my_putty\psftp.exe" -pw appuser0 user0@192.168.2.92 -b tmp.cmd
Using username "user0".
Remote working directory is /home/user0
Remote directory is now /home/user0
local:D:\my_putty\test0.txt => remote:/home/user0/test0.txt
local:D:\my_putty\tmp.cmd => remote:/home/user0/tmp.cmd
我们回到嵌入式linux(POS里面看下文件是不是真的下载完成了),如下:
[user0@newpostech Manage]$
[user0@newpostech Manage]$ ls -al /home/user0/test0.txt /home/user0/tmp.cmd
-rw-r--r-- 1 user0 user0 1006 Nov 21 16:45 /home/user0/test0.txt
-rw-r--r-- 1 user0 user0 78 Nov 21 16:45 /home/user0/tmp.cmd
从时间上看,正好是刚刚下载进去的文件,那么就代表执行成功了。当然,在执行命令的过程中,若出现错误,也会有相应的错误提示。
四、 Windows BAT批处理文件
有了以上的知识做铺垫,到了这里,就简单多了,仅仅是将上面手动输入参数启动plink和psftp的过程,用windows的BAT批处理来实现而已。
(一) BAT批处理文件的编写
为了下文做铺垫,这样还是简单介绍一下windows的BAT批处理文件。这方面的教程也很多,这里不多阐述,仅仅介绍几点:
set param=123 这个是定义一个变量,它的值为123,字符串格式,注意=两边不能有空格
::这些是注释的内容,不会被执行
echo this is debug info 用于打印提示信息
echo %param% 打印param参数的值,其中%参数名%表示取变量的值
@echo %param% 打印param参数的值,但是命令本身不回显,与上一句区分开来
exit 批处理执行退出
:top 代码段标号,供goto语句使用,注意是一个: 不是两个
goto top 配合上面的代码段标识使用
%1 %2 %3 执行批处理脚本时,传入的第1/2/3个参数的值
start “” /max another.bat 从一个bat文件中启动另一个bat文件,/max表示启动的时候窗口最大化
五、编译下载的BAT批处理文件实现
有了上面BAT文件编写知识的铺垫,实现编译下载的BAT批处理就简单多了。实现的思路就是:
- 配置好宿主机linux、嵌入式linux的用户名、密码、ip等信息后,从windows下启动该BAT批处理;
- 先使用plink远程登入进入宿主机linux系统,切换到源码对应的工程目录(这里涉及一个windows与虚拟机共享目录的问题,自行了解并实践,默认工程是放在共享目录里面),然后执行make命令;之后,再讲编译出来的可执行文件拷贝到另一个上传/下载专用的共享目录中,再退出plink;若编译失败,则提示出错信息;当然,这里不讲生成的可执行文件拷贝到共享目录也可以,只是拷贝到统一路径后,后面的步骤写起来相对容易点;
- 使用psftp远程登入嵌入式linux(POS机),传入生成的tmp.cmd批处理文件,该文件里面写好了,该将什么文件下载到POS机的什么路径下,是动态生成的,无需编写tmp.cmd;下载完成了,执行close,退出psftp;
- 回到windows BAT批处理,提示成功信息,之后,退出批处理,整一个过程完成。
BAT文件的详细内容见范例,ys_make_plink_pscp.bat,里面已包含少量注释,可配合阅读。
运行效果如下:
图 7 编译下载BAT批处理运行效果
六、一键编译下载的实现
从第五大点之后,BAT批处理文件就已经生成了,此种情况下,只要双击该BAT批处理文件,即可实现编译下载的功能了,此过程将自动去完成,BAT文件存放的位置也不用特意关注,任意路径均可。
下面,就结合Source Insight来配合实现一键编译下载,其实原理也很简单,只要在Source Insight中配置一个自定义的快捷键,按下该快捷键自动执行上面编写好的BAT文件,那么对于编写代码的开发人员而言,就已经实现了,一键编译下载。
Source Insight设置自定义快捷的方法如下:
1.打开Source Insight工程,点击options,选择Custom Commands,通过这个设置一个自定义的功能;
2.点击Add按钮,在提示框中输入新定义的命令的名字,之后按OK;
3.按如图设置,位置1中Run必须输入全路径;位置2中Dir务必输入该bat文件处于的目录;位置3中,建议此消选中,这样执行完bat后,就不会等待输入,而是直接关闭窗口;位置4,在设置完1/2/3后,可点击Run来看下效果,而这个效果就是最终的效果,如果点击run提示错误,则应根据提示的错误,去解决。如果运行正常,则可以得到类似于双击bat批处理文件运行相同的结果;
4.绑定该功能到相应的菜单中,点击Menu选项,如图:在Menu的下拉框中,选中需要添加到的菜单,比如我这里选中work菜单,第2,选中end of menu,按下Inert,,再按OK,即可将该功能添加到work菜单中,效果如下图;
5.为该功能绑定一个快捷键,再次回到options—custom commands,选中刚刚的my-make-command,点击右下角的Keys:点击Assign New Key,之后会提示你输入你的新绑定的按键值,如果该键值在原来的设置有使用,能会提示你是否强制覆盖;最好设置一个较为冷门的键值,当然它也支持组合键的输入,之后就可以在看到框框里面显示新绑定的键值了;
6.回到工程主界面,选中work菜单,即可看到新增的my-make-command,后面对应的快捷键就是刚刚绑定的F11了。
7.快捷键测试,在工程主界面,按下快捷键F11,则可以看到BAT批处理文件的执行,也就表示正在执行编译—下载流程了。
七、 Q&A
至此,整一个教程介绍完毕,可能在真正的实践过程中,还是遇到这样那样的问题,但是没有关系,只要理解了其中的原理,配合出错的提示信息,相信大家都可以解决的。
以下罗列了一些,在教程实践中常见的问题,仅供参考:
- 首次通过SSH登入远程主机,提示信息如下
解答:此问题勿用担心,直接输入y再敲回车即可。该流程是SSH协议必须要做的一个操作。
2.POS仅有GPRS/CDMA模块,不具备WIFI和以太网模块,该教程是否使用?
解答:不适用。务必保证有WIFI模块或以太网模块。
3.当前windows开发环境没有网络,能适用该教程么?
解答:不适用。务必保证有网络环境,详见网络拓扑关系图。
4.正式版本镜像的POS机,带WIFI或以太网模块,该教材适用么?
解答:不一定适用。正式版本镜像的机器,在开机后,默认没有将sshd服务运行起来,可通过调试串口进入控制台,手动将sshd跑起来,命令如下 /etc/init.d/sshd start。
5.若要编译多个工程的时候,能否也采用该教程?
解答:此教程的原理是通用的,至于登入主机后执行什么命令,做什么操作,完全由自己编写的脚本去实现。
6.宿主机linux和嵌入式linux的ip是一直不变的么?
解答:这个取决于网络环境,一般而言,宿主机与windows主机采用桥接方式,自动开机后,它的ip是不会变的,而嵌入式linux因为是使用wifi连入局域网,可能会因为网络不稳定,导致wifi掉线,然后再连接的时候,自动获取的ip就变了。
7.出现连接被拒绝或连接超时的情况,是怎么回事?如图
解答:这个一般是由于远程主机的ip变了,需要重新在bat文件中配置下远程主机的ip地址。可通过ping工具配合排查,是否为网络不通的情况。
--------------------------------------------华丽丽的分界线-------------------------------------------------------
教程结束,有兴趣的,可私下沟通。谢谢。
下载附件:putty等工具 从这里下载 http://www.chiark.greenend.org.uk/~sgtatham/putty/download.html
1 ::This is a bat file which for logining on linux-host by putty in cmd-line with ssh2 protocol. 2 ::When windows host login on linux-host, it will excute some cmds list in -m ***.sh. 3 ::In this, it will be a make cmd for make out excuteable files in pos. 4 5 ::::::::::::::::::::::::::::: help :::::::::::::::::::::::::::::::::::::::::::::::::::: 6 ::Tips for configuration 7 ::There are only some params need to be configured. Here the list : 8 ::pro_app_name, configure for your make-app name 9 ::pro_path, configure for your make-app source project path in compile-linux host 10 ::host_upload_path, configure for your own share upload path in in compile-linux host 11 ::local_upload_path, configure your own share upload path in youe local windows host 12 ::usually, host_upload_path = local_upload_path, through VMware-shared filesystem 13 ::plink_host_ip, your compile-linux host ip address 14 ::plink_user, user for login compile-linux host 15 ::plink_pwd, passwd for user who login compile-linux host 16 ::plink_exe, plink.exe locate path in local windows host 17 ::pscp_ip, your pos-linux host ip address 18 ::pscp_user, user for login pos-linux host 19 ::pscp_pwd, passwd for user who login pos-linux host 20 ::pscp_remote_path, the pro_app_name locate path in pos-linux host 21 ::psftp_exe, psftp.exe locate path in local windows host 22 ::Other params can be always the same 23 :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: 24 25 ::Here is the begin of the BAT process 26 @echo off 27 28 ::set new windows run in max-windows=size :: "%~nx0" is its own app 29 ::echo "%1" 30 if "%1" == "max" goto top 31 start "tmp window" /max "%~nx0" max 32 ::echo "%~nx0" 33 ::pause 34 exit 35 :top 36 37 ::start /max 38 ::set cmd windows size (cols * lines) 39 mode con cols=100 lines=3000 40 ::set disp font in cmd window to utf-8 format 41 chcp 65001 42 43 ::The tile for every project 44 ::title POS程序---》编译---》下载 45 46 ::Some configretion for bat excute ::No space in the two side of "=" 47 ::Set again for every project 48 ::The path is in your linux-compile-host 49 set pro_app_name=YsChnBank 50 set pro_path=/share/ys_tms/ 51 set host_upload_path=/share/test_upload/upload/ 52 set local_upload_path=D:\VMwareShare\test_upload\upload\ 53 set make_cmd=make 54 set cp_app_2_upload=cp ./Release/%pro_app_name% %host_upload_path% 55 set ok_tips=echo -e \"%pro_app_name% project is compiled ok !!!!\" 56 set err_tips=echo -e \"%pro_app_name% project is compiled error, getting key input ...\"; getkey 57 set input_cmd_list=cd %pro_path%;%make_cmd%;if [ $? = 0 ];then %cp_app_2_upload%; %ok_tips% ;else %err_tips%; fi 58 59 ::Usually set one time is ok 60 ::The ip for your linux-compile-host will be changed in sometimes. 61 set plink_host_ip=192.168.1.80 62 set plink_user=root 63 set plink_pwd=mypasswd 64 ::Set your own path 65 set plink_exe=D:\my_putty\plink.exe 66 67 @echo on 68 ::use plink.exe (the cmd mode for putty) :: unsupported -load %putty_config% 69 ::-m .sh_param input mode 70 ::set putty_param_file=D:\my_putty\make.sh 71 ::%plink_exe% -ssh -pw %ssh_user_pwd% %ssh_user%@%ssh_host_ip% -m %putty_param_file% 72 ::echo "%plink_exe%" -ssh -pw %plink_pwd% %plink_user%@%plink_host_ip% %input_cmd_list% > 1234.txt 73 ::all only cmd input mode 74 "%plink_exe%" -ssh -pw %plink_pwd% %plink_user%@%plink_host_ip% %input_cmd_list% 75 76 @echo off 77 ::Check cmd excute ok ? 78 ::if %ERRORLEVEL% EQU 0 (echo success) else (echo fail) 79 80 @echo Begin to download %pro_app_name% to remote-linux-host ... 81 82 @echo off 83 ::Some configretion for upload app to pos-linux-host 84 set pscp_ip=192.168.2.61 85 set pscp_user=user0 86 set pscp_pwd=yourpasswd 87 ::config the app located path 88 set pscp_remote_path=/home/%pscp_user%/YsChnBank/ 89 set pscp_exe=D:\my_putty\pscp.exe 90 set psftp_exe=D:\my_putty\psftp.exe 91 92 @echo on 93 ::Call pscp.exe. It only upload one file in one time ! 94 ::"%pscp_exe%" -pw %pscp_pwd% "%local_upload_path%%pro_app_name%" %pscp_user%@%pscp_ip%:%pscp_remote_path% 95 96 ::create tmp batch_file for psftp 97 @echo off 98 set tmp_cmd=tmp.cmd 99 echo cd %pscp_remote_path% > %tmp_cmd% 100 echo del %pscp_remote_path%%pro_app_name% >> %tmp_cmd% 101 echo !@echo before upload, time %time% >> %tmp_cmd% 102 echo put %local_upload_path%%pro_app_name% >> %tmp_cmd% 103 echo !@echo before upload, time %time% >> %tmp_cmd% 104 ::echo put %local_upload_path%FinalData_cn.rar >> %tmp_cmd% 105 echo !@echo after upload, time %time% >> %tmp_cmd% 106 echo chmod a+x %pscp_remote_path%%pro_app_name% >> %tmp_cmd% 107 ::echo echo "uploading files ..." > %tmp_cmd% 108 ::echo cd /home/user0/ >> %tmp_cmd% 109 ::echo rmdir /home/user0/test123/ >> %tmp_cmd% 110 ::echo del /home/user0/test.test >> %tmp_cmd% 111 echo close >> %tmp_cmd% 112 ::set the tmp cmd file hidden 113 ::@attrib +s +r +a +h %tmp_cmd% 114 115 ::call psftp.exe for upload some files together 116 ::Can't disp the download percentage what has been done. 117 @echo on 118 @echo cur time %time% 119 ::echo "%psftp_exe%" -pw %pscp_pwd% %pscp_user%@%pscp_ip% -b %tmp_cmd% > 123456.txt 120 "%psftp_exe%" -pw %pscp_pwd% %pscp_user%@%pscp_ip% -b %tmp_cmd% 121 ::"%psftp_exe%" -pw %pscp_pwd% %pscp_user%@%pscp_ip% -b "D:\my_putty\tmp.cmd" 122 @echo cur time %time% 123 124 ::clear tmp cmd file 125 @attrib -s -r -a -h %tmp_cmd% 126 @del %tmp_cmd% 127 128 @pause 129 exit