+* STLINKv1, present on STM32VL discovery kits,
+* STLINKv2, present on STM32L discovery and later kits.
+
+Two different transport layers are used:
+
+* STLINKv1 uses SCSI passthru commands over USB
+* STLINKv2 uses raw USB commands.
+
+## Common requirements
+
+* `pkg-config`
+* `libusb-1.0` (plus development headers for building, on debian based distros `libusb-1.0.0-dev` package)
+
+## For STLINKv1
+
+The STLINKv1's SCSI emulation is very broken, so the best thing to do
+is tell your operating system to completely ignore it.
+
+Options (do one of these before you plug it in)
+
+* `modprobe -r usb-storage && modprobe usb-storage quirks=483:3744:i`
+* or 1. `echo "options usb-storage quirks=483:3744:i" >> /etc/modprobe.conf`
+* 2. `modprobe -r usb-storage && modprobe usb-storage`
+* or 1. `cp stlink_v1.modprobe.conf /etc/modprobe.d`
+* 2. `modprobe -r usb-storage && modprobe usb-storage`
+
+## For STLINKv2
+
+You're ready to go :)
+
+## Build from sources
+
+### Autotools
+
+This project was converted to Autotools by a well meaning individual. The
+following steps will build the project for you.
+
+```
+$ ./autogen.sh
+$ ./configure
+$ make
+```
+
+### CMake
+
+```
+$ mkdir build && cd build
+$ cmake -DCMAKE_BUILD_TYPE=Debug ..
+$ make
+```
+
+## Using the gdb server
+
+To run the gdb server: (you do not need sudo if you have set up
+permissions correctly)
+
+```
+$ make && [sudo] ./st-util
+
+There are a few options:
+
+./st-util - usage:
+
+ -h, --help Print this help
+ -vXX, --verbose=XX Specify a specific verbosity level (0..99)
+ -v, --verbose Specify generally verbose logging
+ -s X, --stlink_version=X
+ Choose what version of stlink to use, (defaults to 2)
+ -1, --stlinkv1 Force stlink version 1
+ -p 4242, --listen_port=1234
+ Set the gdb server listen port. (default port: 4242)
+ -m, --multi
+ Set gdb server to extended mode.
+ st-util will continue listening for connections after disconnect.
+ -n, --no-reset
+ Do not reset board on connection.
+```
+
+The STLINKv2 device to use can be specified in the environment
+variable STLINK_DEVICE on the format `<USB_BUS>:<USB_ADDR>`.
+
+Then, in your project directory, someting like this...
+(remember, you need to run an _ARM_ gdb, not an x86 gdb)
+
+```
+$ arm-none-eabi-gdb fancyblink.elf
+...
+(gdb) tar extended-remote :4242
+...
+(gdb) load
+Loading section .text, size 0x458 lma 0x8000000
+Loading section .data, size 0x8 lma 0x8000458
+Start address 0x80001c1, load size 1120
+Transfer rate: 1 KB/sec, 560 bytes/write.
+(gdb)
+...
+(gdb) continue
+```