天天看点

expect移植到powerPC平台的过程

  1. expect介绍

expect时用与提供自动交互的工具(工作需要telnet/ssh自动登录远程设备并进行一些固定操作)。比如如果想要用ssh登陆服务器,每次都输入密码你觉得麻烦,那你就可以使用expect来做自动交互,这样的话就不用每次都输入密码了。

先看例子:

#!/usr/bin/expect

#set timeout 20 #设置超时时间

spawn ssh [email protected]

expect "*password:"

send "123\r"# expect "*#"

interact

解释:

1.#!/usr/bin/expect :需要先安装软件,然后来说明用expect来执行

2.spawn ssh [email protected] :spawn是进入expect环境后才可以执行的expect内部命令,用来执行它后面的命令。

3.expect "*password:" :也是expect的内部命令,用来解惑关键的字符串,如果有,就会立即返回下面设置的内容,如果没有就看是否设置了超时时间。

4.send "123\r":这时执行交互式动作,与手工输入密码等效,在expect截获关键字之后,它就会输入send后面的内容。

5.interact :执行完毕后把持交互状态,把控制台,这时候就可以进行你想要进行的操作了。如果没有这一句,在登陆完成之后就会退出,而不是留在远程终端上。

2.源码下载

expect5.45.3.tar.gz:

https://sourceforge.net/projects/expect/files/Expect/5.45/expect5.45.tar.gz/download

tcl8.6.8-src.tar.gz:

http://tcl.sourceforge.net/

也可以从CSDN下载。

新建目录soft,将下载的expect5.45.3.tar.gz、tcl8.6.8-src.tar.gz放在soft目录下。

3.交叉编译TCL

由于expect是基于tcl语言的,所以移植expect前,需先交叉编译tcl。

[email protected]:/home/hanyang/soft# tar zxf tcl8.6.8-src.tar.gz

[email protected]:/home/hanyang/soft# mkdir install_tcl

[email protected]:/home/hanyang/soft# cd tcl8.6.8/unix/

注意,/configure …… 之前应该先:

[email protected]:export tcl_cv_strtod_buggy=1

[email protected]:export ac_cv_func_strtod=yes

否则,交叉编译tcl时会出现以下错误(普通编译无此错误)

fixstrtod.o: In function `fixstrtod':

fixstrtod.c:(.text+0x0): multiple definition of `fixstrtod'

strtod.o:strtod.c:(.text+0x0): first defined here

[email protected]:/home/hanyang/soft/tcl8.6.8/unix#export CC=/home/hanyang/BRD_BSP_Version/export/brd_bsp/tools/ppc_gcc4.8.2_glibc2.18.0_multi/bin/ppce6500-hardfloat-linux-gnu-gcc

[email protected]:/home/hanyang/soft/tcl8.6.8/unix#

./configure --prefix=/home/hanyang/soft/install_tcl/ --host=powerpc

生成Makefile

(configure时留意一下是否有这句话,没有的话可能有问题checking for powerpc-gcc... /home/hanyang/BRD_BSP_Version/export/brd_bsp/tools/ppc_gcc4.8.2_glibc2.18.0_multi/bin/ppce6500-hardfloat-linux-gnu-gcc

[email protected]:/home/hanyang/soft/tcl8.6.8/unix# make

[email protected]:/home/hanyang/soft/tcl8.6.8/unix# make install

在/home/hanyang/soft/install_tcl/lib路径下获取libtcl8.6.so和tcl8.6文件夹。

(file libtcl8.6.so 看一下是否是交叉编译运行在PowerPC下的 。)

4.编译expect

[email protected]:/home/hanyang/soft# tar zxf expect5.45.3.tar.gz

注意,expect不支持交叉编译,所以在configure,需要先用默认的X86 gcc编译,等configure后再修改Makefile

[email protected]:/home/hanyang/soft/expect5.45.3# ./configure  \

--prefix=/home/hanyang/soft/install_expect/   \

--with-tcl=/home/hanyang/soft/install_tcl/lib  \

--with-x=no                        \

--with-tclinclude=/home/hanyang/soft/install_tcl/include  \

1)--prefix=/home/hanyang/soft/install_expect/:指定安装目录

2)--with-tcl=/home/hanyang/soft/install_tcl/lib:指定tcl所在目录,通常指定为tcl安装目录下的lib路径

3)--with-x=no: 告诉配置脚本,不要查找 tk (tcl 的 GUI 组件) 或 X 窗口系统库

4)--with-tclinclude=/home/hanyang/soft/install_tcl/include:指定tcl头文件所在目录,通常指定为tcl安装目录下的include路径

(检查打印信息checking for gcc... gcc)

生成Makefile后,修改

CC=/../../ppce6500-hardfloat-linux-gnu-gcc

AR=/../../ppce6500-hardfloat-linux-gnu-ar

[email protected]:/home/hanyang/soft/expect5.45.3# make

[email protected]:/home/hanyang/soft/expect5.45.3# make install

make install会出现错误,可以不管,只要能正常编译生成expect和libexpect5.45.so即可

编译生成libexpect5.45.3.so、expect,file看一下是否是运行在PowerPC平台上的。

5.移植

expect                   -------------\usr\local\bin

libexpect5.45.3.so、libtcl8.6.so-------------\lib

tcl8.6                    ------------\usr\lib

调用expect,进入expect环境,说明安装成功。