FreeBSD serial console on another port
On many of my FreeBSD servers I use a serial console. It's pretty straightforward to set up as the Handbook illustrates.
Combined with a serial port server with SSH access (thanks XS4all!) or, say, HP's iLO which can also provides SSH access to the serial port it's a very nice way to be able to access your server even if you need to boot to single-user or if you locked yourself out. Even better, combine this with a firmware that knows something about console redirection and you also get at the BIOS setup over the same port.
I recently found myself in a situation where I couldn't use COM1 as the serial console port on a new server. The Handbook says:
If there is no COM1 (sio0), get one. At this time, there is no way to select a port other than COM1 for the boot blocks without recompiling the boot blocks.
220.127.116.11. Using a Serial Port Other Than sio0 for the Console
Using a port other than sio0 as the console requires the boot blocks, the boot loader, and the kernel to be recompiled as follows.
which sounds a bit scary. I'm not foreign to the notion of running a
customized kernel. However, on a stock x86 server in co-lo which I
hope to be able to update with
freebsd-update(8), I don't really
want to run a custom kernel. Thinking it through a little and looking
uart(4) manual page I got an idea.
There is an alternative to compile your own kernel, and I admit it might fall under the tip “get one” above: Change your COM3 (or whatever) to COM1! Here's how I did it:
/boot/device.hints lists the first serial port as:
hint.uart.0.at="isa" hint.uart.0.port="0x3F8" hint.uart.0.flags="0x10" hint.uart.0.irq="4"
sio(4) as mentioned in the Handbook is not listed in
The serial port I want to use as console is on the PCI bus, so I
hint.uart.0.at="pci" hint.uart.0.port="0xEC00" hint.uart.0.flags="0x10" hint.uart.0.irq="B"
and it just works! The details were taken from what the BIOS setup told me about what it called “COM3”. The AMI BIOS of a Supermicro C7X58 motherboard can see at least a 16C550 compatible PCI serial cards just fine.
If you later want to enter the BIOS setup over the serial port, use ESC 4 when it tells you to press F4. Move around by pressing arrow keys and TAB after each arrow key.