www.asplund.nu

...my place on the web

  • Increase font size
  • Default font size
  • Decrease font size

HTPC Installation Guide

I have spent several hours on this project and at one point I was almost ready to give up. But now when I have everything running I must say it was definitely worth it.

I have had some experience with Linux before I started this project and it helped me a lot. You don't need to be a guru on Linux to build your own HTPC, but it will be much easier with some basic knowledge. Internet is a great source to find information. Often with Linux it is very difficult to find a guide that exactly describes everything step by step. I guess that is mainly because different hardware requires different setup and it is very unlikely to find a guide that describes exactly the setup you are using. My advice is to get some hardware that others are using and that you know should work. Then if you run into trouble there will be people on the Net that can help you.

Installation guide

Linux

First installation:

First step is to select a Linux distribution of your choice. It does not really matter so select one you feel comfortable with. For my old installation of VDR I used Fedora Core, but this time I picked Debian. Have heard a lot of good things about Debian but never tried it before so I thought it was a good opportunity to try it.

Go to http://www.debian.org follow the instructions how to download and start your installation. Easiest is probably to download a network installation CD-image, burn it and then boot the HTPC from the CD. It is a minimal CD-image with only the necessary files to start the installation, the rest of the files will be downloaded from Internet during the installation.

I decided to download the testing distribution of Debian, found here: http://www.debian.org/devel/debian-installer/.
The testing distribution includes later versions of all the software and is a better choice when installing VDR.

I am not going to go through all the steps in installing Debian. The installation is pretty much straight forward and there are lots of info to be found on Internet. When selecting the installation tasks I deselected "Desktop Environment" and only selected "Standard System". As I am using VDR with a full feature DVB card, a card with MPEG encoder and TV-out, I do not need a graphical desktop. So removing it saves both space and time to download and install.

Kernel upgrade:

As I downloaded a distribution on CD it did not contain the latest Linux kernel. As I wanted to use the latest possible I began with upgrading the kernel. I strongly recommend doing this as you will get a better understanding of your system and you will have the option to add and remove features from the kernel. It is possible to continue without upgrading the kernel, but later on you might need the kernel source depending on how you install the additional software.

Here is a good guide for Debian and how to upgrade the kernel.
http://newbiedoc.sourceforge.net/system/kernel-pkg.html

Here is a summary of the installation and how I did it:

To compile the kernel you will need to following software installed:

  • gcc
  • kernel-package
  • libc6-dev
  • libncurses5-dev

To check if it is installed run dpkg -s, example: "dpkg -s gcc". If not use apt-get to download and install it.
Run this to install all software at the same time:

  • #apt-get install gcc kernel-package libc6-dev libncurses5-dev

Download the latest kernel source in a Debian package with apt-get:

  • # apt-get install linux-source

It will download the kernel and save it in /usr/src.

Unpack it and create a symlink called linux:

  • # tar -jxf linux-source-2.6.18.tar.bz2 
  • # ln -s linux-2.6.18 linux
  • # cd linux

All configuration parameters for the kernel are saved in a file called .config located in /usr/src/linux. With a new kernel source this file does not exist. It is possible to use an old config file from a previous kernel. Just copy that file to /usr/src/linux. I ran this to copy the configuration file that came with the distribution:

  • # cp /boot/config-2.6.7-2-486 .config

As this configuration file was create for an older kernel it is missing information about all the new features in the new kernel. It is necessary to run the following command to add all new features to the configuration file:

  • # make oldconfig

You will be asked questions if the new features shall be enabled or not. If you do not have an idea it is pretty safe to just press enter and leave the default answer.

Next step is to start configuring the kernel. Run:

  • # make menuconfig

Now comes the fun part to configure every single option of the Kernel. Basic rule is to leave everything as it is if you do not know what it is:

  • Remove DVB support but add video 4 linux
  • Add support for "Module unloading"
  • Add support for USB. I needed uhci-hcd in my HTPC. Check by running:
    # lspci -v | grep HCI
    It should either return UHCI USB or OHCI USB. Depending on your result select either uhci-hcd or ohci-hcd in the kernel configuration.
  • Add support for ACPI.
  • When you are done select exit and save the config.

  • # make-kpkg clean
  • # make-kpkg --append-to-version=.060717 kernel_image
  • # cd ..
  • # dpkg -i kernel-image-2.6.17.3.060717_10.00.Custom_i386.deb

For me the initrd image has never been created automatically so I needed to create it with mkinitrd. mkinitrd was not installed so I had to run the following to install it:

  • # apt-get install initrd-tools

Then run the following to create the image:

  • # mkinitrd -o /boot/initrd.img-2.6.17.3.060717 /lib/modules/2.6.17.3.060717

After the image is created you have to update the boot menu. Run:

  • # update-grub

Reboot! Done Smile

Please refer to the Kernel installation guide for more detailed instruction.

General Linux configuration:

In addition to the ACPI support in the kernel the deamon "acpid" need to be installed to trigger events, ie. when pressing the power button.

  • apt-get install acpid
  • Set ACPI in BIOS to S3(STR).
  • Suspend is now working: echo mem > /sys/power/state
    It works fine but I need to have the script below to reload some drivers.
     

DVB

I have chosen to leave the DVB drivers outside of the kernel and compile them separately. The DVB drivers can be found at http://www.linuxtv.org. You need to have "mercurial" installed to download the latest source. Follow instructions on http://www.linuxtv.org/repo/. On my installation I had to update libc6. But before I could do that I had to remove initrd-tools as it was causing a conflict with libc6.

To install I did the following:

  • hg clone http://linuxtv.org/hg/v4l-dvb
    to download the DVB source tree.
  • ln -s v4l-dvb DVB
    to create the DVB symlink.
  • Follow the instructions in INSTALL in the DVB directory. Basically:
    • make all
    • make install

Depending on your card you need to load different modules. Run "modprobe module-name" for each module. List of modules to load for my cards can be found in the runvdr script listed at the bottom.

LIRC

If you do not know what LIRC is have a look at http://www.lirc.org. LIRC is the software in your HTPC which interprets the the IR signal from your remote control. The HTPC also needs a IR receiver. It is this device LIRC is controlling. I am using both remote and IR receiver that was shipped with my Technisat DVB card. 

  • Go to http://www.lirc.org and download the source code.
    I used the latest, which was lirc-0.8.0.
  • Intallation instructions: http://www.lirc.org/html/install.html
  • Unpack in /usr/src.
  • Create symlink: ln -s lirc-0.8.0 lirc
  • Run ./setup.sh
  • In "Driver configuration" I selected a home-brewed serial device, connected to COM1. The rest I left standard.
  • In "Software configuration" I removed X-windows and selected only "Use syslogd".
  • Select "Save configuration & run configure".
  • Run make & make install.

Kernel upgrade
If you upgrade your kernel you have to run make distclean and then redo from ./setup.sh

Test:

Now we will test that everything is working. For LIRC to work you need to have the module lirc_serial loaded and the lircd deamon running. Below I will use two programs called mode2 and irw. I used "apt-get install" to install them.

  • Load the module for LIRC: modprobe lirc_serial.
  • Run: mode2 and press any keys on your remote. Some output like "pulse 108, space 4969" will be shown. mode2 is a program to test the signal from the remote.
  • For lircd to work you need to have a config file for your remote. You can either search for your remote here: http://lirc.sourceforge.net/remotes/ or record your own config file with the program irrecord.
  • Store the config file as /etc/lircd.conf
  • Start lircd and run the program irw to test the remote.

Note:

Most likely you will get an error when accessing the serial port and you have to run:
setserial /dev/ttyS0 uart none
This is because the serial port driver is loaded and is occupying all the serial ports. Running the setserial command will free the port. Another option is to load the lirc_serial module before the serial port driver module, but that requires that the serial driver is configured in the kernel as a module. I use the setserial command myself and I run it in my start script for VDR before I load the lirc_serial module.

WLAN

Mplayer

VDR

SCRIPTS

/usr/src/VDR/runvdr

#!/bin/sh
# runvdr: Loads the DVB driver and runs VDR

export LANG="en_us.iso8859-0"
VDRPRG="./vdr"
VDRCMD="$VDRPRG -Pmplayer -Pmp3 -Pfemon -Posdteletext -s vdrshut.sh -w 60 $*"

KILL="/usr/bin/killall -q -TERM"
cd /usr/src/VDR

setserial /dev/ttyS0 uart none
/usr/local/sbin/lircd -d /dev/lirc0
/sbin/modprobe lirc-serial

# Detect whether the DVB driver is already loaded
# and return 0 if it *is* loaded, 1 if not:
function DriverLoaded()
{
if lsmod | grep 'dvb_ttpci' > /dev/null ; then
   return 0
else
  return 1
fi
}

# Load all DVB driver modules needed for your hardware:
function LoadDriver()
{
        modprobe dvb_ttpci
        modprobe b2c2-flexcop-pci
        modprobe mt352
        return 1
}

# Unload all DVB driver modules loaded in LoadDriver():
function UnloadDriver()
{
        modprobe -r dvb_ttpci
        modprobe -r b2c2-flexcop-pci
        modprobe -r mt352
        return 1
}

# Load driver if it hasn't been loaded already:
if ! DriverLoaded; then
   LoadDriver
   fi

while (true) do
      eval "$VDRCMD"
      if test $? -eq 0 -o $? -eq 2; then exit; fi
      echo "`date` reloading DVB driver"
      $KILL $VDRPRG
      sleep 10
      UnloadDriver
      LoadDriver
      echo "`date` restarting VDR"
      done
 

/usr/bin/vdrshut.sh

#!/bin/sh
# /usr/bin/vdrshut.sh
# Initiates a shutdown when the power putton has been
# pressed.

killall -9 runvdr
killall -9 vdr
sleep 5

modprobe -r uhci-hcd
modprobe -r lirc-serial
modprobe -r i2c-core
modprobe -r dvb_ttpci
modprobe -r b2c2-flexcop-pci
modprobe -r mt352

sync
/sbin/hwclock --systohc

echo mem > /sys/power/state

/etc/init.d/networking start

/sbin/hwclock --adjust
/sbin/hwclock --hctosys

cd /usr/src/DVB/v4l

modprobe uhci-hcd
modprobe lirc-serial
modprobe i2c-core
modprobe dvb_ttpci
modprobe b2c2-flexcop-pci
modprobe mt352

runvdr --terminal=/dev/tty10 -w 60 &

Last Updated on Saturday, 24 February 2007 21:41