Kermit是一款串口通信应用程序,类似于minicom,并且它有自己的脚本语言。我曾经在嵌入式设备上使用它进行一些自动上传操作。但是,它相当受限和/或存在缺陷,因此我最终转而使用Python和pyserial。
每当您处理文本模式时,例如AT命令集或通过串行线路与shell交互时,它非常强大。
如果我需要使用某些标准协议进行二进制传输,则通常会以非交互模式使用命令行工具,并从我的Python脚本中生成它们。
以下是我构建的部分工具:等待某些输入,通过xmodem发送数据,向u-boot发送命令并使用Kermit协议启动传输。我将其用于嵌入式设备的自动闪存和测试。
class Parser :
def __init__(self, sport_name):
self.currentMsg = ''
if sport_name :
self.ser = serial.Serial(sport_name, 115200)
def WaitFor(self, s, timeOut=None):
self.ser.timeout = timeOut
self.currentMsg = ''
while self.currentMsg.endswith(s) != True :
c=self.ser.read()
if c != '' :
self.currentMsg += c
sys.stdout.write(c)
else :
print 'timeout waiting for ' + s
return False
return True
def XmodemSend(self,fname):
if not self.WaitFor('C', 1) :
print 'RomBOOT did not launch xmodem transfer'
return
self.ser.flushInput()
self.ser.close()
call(["xmodem","-d",self.ser.port,"-T",fname])
self.ser.open()
def UbootLoad(self, fname):
self.ser.write('loadb 0x20000000\n')
if not self.WaitFor('bps...',1) :
print 'loadb command failed'
sys.exit()
self.ser.flushInput()
self.ser.close()
retcode=call(['kermit','-y','kermit_init','-s',fname])
if retcode != 0 :
print 'error sending' + fname
sys.exit()
self.ser.open()
self.UbootCmd('echo\n')