移植自动交互工具expect5.45到arm linux(tcl8.6.3移植)

本文介绍如何将自动交互工具Expect及其依赖TCL移植到ARM Linux平台。包括TCL的交叉编译过程及Expect的编译步骤,适用于需要进行远程设备自动化操作的场景。

分类: 嵌入式

原文:移植自动交互工具expect5.45到arm linux(tcl8.6.3移植)

参考:

Linux shell 交互式编程、TCL/TK 和 Expect 编译与安装、expect 编程
Expect+TCL8.6交叉编译 arm-linux


工作需要telnet/ssh自动登录远程设备并进行一些固定操作。上网搜了一下,刚好有个自动交互工具expect。
我的设备都是基于arm的。网上对expert移植到arm的文章特少,特此记录,以备不时之需。
由于expect是基于tcl语言的,所以移植expect前,需先交叉编译tcl
1、下载地址
tcl:http://www.tcl.tk/software/tcltk/download.html
expect:http://sourceforge.net/projects/expect/files/latest/download?source=files
2、交叉编译tcl
lingd@ubuntu:~/arm/download$ tar -zxf tcl8.6.3-src.tar.gz 
lingd@ubuntu:~/arm/download$ cd tcl8.6.3/unix/
lingd@ubuntu:~/arm/download/tcl8.6.3/unix$ export ac_cv_func_strtod=yes 
lingd@ubuntu:~/arm/download/tcl8.6.3/unix$ export tcl_cv_strtod_buggy=1
lingd@ubuntu:~/arm/download/tcl8.6.3/unix$ ./configure --prefix=/home/lingd/arm/install/tcl --host=arm-linux
lingd@ubuntu:~/arm/download/tcl8.6.3/unix$ make
lingd@ubuntu:~/arm/download/tcl8.6.3/unix$ make install
lingd@ubuntu:~/arm/download/tcl8.6.3/unix$ ls /home/lingd/arm/install/tcl/
bin  include  lib  man  share
lingd@ubuntu:~/arm/download/tcl8.6.3/unix$ ls /home/lingd/arm/install/tcl/bin/
tclsh8.6
lingd@ubuntu:~/arm/download/tcl8.6.3/unix$ ls /home/lingd/arm/install/tcl/lib/
itcl4.0.2  libtcl8.6.so  libtclstub8.6.a  pkgconfig  sqlite3.8.7.1  tcl8  tcl8.6  tclConfig.sh  tclooConfig.sh  tdbc1.0.2  tdbcmysql1.0.2  tdbcodbc1.0.2  tdbcpostgres1.0.2  thread2.7.1


注意,/configure …… 之前应该先:
export tcl_cv_strtod_buggy=1
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
http://blog.163.com/kesic2004_com/blog/static/1655294792013018104555314/
解决方法:
3、移植expect
lingd@ubuntu:~/arm/download/tcl8.6.3/unix$ cd ../..
lingd@ubuntu:~/arm/download$ ls
expect5.45.tar.gz  hello  hello.c  tcl8.6.1-src.tar.gz  tcl8.6.3  tcl8.6.3-src.tar.gz  type9
lingd@ubuntu:~/arm/download$ tar -zxf expect5.45.tar.gz 
lingd@ubuntu:~/arm/download$ cd expect5.45/
注意,expect不支持交叉编译,所以在configure,我没有用--host=arm-linux,而是先用默认的X86 gcc,等configure后再修改Makefile
configure配置参数: 
1)--prefix=/home/lingd/arm/install/expect:指定安装目录
2)--with-tcl=/home/lingd/arm/install/tcl/lib:指定tcl所在目录,通常指定为tcl安装目录下的lib路径
3)--with-x=no: 告诉配置脚本,不要查找 tk (tcl 的 GUI 组件) 或 X 窗口系统库
4)--with-tclinclude=/home/lingd/arm/install/tcl/include:指定tcl头文件所在目录,通常指定为tcl安装目录下的include路径
lingd@ubuntu:~/arm/download/expect5.45$ ./configure --prefix=/home/lingd/arm/install/expect --with-tcl=/home/lingd/arm/install/tcl/lib --with-x=no --with-tclinclude=/home/lingd/arm/install/tcl/include
lingd@ubuntu:~/arm/download/expect5.45$ vim Makefile
将Makefile中
CC = gcc
改为
CC = arm-linux-gcc
lingd@ubuntu:~/arm/download/expect5.45$ make
lingd@ubuntu:~/arm/download/expect5.45$ make install
make install会出现错误,可以不管,只要能正常编译生成expect和libexpect5.45.so即可
3、安装
在expect源码目录下可找到expect和libexpect5.45.so  
在tcl安装目录下可找到libtcl8.6.so和tcl8.6目录
将libexpect5.45.so、libtcl8.6.so和tcl8.6目录拷贝到开发板/lib目录下
将expect拷贝到/bin目录下
如果开发板无libz.so.1库,还需要拷贝libz.so.1.2.8到开发板,并创建软链接libz.so.1
4、expect应用
先看一个export脚本范例:通过指定端口,自动telnet登录到指定主机,并将指定目录包含的文件名输出到主机/tmp/dir文件中
#指明脚本解析程序为/app/bin/expect
#!/app/bin/expect
#判断输入参数
if {$argc != 3} {
send_user "usage: $argv0 ip port directory \n"
exit
}


#设置变量 
set IP [lindex $argv 0]
set PORT [lindex $argv 1]
set DIR [lindex $argv 2]
#设置expect命令等待时间
set timeout 30


#telnet远程主机
spawn telnet $IP $PORT


#telnet用户登录
expect "*login*"
send "root\n"
expect "Password:"
send "globaltech\n"
#shell交互
expect "*# "
send "cd /tmp/ \n"
expect "*# "
send "ls $DIR > dir \n"
expect "*# "
send "exit \n"
send_user "\n$argv0 finish! \n"


从上例可以看出,expect自动交互最常用3个命令:spawn,expect和send
1)expert命令可以接收一个字符串参数,也可以接收正则表达式参数,用于等待一个进程的反馈。如果进程反馈信息中包含这个字符串或正则表达式,则立即返回;否则,等待一段时间后返回,等待时间由timeout变量决定
2)send命令接收一个字符串参数,并将该参数发送给一个进程
3)spawn命令接收一个shell命令(通常为telnet,ssh,ftp等),并启动一个新进程来运行这个shell命令。spawn后的send和expect命令都是和spawn打开的进程进行交互的,spawn前的send和expect命令是和标准输入输出进行交互
4)send_user命令接收一个字符串参数,并将该参数输出到标准输出
以上命令都是实现自动交互的,如果需要人为干预可以用interact命令

expect用户指南: http://www.tcl.tk/man/expect5.31/expect.1.html
yolo算法港口码头船舶目标检测数据集 目标类别:['ship'] 中文类别:['船舶'] 训练集:16046 张 验证集:1971 张 测试集:983 张 总计:19000 张 该数据集提供了data.yaml文件,内容如下: train: ../train/images val: ../valid/images test: ../test/images nc: 1 names: ['ship'] 该数据集聚焦于港口码头及近海水域的船舶检测任务,涵盖多种类型船舶在不同天气、光照和水文条件下的真实场景。图像样本覆盖了货轮、客轮、拖船、油轮及工程船等典型船只,充分体现了海上交通与港口作业的复杂性与多样性。通过高精度标注,该数据集为海上智能监控、船舶识别与航行安全预警系统提供了高质量的数据支撑,具有重要的实际应用价值。 该数据集在训练集、验证集和测试集之间实现了科学合理的分布,训练集包含16046张图像,验证集1971张,测试集983张,总计19000张。这种分布结构确保了模型在训练过程中具备充足的样本学习能力,同时验证集与测试集规模适中,能够有效评估模型的泛化性能与稳定性,符合深度学习项目对数据划分的标准要求。 该数据集的标注工作严谨规范,所有船舶均采用精确边界框进行标注,覆盖了不同尺寸、姿态和视角下的目标实例。标注框紧密贴合船舶轮廓,未出现明显偏移或遗漏,且在复杂背景(如水面反光、雾天、桥梁遮挡)下仍保持高一致性。标注信息完整可靠,为后续模型训练提供了坚实基础。 该数据集可广泛应用于港口自动化管理、海上交通监控、船舶动态跟踪、航道安全预警以及海洋执法等领域。其丰富的场景覆盖和多样化的船舶类型使其特别适用于智慧港口建设、海上搜救系统开发及航运物流智能化升级,能够有效提升相关系统的识别准确率与响应效率,推动海洋经济数字化转型。
内容概要:本文围绕弱电网环境下虚拟同步发电机(VSG)的正负序阻抗建模与稳定性分析展开,基于序阻抗建模方法,利用Simulink搭建VSG的正负序阻抗模型,深入研究其在弱电网条件下的阻抗特性及并网系统的交互稳定性。重点探讨了正负序阻抗的解耦特性及其对系统宽频振荡的影响机制,并采用扫频法进行小信号建模与模型有效性验证,为构网型变流器在复杂电网环境中的稳定性分析提供了理论依据与仿真技术支持。该研究对于新能源高比例接入背景下的并网系统稳定运行具有重要意义。; 适合人群:电力电子、新能源并网、电力系统自动化、电气工程等相关专业的研究生、高校科研人员及从事新能源并网技术研发的工程技术人员。; 使用场景及目标:①掌握基于Simulink的虚拟同步发电机正负序阻抗建模方法;②理解弱电网条件下VSG并网系统的稳定性影响因素与振荡机理;③学习并应用扫频法进行小信号稳定性分析与阻抗特性辨识;④为宽频振荡分析、构网型控制策略设计、新能源并网稳定性评估等科研与工程问题提供可复现的技术路径与仿真基础。; 阅读建议:建议读者结合Matlab/Simulink环境动手复现文中模型,重点关注正负序激励信号的注入方式、阻抗扫描流程及Bode图/Nyquist图的稳定性判据解读,同时可延伸阅读相关博士论文与高水平期刊文献,深化对序阻抗建模理论与实际工程应用的理解。
内容概要:本文围绕虚拟同步发电机(VSG)接入弱电网的序阻抗建模与稳定性分析展开,通过Simulink仿真实现VSG系统的正负序阻抗特性建模,并采用扫频法验证模型的准确性。深入探讨了在弱电网背景下,VSG并网系统因电网与变流器之间阻抗交互引发的稳定性问题,系统阐述了正负序阻抗解耦建模的理论基础与实现方法,及其在小信号稳定性评估中的关键作用。资源包配套提供了完整的MATLAB代码与Simulink仿真模型,涵盖了阻抗建模、小信号分析、扫频辨识等核心技术环节,有助于科研人员深入理解构网型变流器的动态响应机制与稳定机理,为相关高水平学术研究与工程实践提供有力支撑。; 适合人群:具备电力电子、电力系统分析等相关基础知识,从事新能源并网技术、微电网控制、虚拟同步机(VSG)或构网型变流器研究的研究生、科研人员及工程技术人员。; 使用场景及目标:①掌握虚拟同步发电机在弱电网条件下的序阻抗建模理论与具体实现方法;②学习并实践基于Simulink的小信号分析与扫频辨识技术,掌握奈奎斯特判据等稳定性分析手段;③能够复现、验证VSG系统的序阻抗特性曲线,分析其稳定边界,服务于学术论文撰写、科研项目攻关及创新性控制策略的设计与验证。; 阅读建议:此资源以仿真复现为核心目标,建议读者务必结合所提供的完整代码与仿真模型进行动手实践,重点关注扫频激励信号的施加方式、频率响应数据的提取流程以及阻抗曲线的物理内涵解读,同时应查阅相关经典文献,以深化对构网型控制原理与电力系统稳定性理论的系统性理解。
源码下载地址: https://pan.quark.cn/s/a4b39357ea24 在信息技术领域中,网络通信扮演着至关重要的角色,而Socket编程则是达成此目的的关键技术。本文将详细研究利用C#语言进行Socket编程的方法,尤其关注在处理异步通信和应对TCP粘包问题的第三阶段。C#拥有完备的类库资源,为网络编程提供了便利,使得开发者能够便捷地开发基于TCP/IP的客户端和服务器程序。 让我们首先明确Socket的概念。Socket是一种进程间通信(IPC)的工具,它使网络上的应用程序能够进行双向交流。在C#语言中,System.Net.Sockets命名空间中包含了Socket类,该类是执行TCP/IP通信的基础。 异步通信在现代网络应用中具有核心地位,因为它能显著提升程序的响应能力和工作效率。C#的Socket类包含了BeginConnect、BeginSend、BeginReceive等异步操作方法,这些方法使得网络操作可以在不干扰主线程的情况下进行。异步通信借助事件驱动机制运作,当数据准备就绪时,系统会启动相应的事件,随后回调函数会被执行以处理数据。 在TCP协议的框架下,由于其流式传输的特点,多个小的数据单元可能会被组合成一个大单元发送(粘包现象),或者一个大单元可能会被分割成多个小单元发送(拆包现象)。这种现象在数据解析过程中可能引发困难。处理TCP粘包问题主要有两种途径:设定合适的消息界限或者采用固定长度的消息格式。 1. 设定消息界限:在每个数据单元的末尾附加特定的分隔符,比如空字符或特殊字符串,这样在接收端可以通过分隔符来区分每个独立的数据单元。 2. 固定长度消息:每个数据单元都设定固定的长度,接收端依据预设的长度来拆分数据。 在C#...
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值