• Linux Serial Console 配置小结


    为什么要使用Serial Console

    远程机器的系统管理

    通常情况,安装linux的服务器一般用来承载重要的服务,如DHCP,DNS等等。一般对于这些服务器的管理通过远程访问进行,如SSH,Telnet 等等。但是,有些时候,有些情况下,使用远程访问是无法解决问题的,如处理一些导致系统crash的错误或者bug,这是可以通过Serial console来访问这些主机就显得尤其重要。

    记录console信息

    对于内核开发者来说,有些重要的内核信息会系统出错的时候,启动的时候一闪而过。而通过Serial Console可以很方便的将这些重要的信息记录下,以供分析和排错使用。

    还要其他很多地方,如嵌入式软件开发,serial console也是必不可少的工具。

    配置Serial Console

    配置serial console一般主要有以下几个步骤

    [1] 设置BIOS, 打开serial port功能

    [2] 如果需要,需要配置bootloader(),使得bootloader可以使用serial port。

    [3] 配置kernel的启动命令行参数,通过设置console 选项。

    [4] 需要配置init进程,使其可以spawn一个进程来监控serial console上的login请求。(getty)

    [5] 其他系统工具需要配置后,使其可以同serial console以前正常工作。

    接下来,本文主要总结前4步的一般步骤。

    设置BIOS

    不同的机器BIOS配置不尽相同。但一般会有类似的选项,如:

    image

    image

    设置好相应的Port和Buad rate即可。

    设置Boot loader

    这里以grub (GNU GRUB 0.97)为例。

    serial --unit=0 --speed=115200
    terminal --timeout=10 serial console
     
    #splashimage=(hd0,0)/grub/splash.xpm.gz
    hiddenmenu
    title Red Hat Enterprise Linux Server (2.6.18-prep-yubo)
            root (hd0,0)
            kernel /vmlinuz-2.6.18-prep-yubo ro root=/dev/VolGroup00/LogVol00 rhgb quiet crashkernel=128M@16M console=tty0 console=ttyS0,115200
            initrd /initrd-2.6.18-prep-yubo.img
    title Red Hat Enterprise Linux Server (2.6.18-194.el5)
            root (hd0,0)
            kernel /vmlinuz-2.6.18-194.el5 ro root=/dev/VolGroup00/LogVol00 rhgb quiet crashkernel=128M@16M console=tty0 console=ttyS0,115200
            initrd /initrd-2.6.18-194.el5.img

    在如上的例子配置文件当中,红字部分是需要注意的部分。

    serial --unit=0 --speed=115200
    terminal --timeout=10 serial console

    这两行配置文件来配置grub同时使用serial和console, 这里的使用的COM1(--unit=0,GRUB 里serial port是从0开始计数,所以--unit=0是使用com1),波特率为115200。所以,serial port和console(这是是连接的键盘和显示器)会同时等待最多—timeout ,以等待用户输入。

    配置kernel启动参数

    linux kernel通过console 参数,来配置选择哪个console, console参数可以重复出现,但是,对于每一种console技术,它仅能出现一次。

    如:

    console=tty0 console=lp0 console=ttyS0

    是有效的参数,

    但是

    console=ttyS0 console=ttyS1

    是不能接受的,因为ttyS0和ttyS1是同种console技术,都是serial。

    注意】当console参数出现多次时,最后一个console选项的值被linux kernel用来作为/dev/console设备。

    serial --unit=0 --speed=115200
    terminal --timeout=10 serial console
     
    #splashimage=(hd0,0)/grub/splash.xpm.gz
    hiddenmenu
    title Red Hat Enterprise Linux Server (2.6.18-prep-yubo)
            root (hd0,0)
            kernel /vmlinuz-2.6.18-prep-yubo ro root=/dev/VolGroup00/LogVol00 rhgb quiet crashkernel=128M@16M console=tty0 console=ttyS0,115200
            initrd /initrd-2.6.18-prep-yubo.img
    title Red Hat Enterprise Linux Server (2.6.18-194.el5)
            root (hd0,0)
            kernel /vmlinuz-2.6.18-194.el5 ro root=/dev/VolGroup00/LogVol00 rhgb quiet crashkernel=128M@16M console=tty0 console=ttyS0,115200
            initrd /initrd-2.6.18-194.el5.img

    对于console=tty0 console=ttyS0,115200设置,kernel的信息会同时出现在tty0和ttyS0上,但是init进程的输出信息仅出现在ttyS0上,直到login: 提示信息出现在console和tty0上为止。

    配置getty

    需要配置inittab使得有getty进程监视ttySX, 从而可以从serial console登陆,进而对系统进行访问。

    # Run gettys in standard runlevels
    1:2345:respawn:/sbin/mingetty tty1
    2:2345:respawn:/sbin/mingetty tty2
    3:2345:respawn:/sbin/mingetty tty3
    4:2345:respawn:/sbin/mingetty tty4
    5:2345:respawn:/sbin/mingetty tty5
    6:2345:respawn:/sbin/mingetty tty6
    S0:2345:respawn:/sbin/agetty -L ttyS0 115200 vt100

    如上例红字部分,启动agetty –L 来对ttyS0(COM1)进行监视。

    如果系统使用root通过ttyS0来登陆系统,还需要对/etc/securetty进行修改。

    tty9
    tty10
    tty11
    ttyS0

    红字部分为添加的内容。

    到这里,serial console的配置就基本完成了。

    参考:

    【1】http://tldp.org/HOWTO/Remote-Serial-Console-HOWTO/

    【2】Linux kernel Documentaion “kernel-src/Documentation/serial-console.txt”

     

  • 相关阅读:
    k8s网络策略
    二进制部署Kubernetes
    宿主机的命令在容器中使用
    高可用示例
    企业级高可用Harbor 2.3
    openstack常用shell脚本
    shell实现jumpserver
    我曾七次鄙视自己的灵魂
    queue容器适配器模拟超市结账环节
    stack容器适配器实现计算器(含实现代码)
  • 原文地址:https://www.cnblogs.com/yuboyue/p/2251288.html
Copyright © 2020-2023  润新知