Todd C. Miller
GitHub Toggle Dark/Light/Auto mode Toggle Dark/Light/Auto mode Toggle Dark/Light/Auto mode Back to homepage

Tpip

Tpip version 1.2

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 kernelcp but 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.

MANIFEST

README
text version of this page
tpip
static Linux binary (built on RedHat 9.0)
tpip.TiVo
TiVo binary (to run on the TiVo itself)
tpip.c
source for tpip

USAGE

    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

OPTIONS

-a
–alternate
Operate on the alternate kernel partition instead of the primary one.
-b
–bootpage
Print the values for the primary and alternate boot partitions and the boot parameters.
-k file
–kernel=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.
-p
–partitions
Print out the partition table on “device”.
-o file
–old_kernel=file
Save the current kernel image on "device" to "file".
-S
–swapped
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.
-s
–mkswap
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.
-V
–version
Display tpip’s version and exit.
-v
–verbose
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.

EXAMPLES

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 /dev/hde 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. :-)

COMPILATION

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