カーミットは minicom のようなシリアル通信アプリで、独自のスクリプト言語を備えており、組み込みデバイスでの自動アップロードに使用しました。ただし、かなり制限されているか、バグが多いため、最終的に python と pyserial の使用に切り替えました。
ATコマンドセットやシリアルラインを介したシェルとの会話など、テキストモードを扱うときはいつでも、それは本当に強力です.
標準プロトコルを使用してバイナリ転送を行う必要がある場合は、通常、非対話モードでコマンド ライン ツールを使用し、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 :
# should add a try catch here
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')