Differences

This shows you the differences between two versions of the page.

Link to this comparison view

putusb [2012/01/02 21:20] (current)
paulf created
Line 1: Line 1:
 +====== putusb ======
  
 +[[https://​github.com/​muromec/​putusb|putusb]] is a utility by Ilya Petrov (muromec) for low-level communication with some Motorola smartphones and also Tegra devices. putusb runs on a host PC and communicates with the Tegra system (the AC100 in our case) through a dedicated USB port (the mini USB port on the AC100).
 +
 +Unlike [[nvflash]] (which is distributed by nvidia as a binary only), putusb is a python script and should run on any system supported by [[http://​sourceforge.net/​projects/​pyusb/​|PyUSB]].
 +
 +====== Installing putusb ======
 +
 +==== Prerequisitives ====
 +
 +  * Python intepreter (2.7 is known to work)
 +  * PyUSB (the old 0.x branch is known to work)
 +
 +==== Installation ====
 +
 +<​code>​
 +$ git clone git://​github.com/​muromec/​putusb.git
 +</​code>​
 +
 +==== Usage ====
 +
 +If you have Qt4 installed, you can use
 +<​code>​$ ./​qt-putusb.py</​code>​
 +
 +If you want full control of the operations, you can use it either from a python interactive command line or from a script. This example will let you to make a backup of your device:
 +<​code>​
 +import putusb
 +
 +dev = putusb.NvidiaUsb()
 +dev.boot("​bin/​tegra_pre_boot.bin",​ "​bin/​fastboot.stock.bin"​)
 +
 +print '​LOADED'​
 +print '​Current partition table:'​
 +print dev.parts()
 +
 +for i in range(2, 14):
 +    f = open("​part"​+str(i),​ '​wb'​)
 +    f.truncate()
 +    map(f.write,​ dev.read_part(i) )
 +    f.close()
 +</​code>​
 +
 +On my 32Gb ac100-116 the partition table looks like this:
 +<​code>​
 +[Part(num=2,​ name='​BCT\x00',​ typ=18, start_sectors=0,​ size_sectors=1536,​ sector=2048)
 + ​Part(num=3,​ name='​PT\x00\x00',​ typ=18, start_sectors=1536,​ size_sectors=256,​ sector=2048)
 + ​Part(num=4,​ name='​EBT\x00',​ typ=18, start_sectors=1792,​ size_sectors=1024,​ sector=2048)
 + ​Part(num=5,​ name='​SOS\x00',​ typ=18, start_sectors=2816,​ size_sectors=2560,​ sector=2048)
 + ​Part(num=6,​ name='​LNX\x00',​ typ=18, start_sectors=5376,​ size_sectors=4096,​ sector=2048)
 + ​Part(num=7,​ name='​MBR\x00',​ typ=18, start_sectors=9472,​ size_sectors=512,​ sector=2048)
 + ​Part(num=8,​ name='​APP\x00',​ typ=18, start_sectors=9984,​ size_sectors=153600,​ sector=2048)
 + ​Part(num=9,​ name='​CAC\x00',​ typ=18, start_sectors=163584,​ size_sectors=204800,​ sector=2048)
 + ​Part(num=10,​ name='​MSC\x00',​ typ=18, start_sectors=368384,​ size_sectors=1024,​ sector=2048)
 + ​Part(num=11,​ name='​EM1\x00',​ typ=18, start_sectors=369408,​ size_sectors=256,​ sector=2048)
 + ​Part(num=12,​ name='​UDA\x00',​ typ=18, start_sectors=369664,​ size_sectors=632320,​ sector=2048)
 + ​Part(num=13,​ name='​EM2\x00',​ typ=18, start_sectors=1001984,​ size_sectors=256,​ sector=2048)
 + ​Part(num=14,​ name='​UDB\x00',​ typ=18, start_sectors=1002240,​ size_sectors=14628096,​ sector=2048)]
 +</​code>​
 +
 +Another useful function is
 +<​code>​
 +dev.flash_part(<​partno>,​ <​filename>​)
 +</​code>​
Log In