TiVo Hacking - Technical Information

If you have comments, email me at webmaster@soliton.net

Pictures can be found here.

UPDATE: I made a mounting bracket for my TiVo's second hard drive. If you click on the
link above, you can see pictures. It was easy to make and I just used a few simple
parts I bought at Home Depot. For info, the screws that go into the hard drive are #6.

You'll be able to find bags of them at Home depot... Before doing this bracket, I just
had the hard drive sitting on a CD case in there. This is bad, though, because of
poor ventilation. The fan in the TiVo hardly ever spins, so the drives need to cool
with convection currents alone. With one whole side of the drive covered (on the bottom)
it was getting really hot. I'm hoping that having the drive suspended, it will cool better.

I also cut away the middle of the bracket hoping a little more cool air would hit the drive.
Ther are holes on the bottom of the case where air gets sucked in when the fan is operating.

It's hard to tell how hot the drives are in the Tivo by feeling the case of the unit because
there is foam insulation (probably for noise) on the inside of the lid. This keeps it cool
to the touch even when the drives are burning hot. (Which they were in my case.)

Anyway, I advise everyone do this mod --- having the drives running really hot probably isn't
a good thing as their longevity can be affected by heat. (And a failed drive on a TiVo is
really bad.)

------------------------------------------------------------------------------------------

Hey all. Well, I recently bought a TiVo personal hard disk recorder. It's a very cool box
and you can currently by them for $200 after a $50 rebate from TiVo. (You just need a friend's
serial number when signing up.)

Anyway, the low cost unit has a 13.6 gig hard drive installed, which is good for about 14 hours
of video at the lowest quality. This was cool and seemed ok since I used Medium quality and it
could fit at least 6 or 7 hours at that setting on the small drive.

What's so cool about TiVo, though, is it records programs that it thinks you might like to
watch. This is a REALLY cool feature and I wanted more storage space to really let the 
TiVo stretch its legs doing this. I waited on buying a TiVo for this very reason -- I wanted
to be able to expand the capacity!

Information was scarce until just recently. Some really smart people figured out the proper
steps to get a second drive working! SWEET! I read up on it, downloaded the needed tools
and set out to do it.

The Story begins:

The procedure includes a bunch of linux work, which is no problem for me. I got a linux box
setup and configured as prescribed for the procedure. I then took an extra 20gig hard drive
and configured it and got it working on the TiVo. The drive was a 7200rpm Western Digital
drive. 

SWEET! It worked and the capacity was now 40 hours. But this wasn't good enough. I wanted
to make it a 52hour unit -- and besides, I couldn't use the 20gig drive permanentally.

So, I went over to Fry's and picked up a 30gig 5400RPM Western Digital.... 

People talked on the Net about some drives not working, or not finding the diag partition.

I had no such problems. Western Digital drives work perfectly, even at Best quality setting.

The 5400rpm unit is quiet and cool running. A perfect match for the TiVo.

Anyway, when removing the 20gig to go to 30gig, something went TERRIBLY wrong!!!

It seems Tivo doesn't like having drives removed from it once they are "incorperated"
into the system. It totally freaks out and just rebootes a few seconds after starting up.
(Over and over again.)

I tried everything I could -- I even got, at one point, a GREEN screen saysing:

"SEVERE ERROR HAS OCCURED -- Please wait will TiVo repairs itself."

Wow.

Anyway, I couldn't figure out how to uninstall the drive from the OS. It just wouldn't
work. I even prepped the new drive with partitions as I did the first and hoped it would
find the new one and be happy. No dice. You could see in the log files it was trying to
reconstruct the media drive and crapping out --- rebooting.

What I ended up doing was using DD on linux to make a duplicate copy of my friend's 
boot drive on top of mine. It took a few hours... ZZZ. Once it was done, I poped the
drive in my Tivo and it worked. The Serial number was MINE -- it didn't copy his over.

But it did think my box was his in every other way. Programs, channels, etc.

So, I added the 30 gig drive, got it working, then reset the box to factory defs.

Now, everything's A-Ok and the box is running great. 52hours of storage -- WOOHOO. I
took pictures and they can be found at the bottom of this page...

Well, thanks for reasing. Good luck if you try this!

Here is the file I used to help me do this: (Thanks TiVo Forum guys!!)

___

Oh yeah, this is a really good site with step by step instructions:

http://outflux.net/tivo/

___

Here's the post from: http://www.avsforum.com/ubb/Forum6/HTML/004437.html 
Here's how to add a B drive to your TiVo by "blessing" it. This is approximately how we
did it. We've only done it a few times so far. We will be refining the process. We simply
wanted to get the initial information out quickly.

This has only been verified to work on a few units so far. A HDR112 has been upgraded to
52 hours with a 30 gig Quantum, another HDR112 has been upgraded to 40 hours with a 20
gig Quantum, and a Sony 30 hour unit has been upgraded as well with a Maxtor B drive,
although the newer Sony/Phillips units have a drive locking mechanism that makes it very
hard to mount their A drives in a non-TiVo Linux box.

WARNING: This modification is not "easy". You take all responsibility for modifying your
TiVo in this way. It does involve opening the case and breaking the warranty sticker.
Do not call TiVo support if you make a mistake and break your TiVo. If you break it,
you own both pieces. If you mess up, don't expect us to fix it for you either. Maybe
some day someone will release a utility that will just bless a drive in 1 easy command
on your PC, but at this point, it's pretty tricky. It requires that you have various
technical knowledge about Linux and other software tools. You could easily render your
TiVo inoperable and possibly unrecoverable.

WARNING 2: There hasn't been a lot of testing so far on this procedure of course. Mine
seems to be working perfectly at 52 hours, but you must accept the risk that something
bad may happen down the road. We suggest that you back up your original A drive in some
fashion in case you make a mistake. How to do that we leave up to you.

PDISK DISCLAIMER: We had to modify the source code to pdisk. Use it at your own risk.
There may be bugs. We're not responsible for any loss of data.

And PLEASE - be careful when you open the unit. It's power supply is unshielded. Stay
away from it. 

In short - if you don't _understand_ what is going on below, don't do it. Just being
able to read a list of steps may not be enough at this point.

When I refer to hard drive partitions on the Linux box, I'll use hdX where X is whatever
letter is appropriate for that drive.

I used a Quantum lct10 30 gig drive (part number QML30000LB-A) that I bought from
www.onsale.com. My off the shelf Quantum seems to have the Quickview and TiVo extensions
in it, perhaps they all do. It is the same drive used in HDR31202's and presumably
the newer Sonys. Any drive may work as a B drive, but I've only tried my Quantum.
Also be aware - the version of Linux on the TiVo doesn't seem to support drives larger
than 33.8 gig. I don't know if TiVo patched their older kernel to support them. Set the
B drive's jumper to slave.

You need to be able to access the original A drive and new B drive from another Linux box.
To do this on an x86 box, you need to integrate TiVo's modifications to the Mac partition
code. There are some patches on ftp://ftp.curry.org/pub/tivo,
ftp://ftp.rotorway.org/incoming/tivo, and http://www.wasteland.org/tivo. Please, if
anyone can mirror these few files it would be very helpful. If we get hit too hard,
we'll have to take the files down. You also need to be able to turn on byte swapping
for those 2 drives (hdX=bswap). I had the most luck with Linux 2.4.0-test1. You also need
to enable the Mac partitioning in the kernel.

If that all works, you'll see the TiVo's partitions on the A drive hooked to your Linux box.
There should be 11 of them. Mount partition 4 (hdX4) somewhere, it's an ext2 filesystem. Edit
the bottom of etc/rc.d/rc.sysinit so it starts a bash shell on /dev/ttyS3. Also you need to
blank out the first few sectors on the new B drive, with this command:

"dd if=/dev/zero of=/dev/hdX bs=512 count=32".

Get the hard drives back in the TiVo (both of em) and hook up the DSS serial cable to your
computer. You'll need a null modem adapter and gender changer at the minimum. The terminal
settings are 9600,8N1. You should get a bash prompt shortly after the "please wait a few more
seconds" screen. Run this command: "/sbin/bootpage -D /dev/hdb". Then shut down your TiVo and
hook the B drive back up to the Linux box.

Now you need a modified version of pdisk which is available on the sites I mentioned above.
Compile it if necessary (it's in RCS format). With the B drive in the Linux box, run
"pdisk /dev/hdX" and type in these commands:

i
w
y
q

Then run: "pdisk -d /dev/hdX" and type these commands:

C 2p 4M "Second MFS application region" MFS
C 3p 3p "Second MFS media region" MFS
x
m
3
x
w
y
q

That will create the new partitions. Shut down the Linux box now and mount the B drive in
the TiVo permanently. Turn the TiVo back on and get into the bash shell on it again.

You need to mount the diagnostics partition next. Type this on your TiVo:
"mount -t ext2 -o ro /dev/hda7 /mnt". Then run this to add the magic bit sequence to your new
B drive: "/mnt/diag/genAddDiskTiVoID /dev/hdb3". Type "umount /mnt" to unmount that diagnostics
partition, and reboot your TiVo. That should do it. Check the system information and see if your
capacity increased. If not, you can try this one last thing that I don't believe is necessary,
but it might be: mount the diagnostics partition again, and run
"/mnt/diag/setkeys -globalkeys /dev/hdb".

That's it. If you want to now, you can edit the rc.sysinit to stop the bash shell from
starting (or if you were smart, you made a backup copy when you started and can just copy
the backup over the modified one).

Credit for figuring out this procedure goes to cc, Peter Creath, TivoTechie, and Ron Curry.

6/21/00

____



Ok, here are the pictures.