Shell 脚本笔记01-tftp服务器自动下载调试

由于工作上要反复从PC上交叉编译好应用程序,并通过tftp下载到ZYNQ板子上进行运行调试。重复敲命令过于麻烦,所以编写一个脚本实现自动下载,改权限和运行功能。

一、准备工作

将ZYNQ7000开发板和主机端(PC或虚拟机)连接到同一网段。

主机端安装好tftpd-hpa服务器和xinet.d,启动运行

z@ubuntu:~$ sudo service xinetd restart     #开启xinetd服务     
[sudo] password for z: 
xinetd stop/waiting
xinetd start/running, process 4848
z@ubuntu:~$ sudo service tftpd-hpa restart   #开启tftpd服务器
tftpd-hpa stop/waiting
tftpd-hpa start/running, process 4880
z@ubuntu:~$ 

在ZYNQ端安装好tftp服务。

二、编写脚本GetRun.sh

 1 #! /bin/sh
 2 
 3 HOST="192.168.202.44"               #主机地址
 4 
 5 FILE_NAME=$1                    #输入参数,主机端文件名
 6 
 7 INFO="[ZYNQ-QT]:"                 #文件执行提示信息
 8 
 9 
10 if [ "$FILE_NAME" = "" ]             #判断文件名是否为空
11 then
12         echo $INFO"Not comfirm the FILE!"   #为空则给出提示信息并退出
13         exit
14 fi
15 
16 echo $INFO"Get ${FILE_NAME} form ${HOST}\n"  #打印提示信息,开始tftp下载
17 
18 tftp ${HOST} <<!                   #注意“<<!”,表示等待键盘输入
19 get ${FILE_NAME}
20 quit
21 !                           #键盘输入结束
22 
23 FILE_LENGTH=$(ls -l ${FILE_NAME} | awk '{print $5}')  #获取下载文件的文件长度
24 
25 if [ $FILE_LENGTH -gt 0 ]             #如果文件长度大于0
26 then
27 
28  echo "\n"$INFO"change mode with exe"
29 
30  chmod +x ${FILE_NAME}               #增加可执行属性
31 
32  echo $INFO"run: {${FILE_NAME}}"
33  echo $INFO"----------------------------------\n"
34  ./${FILE_NAME}                   #运行程序
35  echo $INFO"----------------------------------"
36 else                          #如果文件长度等于0,表示下载失败
37  echo $INFO"[${FILE_NAME}] is bad or broken." 
38  echo $INFO"remove the Null-file [${FILE_NAME}]"
39  rm ${FILE_NAME}                   #删除空文件
40 fi

 

ZYNQ上运行的是linrao Ubuntu系统,首次下载GetRun.sh文件

root@linaro-ubuntu-desktop:/home/linaro/tftpboot# tftp 192.168.202.44
tftp> get GetRun.sh
Received 696 bytes in 0.0 seconds
tftp> quit
root@linaro-ubuntu-desktop:/home/linaro/tftpboot# ls
GetRun.sh

增加执行权限

root@linaro-ubuntu-desktop:/home/linaro/tftpboot# chmod +x GetRun.sh

下载test_spi程序并执行

root@linaro-ubuntu-desktop:/home/linaro/tftpboot# ./GetRun.sh test_spi
[ZYNQ-QT]:Get test_spi form 192.168.202.44


tftp> Received 9334 bytes in 0.1 seconds
tftp>
[ZYNQ-QT]:change mode with exe
[ZYNQ-QT]:run: {test_spi}
[ZYNQ-QT]:----------------------------------


init_SPI1()++
handle_spi1dev = 0
can't set spi mode to 32bits
handle_spi1dev = 3
init_SPI1()--


[ZYNQ-QT]:----------------------------------
root@linaro-ubuntu-desktop:/home/linaro/tftpboot#

如需要对GetRun.sh进行更新,可直接运行

root@linaro-ubuntu-desktop:/home/linaro/tftpboot# ./GetRun.sh GetRun.sh
[ZYNQ-QT]:Get GetRun.sh form 192.168.202.44

tftp> Received 696 bytes in 0.0 seconds
tftp>
[ZYNQ-QT]:change mode with exe
[ZYNQ-QT]:run: {GetRun.sh}
[ZYNQ-QT]:----------------------------------

[ZYNQ-QT]:Not comfirm the FILE!          这是更新后的程序,再次运行,由于缺少参数报错
[ZYNQ-QT]:----------------------------------
root@linaro-ubuntu-desktop:/home/linaro/tftpboot#

三、需要注意的问题

  • 第一行增加 #!/bin/sh,指定shell解析程序地址
  • 变量赋值语句中,等号两边不能有空格 
    HOST = "192.168.202.44" 是非法的
  • 命令行可以用括号括起来,添加$将执行结果赋值给变量,
  • FILE_LENGTH=$(ls -l ${FILE_NAME} | awk '{print $5}')
  • if语句方括号两边的空格不能省
  • if [$FILE_LENGTH -gt 0] 将会报错
  • 当类似于tftp类似的工具需要多次人工输入时,可以使用  << ! xxx ! 指定输入内容
posted @ 2017-03-29 15:08  夏天雨后的吉他有点风  阅读(1352)  评论(0编辑  收藏  举报