Tpip is a simple utility to do basic manipulation of TiVo disks. It can be run on the TiVo itself, or on a PC running Linux or BSD. There is no need to turn on byte-swapping, tpip will do byte-swapping itself if necessary.
What can it do?
copy a kernel to a TiVo disk’s kernel partition (primary or alternate)
copy a kernel from a TiVo disk (useful for saving the old kernel)
write a version 1 swap header
display the partition table
display the boot page
modify the boot parameters in the boot page
flip the primary and active boot partitions in the boot page
I wrote tpip to solve the problems people were having when installing one of my LBA48 kernels. Previously it was necessary to use a Linux boot disk/CD with TiVo partition support and byte-swapping turned on, dd the new kernel into place. To make a large swap partition on a Series 1 TiVo, you had to run mkswap on the TiVo itself (due to byte order differences). For info on using LBA48 kernels on a Series 1 TiVo, see my “big disk” page.
With tpip, you can copy save the old kernel, copy a new one into place and initialize the swap partition in a single step without worrying about byte-order issues. Since the code already had to read the boot page and partition table, I added options to print those as well.
Why call it
tpip? Well, it started life as
as features crept in I needed a new name. I suppose I was feeling
nostalgic for my CP/M days :-)
Options may be specified in short form (single letter), long form, or the shortest unique substring of the long option.
You can get tpip via ftp from https://www.millert.dev/ftp/pub/TiVo/tpip.tar.gz.
- text version of this page
- static Linux binary (built on RedHat 9.0)
- TiVo binary (to run on the TiVo itself)
- source for tpip
tpip [-abpSsVv] [-P "boot params"] [-k kernel] [-o old_kernel] device tpip [--alternate] [--bootpage] [--kernel=kernel] [--mkswap] [--old_kernel=old_kernel] [--parameters="boot params"] [--partitions] [--swapped] [--verbose] [--version] device
- Operate on the alternate kernel partition instead of the primary one.
- Print the values for the primary and alternate boot partitions and the boot parameters.
- -k file
- Write the specified kernel image (file) to "device".
- -P boot params
- –parameters="boot params"
- Set the boot parameters in the boot page to the specified string.
- Print out the partition table on “device”.
- -o file
- Save the current kernel image on "device" to "file".
- This option indicates to tpip that the TiVo disk has been mounted with byte-swapping enabled. You should use this if you have the hdX=bswap kernel option specified.
- Write a version 1 (new-style) swap header for any swap partitions found on "device". Note that you must use a kernel that supports version 1 swap partitions. The stock TiVo kernel only supports the older, version 0 swap partitions, which are limited to 128MiB.
- Display tpip’s version and exit.
- Make tpip be more verbose about what it is doing. Also prints tpip’s idea of whether it is operating on a Series 1 or 2 disk.
Let’s assume you have booted an LBA48-capable Linux system (either
a normal Linux installation of an LBA48 boot CD) and you wish to
upgrade your TiVo to a big LBA48 disk (we’ll refer to it as
in the examples below, the actual device name will vary). After
using MFS Tools to copy the contents of the old TiVo disks to
/dev/hde, you could install the LBA48 TiVo kernel like this:
# tpip -k vmlinux-3.0.px -o kernel.bak /dev/hde
If you asked MFS Tools to create a swap partition larger than 127MiB, you will need to have tpip write the swap header for you, e.g.
# tpip -k vmlinux-3.0.px -o kernel.bak -s /dev/hde
You should now be able to halt Linux, install the new disk on your TiVo and have lots of space. :-)
Since the source is a single file I didn’t bother with a Makefile.
To build under a modern Linux or BSD:
$ cc -O2 -s -o tpip tpip.c
To build a ppc TiVo binary via cross-compiler:
$ /usr/local/tivo/bin/gcc -DTIVO -O2 -s -o tpip tpip.c