【知識分享】嵌入式應用程序開發,Windows環境一鍵編譯下載

【知識分享】嵌入式應用程序開發,Windows環境一鍵編譯下載

【版權聲明: 本文爲博主原創作品,請尊重勞動果實,請保留原文鏈接,謝謝】

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-UXLinuxAIXSolaris、Digital UNIXIrix,以及其他平臺,都可運行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 [email protected]  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  [email protected] -b tmp.cmd

"D:\my_putty\psftp.exe" -pw appuser0  [email protected] -b tmp.cmd

注意當tmp.cmd使用相對路徑時,務必保證它處於執行目錄下,否則可能會報“Fatal: unable to open tmp.cmd”

正常執行結果如下:

D:\my_putty>"D:\my_putty\psftp.exe" -pw appuser0  [email protected] -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批處理就簡單多了。實現的思路就是:

  1. 配置好宿主機linux、嵌入式linux的用戶名、密碼、ip等信息後,從windows下啓動該BAT批處理;
  2. 先使用plink遠程登入進入宿主機linux系統,切換到源碼對應的工程目錄(這裏涉及一個windows與虛擬機共享目錄的問題,自行了解並實踐,默認工程是放在共享目錄裏面),然後執行make命令;之後,再講編譯出來的可執行文件拷貝到另一個上傳/下載專用的共享目錄中,再退出plink;若編譯失敗,則提示出錯信息;當然,這裏不講生成的可執行文件拷貝到共享目錄也可以,只是拷貝到統一路徑後,後面的步驟寫起來相對容易點;
  3. 使用psftp遠程登入嵌入式linux(POS機),傳入生成的tmp.cmd批處理文件,該文件裏面寫好了,該將什麼文件下載到POS機的什麼路徑下,是動態生成的,無需編寫tmp.cmd;下載完成了,執行close,退出psftp;
  4. 回到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

至此,整一個教程介紹完畢,可能在真正的實踐過程中,還是遇到這樣那樣的問題,但是沒有關係,只要理解了其中的原理,配合出錯的提示信息,相信大家都可以解決的。

以下羅列了一些,在教程實踐中常見的問題,僅供參考:

  1. 首次通過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

Windows下批處理文件demo

 

posted @ 2016-11-21 21:29 Mr.Recan 閱讀(...) 評論(...) 編輯 收藏

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章