Permalänk

Skriva till filer över serial?

Så jag försöker skriva 3 filer genom en TTL kabel. Men jag hittar inget bra sätt att skriva till filerna. Just ny använder jag python med pyserial för att skriva. Fast det är med vanlig navigering eg.

serial.write('username\n'.encode()) time.sleep(1) serial.write('password\n'.encode()) time.sleep(1) serial.write('nano /etc/host\n'.encode()) time.sleep(1) serial.write('test\n'.encode())

etc...

Fast om den inte svarar eller tar mer än sleep tiden så blir allt fel. Finns det något bättre sätt att skriva till en fil genom serial då det inte går att överföra filer?

Permalänk
Hedersmedlem

cat <<EOF >>/file
Bla bla
Bla blahaj
EOF

Men du ska nog använda serial.read lite så att programmet inte gör saker förrän det är på rätt ställe.

Visa signatur

Det kan aldrig bli fel med mekanisk destruktion

Permalänk
Medlem
Skrivet av Frejoh466:

Fast om den inte svarar eller tar mer än sleep tiden så blir allt fel. Finns det något bättre sätt att skriva till en fil genom serial då det inte går att överföra filer?

Använd paketet lrzsz på linuxburken (efter installation så skriv rz i konsollen för att ta emot filer) och sen skicka filerna med zmodem-protokollet från Python.
https://pypi.org/project/modem/ typ.

Permalänk

Vet inte varför jag glömde att echo finns.

ser.write(str.encode('echo "{}, {}" > /etc/file\n'.format(TEXT1,TEXT2)))

Jag fick också till att den kollar om enheten har tagit emot kommandot, så nu ser det ut som,

def find(TEXT): while True: sio = io.TextIOWrapper(io.BufferedRWPair(ser, ser)) sio.flush() STR = sio.readline() if TEXT == STR return time.sleep(1) ser.write(str.encode('username\n')) TEXT = 'username' find(TEXT) ser.write(str.encode('password\n')) TEXT = 'password' find(TEXT) time.sleep(0.5) ser.write(str.encode('echo "{}, {}" > /etc/file\n'.format(TEXT1,TEXT2))) time.sleep(1) serial.write('reboot\n') sys.exit()

Kanske borde lägga till en exit i def så att programmet inte hänger sig.

Vet dock inte om jag borde byta ut io till något liknande

buffer = "" while True: oneByte = ser.read(1) if oneByte == b"\r": print(buffer) break else: buffer += oneByte.decode("ascii")

Permalänk

Men koden att läsa från seriell är ju lite värdelös. Om jag skriver "cd /etc" så ser jag att den svarar med "cd /etc" men jag vill ju ha svaret från att skicka "cd /etc" inte att den har tagit emot kommandot. Annars vet jag ju inte om jag verkligen är i /etc

Skickades från m.sweclockers.com

Permalänk
Medlem
Skrivet av Frejoh466:

Men koden att läsa från seriell är ju lite värdelös. Om jag skriver "cd /etc" så ser jag att den svarar med "cd /etc" men jag vill ju ha svaret från att skicka "cd /etc" inte att den har tagit emot kommandot. Annars vet jag ju inte om jag verkligen är i /etc
Skickades från m.sweclockers.com

Använda kommandot "pwd" (print working directory) för att se vart du är i filsystemet.

Permalänk
Hedersmedlem

Har du funderat på att använda PPP för att sätta upp en IP-anslutning mot din inbäddade Linuxburk? Beroende på din applikaton så kan det ju vara en möjlig llsning.

Annars, precis som @iXam var inne på, lrzsz och en terminal med stöd för Zmodem. Försök inte återuppfinna hjulet, allt det här var vardagsmat på 80-talet och tidigt 90-tal.

Eller handlar detta om en burk som du inte kan installera eget på?

Permalänk
Skrivet av iXam:

Använda kommandot "pwd" (print working directory) för att se vart du är i filsystemet.

Problemet är att jag får för svar "pwd" allt jag skickar får jag som svar.

Men jag löste problemet,

LOGIN_TIME = time.time() while True: response = ser.readline() response = response.decode() response = response.rstrip('\n\r') if (response.find('login:') != -1): ser.write(str.encode('username\n')) if (response.find('Password:') != -1): ser.write(str.encode('password\n')) A = 1 if (response.find('root@') != -1) & A == 1: A = 0 break if (time.time() - LOGIN_TIME) > 35: print(' ',end='\r') print('restart', end='\r') time.sleep(10) LOGIN_TIME = time.time() print(' ', end='\r') print(response, end='\r') print(' ', end='\r') ser.write(str.encode('shutdown -P now\n'))

Skickades från m.sweclockers.com