Build and Patch OpenBSD

Pre download source

# ftp ftp://ftp.stacken.kth.se/pub/OpenBSD/5.4/*.gz
# cd /usr/src
# tar xzf ../sys.tar.gz
# tar xzf ../src.tar.gz
# cd /usr
# tar xzf xenocara.tar.gz
# tar xzf ports.tar.gz

Update source from AnonCVS.

# cd /usr
# export CVSROOT=anoncvs@anoncvs.eu.openbsd.org:/cvs
# cvs -d$CVSROOT checkout -P src
# cvs -d$CVSROOT checkout -P ports

When you want the latest update you can update the tree

# cd /usr/src
# cvs -d$CVSROOT up -rHEAD -Pd

You can also update individual files if neccesary.

cd /usr/src/sys/dev/usb
cvs -d$CVSROOT up -Pd -rHEAD ehci.c

Build kernel

# cd /usr/src/sys/arch/i386/conf
# config GENERIC
# cd /usr/src/sys/arch/i386/compile/GENERIC
# make clean && make
    [...lots of output...]
# make install

Patch kernel with security update

# cd /usr/src
# patch -p0 < 001_st.patch

Patch kernel with diff in mail. Make sure mail is stored as raw text. And don't open the patch file in any "smart" text editor which removes trailing spaces.

Specific problem with ehci.c patch

Note that modern text editors may remove trailing spaces which destroys the patch file. Use e.g. vi or nano to avoid this.

I also had problems with trailing CR.

cat ehci.patch | tr -d '\r' > ehci2.patch

This made the patch work for more hunks but not all. I ended up using patch on OSX to solve the problem.

# cd /usr/src/sys/dev/usb
# patch -ul < ehci.diff                                                                                                                   

Hmm...  Looks like a unified diff to me...
The text leading up to this was:
--------------------------
|Index: ehci.c
|===================================================================
|RCS file: ehci.c,v
|retrieving revision 1.138
|diff -u -p -r1.138 ehci.c
|--- ehci.c     9 Nov 2013 08:46:05 -0000       1.138
|+++ ehci.c     22 Nov 2013 10:21:10 -0000
--------------------------
Patching file ehci.c using Plan A...
Hunk #1 succeeded at 181.
Hunk #2 succeeded at 501.
Hunk #3 succeeded at 681.
Hunk #4 succeeded at 737.
Hunk #5 succeeded at 1439.
Hunk #6 succeeded at 1538.
Hunk #7 succeeded at 1569.
Hunk #8 succeeded at 1578.
Hunk #9 succeeded at 1659.
Hunk #10 succeeded at 2716.
Hunk #11 succeeded at 2739.
Hunk #12 succeeded at 2775.
Hunk #13 succeeded at 2943.
Hunk #14 succeeded at 3191.
Hunk #15 succeeded at 3277.
Hunk #16 succeeded at 3359.
Hunk #17 succeeded at 3470.
done

Enable debugging on kernel build

See chapter 19 of Absolute OpenBSD and config(8) and options(4). Debugging the OpenBSD kernel via QEMU was also quite informative.

cd /usr/src/sys/arch/i386/conf/
cp GENERIC.MP UMASSDEBUG

Edit UMASSDEBUG file

#
#       Just enable UMASS_DEBUG in umass.c and other ...
#

include "arch/i386/conf/GENERIC"

option  USB_DEBUG
option  UMASS_DEBUG
option  EHCI_DEBUG

Enter build folder.

config UMASSDEBUG
cd ../compile/UMASSDEBUG/
make clean; make
make install

References