#!/usr/bin/python
import os
import sys
import serial
import readchar
import argparse
import threading
from time import sleep
def print_serial():
while True:
sys.stdout.write(ser.read())
def send_file(path, ch):
f = open(path, 'rb')
c = f.read()
f.close()
n = len(c)
buf = [(n % 65536) % 256, (n % 65536) / 256, (n / 65536) % 256, (n / 65536) / 256]
ser.write(ch)
ser.write(buf)
sleep(1)
ser.write(c)
sleep(1)
parser = argparse.ArgumentParser()
parser.add_argument('-port', default='/dev/ttyUSB0')
args = parser.parse_args()
if os.geteuid() != 0:
print "run me as root"
sys.exit()
if os.path.exists('zpm.bin') == False:
print 'failed to open zpm.bin'
sys.exit()
print """Upload commands
'A' - allrom.bin upload (2MB)
'a' - loader.bin upload (8K max)
'k' - zimage.dat upload (581K max)
'u' - ramdisk.gz upload (1.5MB max) Follow changes with 'WYes' to write
'?' - show zipit information
Other commands
'R' - grab ROM
'x' - exit\n"""
f = open('zpm.bin', 'rb')
zpm = f.read()
f.close()
ser = serial.Serial(args.port, 9600)
for x in range(2048):
ser.write(zpm[x])
ser.close()
ser = serial.Serial(args.port, 57600)
thread = threading.Thread(target=print_serial)
thread.daemon = True
thread.start()
while True:
ch = readchar.readchar()
if ch == 'A':
print 'send allrom.bin...'
send_file('allrom.bin', ch)
elif ch == 'a':
print 'send loader.bin...'
send_file('loader.bin', ch)
elif ch == 'k':
print 'send zimage.dat...'
send_file('zimage.dat', ch)
elif ch == 'u':
print 'send ramdisk.gz...'
send_file('ramdisk.gz', ch)
elif ch == 'x':
break
else:
ser.write(ch)
ser.close()
操作指令跟原本Upload程式一樣
$ sudo ./run.py
Upload commands
'A' - allrom.bin upload (2MB)
'a' - loader.bin upload (8K max)
'k' - zimage.dat upload (581K max)
'u' - ramdisk.gz upload (1.5MB max) Follow changes with 'WYes' to write
'?' - show zipit information
Other commands
'R' - grab ROM
'x' - exit
ZPM .02 - 57.6Kbps new cmds
Loader addresses: 00002000 00090000
OK >
send loader.bin...
BEG:00000D30END:E6OK >
send zimage.dat...
BEG:00084DE8END:76OK >
send ramdisk.gz...
BEG:0013720CEND:B3OK >
E+W PWD?ERASING,ERASED,WRITTEN!
OK >
司徒終於可以在Pandora掌機上開發Zipit Z1的程式了!