How to login from serial port under Linux

Jephe Wu -

Environment: HP Proliant server A with one com port which is com1,  CentOS 5
Objective: enable login through com1 using null modem cable from another machine B which can be Windows or Linux. Also, we will try to login from ILO vsp to display kernel bootup message, BIOS and GRUB


Part I - physically connect to com1 interface at the back side of the HP Proliant server and login to Linux server

1. connect null modem cable between A and B at com1 port (ttyS0), if it's com2, it's ttyS1
2. on Linux server A, vi /etc/inittab and append the followin line:

s0:2345:respawn:/sbin/agetty 115200 ttyS0 vt100

3. If machine B is Linux, use minicom to configure the serial port speed as 115200, then connect.

If your laptop doesn't have serial port, you can use 'usb to RS232 converter' cable (one side is usb interface, anther end of the cable is the male DB9 interface.

use 'lsusb' and dmesg to confirm Linux is using /dev/ttyUSB0 after inserting cable to Linux pc.

Configure minicom to use /dev/ttyUSB0 as com port and connect. If udev is running (such as ubuntu), then you don't have to create /dev/ttyUSB0, it will be automatic.

[root@jephe dev]# ./MAKEDEV ttyUSB0
[oracle@jephe dev]$ ls -l ttyUSB0
crw-rw---- 1 root uucp 188, 0 Nov  6 05:08 ttyUSB0

[root@jephe dev]# ./MAKEDEV ttyUSB1
[root@jephe dev]# ls -l ttyUSB1
crw-rw---- 1 root uucp 188, 1 Nov  6 05:08 ttyUSB1

4. If machine B is Windows, use putty to directly connect to serial port, set speed as 115200, then login

5. you can also use kermit to connect to serial port as follows:
  set line /dev/ttyS0 
 set carrier-watch off

a. how to change speed? - best practise.
vi /etc/inittab , for example, change 115200 to 9600, then comment out the line first, run 'init q' to re-read file, after that, uncomment it, issue 'init q' again.

b. how to enable root login through serail ports?
Just add both ttyS0 and ttyS1 or both into /etc/securetty.

Part II: How to use HP virtual serial port(VSP) to login Linux server
For HP Proliant DL serial servers, you can use VSP (Virtual Serial Port) with ILO2, you can basically ssh into ILO IP address with Administrator login. Add the following lines to /etc/inittab

s1:2345:respawn:/sbin/agetty 115200 ttyS1 vt100

then run 'init q' to enable it, after that, you can use vsp command to connect to this serial port login.
use ssh connect to ILO ip address:(if there's firewall in between, enable port 22)
for ILO version 1, just run 'REMCONS'.
for ILO2 , type 'vsp' to connect to ttyS0 or ttyS1 to get console screen.

According to ,
A new feature crept in unannounced in the recent iLO 2 v1.77 firmware update from HP: You can now kill / terminate Virtual Serial Port (VSP) sessions that are open or hung. This is a very useful when you need to connect to the VSP but you (or someone else) is already connected from another location.

The new command to terminate VSP sessions is:
stop /system1/oemhp_vsp1
For reference, here are the two methods of starting VSP sessions in the iLO CLI:
start /system1/oemhp_vsp1
Before now, the only way to clear a hung VSP session was to reboot the iLO (a very intrusive action that takes 30-60 seconds), so this is a major improvement in usability of Virtual Serial Port sessions.

When ILO2 hangs, what you can do it :
a. make sure you are using the latest ILO2 firmware, if not , download one for your OS,then do online upgrade.
b. ssh into ILO, then run stop /system1/oemhp_vsp1
c. vi /etc/inittab, to comment out your virtual serial port line, then run init q
d. vi /etc/inittab again to uncomment that line , then run init q
e. try again 'vsp' command to access virtual serial port from ILO2 prompt

a. if you used ttyS0 and init q already, after that, you realize you should use ttyS1 for HP VSP serial port 2 which is 0x2F8.

You have to comment that line first, then int q, after that, change ttyS0 to ttyS1, otherwise, the ttyS0 is still listening , use ps ax to find out, please.

Part III - kernel console and GRUB serial console output
1. Enabling kernel console output so that you can view Linux server booting up messages on virtual console ttyS1 through vsp, then you should do this: (comment out splashimage and add two console options at kernel line for /etc/grub.conf)

title CentOS (2.6.18-164.el5)
        root (hd0,0)
        kernel /vmlinuz-2.6.18-164.el5 ro root=/dev/VolGroup01/LogVol00 rhgb quiet console=tty0 console=ttyS1,115200
        initrd /initrd-2.6.18-164.el5.img

Note:This will send the console output to the serial port ttyS1 at a baud rate of 115200 as well as send the output to the regular console or "screen" tty0.
Remember: you have to put console=tty0 first then console=ttyS1 so that HP VSP can display those OK messages. Otherwise, those [OK] messages won't display on VSP.

2.  Configure and use GRUB over Serial Console (redhat knowledge base)

The system's BIOS, bootloader (GRUB), Xen, Linux, and login access must each be individually configured for serial console access. It is not strictly necessary to have each component fully functional, but it can be quite useful.

For general information on serial console configuration under Linux, refer to the Remote Serial Console HOWTO at The Linux Documentation Project.

Enabling GRUB serial console output neither enables nor disables Xen or Linux serial capabilities, but may make remote management of the system more convenient by displaying GRUB prompts, menus, and actions over serial port and allowing remote GRUB management.

Add the following two lines to the GRUB configuration file /boot/grub/grub.conf will enable GRUB serial output.
serial --unit=0 --speed=115200 --word=8 --parity=no --stop=1 
terminal --timeout=10 serial console

Note that when both the serial port and the local monitor and keyboard are enabled, the text "Press any key to continue" will appear at both. Pressing a key on one device will cause GRUB to display to that device. The other device will see no output. If no key is pressed before the timeout period expires, the system will boot to the default GRUB boot entry.

a. How to capture Linux installation screen
You can add the following to linux prompt when you boot from Redhat/CentOS installation CD:
linux kernel console=ttyS0, 115200 console=tty0

then you minicom or putty from another machine to connect to serial port at the same baud rate, you should be able to see and capture the screens.

Part IV: BIOS over serial redirection (vsp, hyper terminal or minicom)

under 'system option', set embedded serial port as com1 and virtual serial port as com2
under 'BIOS serial console & EMS', set BIOS serial console port as Auto(auto choose vsp or physical com1), and BIOS serial console band rate as 115200

You can user a null modem calbe to physically connect a PC/server  to this HP Proliant server, and use Windows hyper terminal or minicom from Windows or Linux to connect to com1 to get BIOS over serial redirection or use gtkterm, cutecom etc GUI terminal program
use HP Virtual Serial Port (VSP) after ssh into ILO2 from Xshell or putty, then type in 'vsp'.

It will display the following message at the end of the bootup screen:

For access via BIOS Serial Consoleller    
 Press "ESC+1" to continue
 Press "ESC+9" for ROM-Based Setup Utility              
 Press "ESC+0" for System Maintenance Menu
 Press "ESC+@" for Network Boot

for ESC+9,  you can use 'show config script' or 'show config options' under rbsu> (Rom-Based Setup Utility) prompt.

You can also type Esc 8 for configuring raid controller (instead of F8, use Esc +8 in vt100 terminal) 

You'd better to use standard 80 (column) X 24 (rows) window for putty to get the better display over serial console when using VSP. This includes better grub menu display with highlighted selection bar, full bios startup messages, kernel console and service OK messages etc. It will display nicely in 80x24 standard size putty window through vsp.

For Esc + 9 (bios setup through serial console), you can use the following commands to show/set bios serial console baud rate:
show config script
set config bios serial console baud rate 115200
show config bios serial console baud rate

Part V: Summary of a typical HP Proliant server serial configuration
1. BIOS serial console redirection etc
Refer to part IV

2. /etc/grub.conf (for showing kernel message and GRUB on serial console)

serial --unit=0 --speed=115200 --word=8 --parity=no --stop=1 
terminal --timeout=10 serial console

title Linux Boot (2.4 custom)
        root (hd0,0)
        kernel /vmlinuz-2.4.cust ro root=LABEL=/ rhgb quiet console=tty0 console=ttyS0,115200 
initrd /initrd-2.4.cust.img

a. --unit=0 or --unit=1  (0 is for ttyS0 and 1 is for ttyS1 )
b. remove out 'rhgb quiet' will display all kernel hardware detecting messages. 

3. serial console login (/etc/inittab)
s0:2345:respawn:/sbin/agetty 115200 ttyS0 vt100 
s1:2345:respawn:/sbin/agetty 115200 ttyS1 vt100 
4. enable direct serial port login
add ttyS0 and ttyS1 to /etc/securetty
Part VI: Windows EMS and VSP
The following is from
Emergency Management Services (EMS), you can get a command line prompt and run some basic 
basic such as configuring IP address and reboot Windows server. 
You can modify boot.ini file as follows 

right click on 'my computer', advanced, startup and recovery, click on settings, 'edit'
to add the following to boot loader part:
and append /redirect to the partition part

The example configuration is something like this:
[boot loader]
[operating systems]
multi(0)disk(0)rdisk(0)partition(1)\WINDOWS="Windows xxxxxx Edition" \ /noexecute=optout /fastdetect /redirect 

then you can use ssh into ILO, then vsp to get EMS > prompt

note: Please check Windows operating system version for correct syntax for enabling EMS. referring to
it might be EMSPort and EMSBandRate instead of redirect and redirectbandrate

Part VII:  How to login serial console between 2 Linux server each other
You can connect a null modem cable between 2 Linux server, both at com1. Enable console login in /etc/inittab, then you can login from serial console each other.

For example, server A and B, when you try to login server B serial console from A, you need to comment out the line in /etc/inittab on server A, then run 'init q', then use minicom to connect to server B serial console. The same way for server A.

When you enable serial console login for Linux server, after init q, you should be seeing the following from ps command before you try to connect to it using minicom.
5617 ttyS0 Ss+ 0:00 /sbin/agetty 115200 ttyS1 vt100

If you are seeing something like this:
5617 ttyS0 Ss+ 0:00 /bin/login --

You should kill 5617 process first, make sure it's showing 5617 ttyS0 Ss+ 0:00 /sbin/agetty 115200 ttyS1 vt100, which means it's waiting for minicom connection, otherwise, it will not see login prompt from minicom

This way, you can use minicom to login server A and server B each other, as long as the client (login from) is not using ttySx in /etc/inittab, and the server(the one minicom tries to login) is using ttySx in /etc/inittab and it's waiting for connection (ps | grep tty  - shows it's waiting )

1. HP Proliant server VSP documentation (bios serial console redirection, etc

2. Redhat knowledgebase - How do I set up a serial terminal and/or console in Red Hat Enterprise Linux?

3. HP support website document - HP Integrated Lights-Out 2 (iLO 2) - Unable to Use Virtual Serial Port (VSP) 

4. HP BIOS Serial Console user guide -
note: Check above guide for vt100 special keys (such as using ESC + 8 for F8 )

5. HP ROM-Based Setup Utility User Guide (RBSU) -

6. Setup a serial console -


8. iLo2 / VSP on RHEL5 missing console messages-
note: put console=tty0 first then console=ttyS1, 115200 to display OK messages in VSP

9. How do I setup serial terminal and serial console for my xen kernel? (Reaht knowledge base DOC-9979)

For Xen kernels, the kernel and module line need to be modified. Remember that com1 = ttyS0, com2 = ttyS1, etc.

kernel /boot/xen.gz-2.6.18-6.el5fvfix com1=9600,8n1
module /boot/vmlinuz-2.6.18-6.el5fvfixxen ro root=LABEL=RHEL5_x86_64 console=tty0 console=ttyS0,9600n8
module /boot/initrd-2.6.18-6.el5fvfixxen.img 

For example, here is the /etc/grub.conf:

#splashimage=(hd0,0)/grub/splash.xpm.gz hiddenmenu
serial --unit=0 --speed=115200 --word=8 --parity=no --stop=1
terminal --timeout=10 serial console

title Red Hat Enterprise Linux Server (2.6.17-1.2519.4.21.el5xen)
 root (hd0,0)
 kernel /xen.gz-2.6.17-1.2519.4.21.el5 com1=115200,8n1
 module /vmlinuz-2.6.17-1.2519.4.21.el5xen ro root=/dev/VolGroup00/LogVol00 
console=tty0 console=ttyS0,115200n8
 module /initrd-2.6.17-1.2519.4.21.el5xen.img 

Modify the above to match the enviroment in which the serial terminal and serial console are being set up for.

10.  Useful commands:
a. setserial -a /dev/ttyS0 
b. setserial /dev/ttyS0 uart 16550A port 0x0408 irq 4

No comments:

Post a Comment