Tpip
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.
- 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
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
- -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.
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. :-)
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