一般地,安装在PC的Linux是使用鼠标、键盘作为输入源,显示器作为输出显示,但有些X86的设备,如工控机等,为了节省成本,会去掉认为无用的外设接口,以致熟悉了PC的人不习惯。一个设备,没有鼠标、键盘、显示器,但只要还有串口,还是可以控制的。本文将在一个具备串口的设备上配置Linux系统,以便将控制台重定向到串口。Linux使用ubuntu14.04发行版本。

需要改动的地方有2处,一是grub配置,二是登陆配置。当然,还有一个重要前提,就是串口能正常工作。

说来惭愧,由于板子不具备一般人所认为的SDK,——我们觉得板子自带有资料、SDK开发包是理所当然的,但实际上,有些却不然。为了测试哪个串口设备可用,我使用串口口调试助手逐一发送数据到指定的串口设备文件(命令如echo "latelee" > /dev/ttyS0),幸好只测试到第3个设备文件即能成功,否则,还有一直测试下去(在/dev/目录下有32个ttyS设备,启动信息看到共有6个设备)。因此找到正确、正常能用的串口设备是最关键的。实际中,可能ttyS0可用,也可能ttyS2可用。下面以ttyS0为例说明。

通常情况下,波特率等参数是115200n8,有些配置内核时好像看到过,但没什么印象。

使用root权限,先备份好已有文件。
/etc/default/grub:配置
update-grub:
/boot/grub/grub.cfg:

1、创建登陆配置文件

创建/etc/init/ttyS0.conf文件(如是其它串口,所有的ttyS0都改为ttySx,文件名也是ttSx.conf),下面是ttyS2.conf文件的内容如下:

# ttyS2 - getty
#
# This service maintains a getty on ttyS2

description     "Get a getty on ttyS2"

start on stopped rc RUNLEVEL=[2345] and (
            not-container or
            container CONTAINER=lxc or
            container CONTAINER=lxc-libvirt)

stop on runlevel [!2345]

respawn

# no one will auto login(不自动登陆)
exec /sbin/getty -L 115200 ttyS2

# auto login as root or latelee
#exec /sbin/getty -a root -L 115200 ttyS2
#exec /sbin/getty -a latelee -L 115200 ttyS2

2、修改内核启动参数

ubuntu说不能直接修改/boot/grub/grub.cfg文件(实际上我改过,也没什么事情),而是改/etc/default/grub文件,然后执行命令update-grub,即会自动更新grub.cfg文件。修改的地方有几个。

启动参数:

GRUB_CMDLINE_LINUX_DEFAULT="console=tty0 console=ttyS0,115200n8"

配置串口控制台:

# Uncomment to disable graphical terminal (grub-pc only)
GRUB_TERMINAL=console

# my add
GRUB_SERIAL_COMMAND="serial --speed=115200 --unit=0 --word=8 --parity=no --stop=1"

完整的文件如下:

# If you change this file, run 'update-grub' afterwards to update
# /boot/grub/grub.cfg.
# For full documentation of the options in this file, see:
#   info -f grub -n 'Simple configuration'

GRUB_DEFAULT=0
#GRUB_HIDDEN_TIMEOUT=0
#GRUB_HIDDEN_TIMEOUT_QUIET=true
GRUB_TIMEOUT=1
GRUB_DISTRIBUTOR=`lsb_release -i -s 2> /dev/null || echo Debian`
# this is for vga text
#GRUB_CMDLINE_LINUX_DEFAULT="quiet text"
#GRUB_CMDLINE_LINUX=""

# my serial console
GRUB_CMDLINE_LINUX_DEFAULT="consol=tty0 console=ttyS2,115200n8"
GRUB_CMDLINE_LINUX=""

# Uncomment to enable BadRAM filtering, modify to suit your needs
# This works with Linux (no patch required) and with any kernel that obtains
# the memory map information from GRUB (GNU Mach, kernel of FreeBSD ...)
#GRUB_BADRAM="0x01234567,0xfefefefe,0x89abcdef,0xefefefef"

# Uncomment to disable graphical terminal (grub-pc only)
GRUB_TERMINAL=console

# my add
GRUB_SERIAL_COMMAND="serial --speed=115200 --unit=0 --word=8 --parity=no --stop=1"

# The resolution used on graphical terminal
# note that you can use only modes which your graphic card supports via VBE
# you can see them in real GRUB with the command `vbeinfo'
#GRUB_GFXMODE=640x480

# Uncomment if you don't want GRUB to pass "root=UUID=xxx" parameter to Linux
GRUB_DISABLE_LINUX_UUID=true

# Uncomment to disable generation of recovery mode menu entries
#GRUB_DISABLE_RECOVERY="true"

# Uncomment to get a beep at grub start
#GRUB_INIT_TUNE="480 440 1"

说明:

GRUB_DISABLE_LINUX_UUI是指在指定根分区时,不使用该分区的UUID,而是直接用如/dev/sda2的格式。

3、更新grub

直接执行命令update-grub即可

修改后的grub.cfg文件如下:
menuentry 'Ubuntu' --class ubuntu --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-simple-e5b19d4d-199f-4426-bab9-0b0c02b54317' {
        recordfail
        load_video
        gfxmode $linux_gfx_mode
        insmod gzio
        insmod part_msdos
        insmod ext2
        set root='hd0,msdos1'
        if [ x$feature_platform_search_hint = xy ]; then
          search --no-floppy --fs-uuid --set=root --hint-bios=hd0,msdos1 --hint-efi=hd0,msdos1 --hint-baremetal=ahci0,msdos1  a5c5a770-5bae-453c-a888-f83781fcaa1f
        else
          search --no-floppy --fs-uuid --set=root a5c5a770-5bae-453c-a888-f83781fcaa1f
        fi
        linux   /vmlinuz-3.13.0-32-generic root=/dev/sda1 ro  console=tty0 console=ttyS2,115200n8
        initrd  /initrd.img-3.13.0-32-generic

可以看到,内核启动参数已经配置成功。

另外,为了防止系统挂掉,可以运行update-grub后再手动改/boot/grub/grub.cfg文件,不要所有的启动项都是串口控制台,实际上有恢复模式可选,不改也行。我是把Advanced options for Ubuntu里面的配置改回原来的。

重新启动系统,查看启动参数

# cat /proc/cmdline 
BOOT_IMAGE=/boot/vmlinuz-3.13.0-32-generic root=/dev/sda1 ro console=tty0 console=ttyS2,115200n8

# who
latelee ttyS2

存疑:上面的grub配置,有2个console,分别是tty0和ttyS2,它们不匹配,但启动后也没什么问题,看到的终端还是ttyS2,不知道是什么原因。估计和启动参数的tty0关系不大,主要看ttyS2.conf配置。

说明:如果还是接有显示器,显示器依然有输出,Alt+Ctrl+1还是tty1,Alt+Ctrl+2还是tty2,原来是什么样子,还是什么样子。

遗留问题:串口控制台只能显示24x80(用secureCRT测试所得),有些命令太长则会回滚到一行的开始,虽然也是成功的,但影响了信息的提示,目前还不知道怎么改,在哪里改。

参考资料:
https://help.ubuntu.com/community/SerialConsoleHowto

李迟,发表于2014年10月22日中午休息前

将x86平台的Linux控制台重定向到串口相关推荐

  1. linux设置BIOS串口,将x86平台的Linux控制台重定向到串口

    一般地,安装在PC的Linux是使用鼠标.键盘作为输入源,显示器作为输出显示,但有些X86的设备,如工控机等,为了节省成本,会去掉认为无用的外设接口,以致熟悉了PC的人不习惯.一个设备,没有鼠标.键盘 ...

  2. 我参与的一个x86平台项目的经历

    今年是第一次完整参与一个项目的方方面面--当然,是站在开发人员的角度的,至于市场需求收集,采购元件生产,新品发布,销售拿钱,就不可能有我的份了.以前参与项目,都是只负责一点点东西,而且中后期完全处于边 ...

  3. pc安装linux内核,PC/104平台嵌入式Linux系统核心定制方法

    摘 要:基于PC/104平台的嵌入式Linux技术在海洋自动观测系统中具有广泛的应用前景,Linux核心定制方法的研究是嵌入式Linux系统研制的关键工作.本文结合PC/104平台嵌入式Linux系统 ...

  4. 嵌入式Linux串口终端的定制,基于PC/104平台嵌入式Linux系统定制方法

    基于PC/104平台的嵌入式Linux技术在海洋自动观测系统中具有广泛的应用前景,Linux定制方法的研究是嵌入式Linux系统研制的关键工作.本文结合PC/104平台嵌入式Linux系统的研制,详细 ...

  5. Linux 定制X86平台操作系统

    /********************************************************************************** Linux 定制X86平台操作系 ...

  6. X86平台下基于grub2+busybo+linux-2.6.36制作linux系统

    X86平台下基于grub2+busybo+linux-2.6.36制作linux系统 一.下载内核源码,grub2源码,以及busybox源码: 下载grub2源码 ftp://ftp.gnu.org ...

  7. Linux SPI 子系统(x86平台)

    Linux SPI 子系统(x86平台) 文章目录 Linux SPI 子系统(x86平台) 前言 总述 SPI 硬件系统与软件抽象之间的关系 SPI 驱动的 Probe 和 Match 过程 SPI ...

  8. Linux坏掉检测,测起来!安兔兔评测Linux版上线 目前仅支持x86平台

    原标题:测起来!安兔兔评测Linux版上线 目前仅支持x86平台 [CNMO新闻]你用过安兔兔吗?可能大部分用过的人都是在安卓手机之上,其他产品上用的并不多.5月7日,安兔兔官方宣布,继Android ...

  9. linux 性能测试 antutu,测起来!安兔兔评测Linux版上线 目前仅支持x86平台

    [CNMO 新闻]你用过安兔兔吗?可能大部分用过的人都是在安卓手机之上,其他产品上用的并不多.5 月 7 日,安兔兔官方宣布,继 Android 版和 iOS 版之后,安兔兔评测 Linux 版正式发 ...

最新文章

  1. 让智能手机和居家电脑互联互通(WM6 GPRS)
  2. 2021-01-24过去十年十大AI研究热点,分别为深度神经网络、特征抽取、图像分类、目标检测、语义分割、表示学习、生成对抗网络、语义网络、协同过滤和机器翻译。
  3. android studio文件风格,Android Studio构建风格 – 如何拥有不同风格的相同源文件
  4. 苹果手机怎么清理听筒灰尘_安卓 | 让手机自动清理听筒扬声器灰尘,你试过了吗?...
  5. 【JavaScript】鼠标单击核心价值观和线条变换实现
  6. 机器学习速成课程 | 练习 | Google Development——编程练习:使用 TensorFlow 的起始步骤
  7. 图文配置Silverlight3.0开发环境(转载)
  8. 拓端tecdat|R语言stan泊松回归Poisson regression
  9. 【优化算法】改进型的LMS算法-NLMS算法【含Matlab源码 631期】
  10. 这样选择报表系统,才能更好的进行企业管理
  11. js代码里链接生成二维码
  12. Linux升级glibc版本汉字乱码,glibc版本升级
  13. Everthing最强文件搜索神器
  14. 知乎运营推广方案PPT模板-优页文档
  15. 【Javafx】关于属性绑定需要在动画设置之后
  16. 基于RDO的单机的openstack搭建
  17. 我在赶集网的两个月(数据挖掘、竞情分析、产品、团购、运营、电话销售)
  18. SSM+智能社区服务的设计与实现 毕业设计-附源码221512
  19. javaweb 投票系统
  20. Arduino开发ESP8266时开发板管理器无法下载问题解决办法

热门文章

  1. linux服务器搭建_Linux下搭建FTP服务器笔记
  2. 黑历史有救了,淘宝可以改账号名了!网友:终于可以“重新做人”了
  3. 2199元起!荣耀60 SE真机上手图公布:相机模组造型眼熟
  4. 研究称:苹果开始感受到全球芯片短缺影响,但三星等受影响更大
  5. 明年1月发布!三星Galaxy S21系列爆料:首发骁龙875旗舰芯片
  6. 腾讯再回应被骗,悬赏1000瓶老干妈求线索!老干妈:腾讯从来没有催收过
  7. 明天起100亿消费券来袭,请作好准备!
  8. 5G商用正式启动:最全套餐资费详情都在这里了
  9. 简直没法玩!iOS 13三指手势影响多款游戏操作,腾讯建议玩家谨慎更新
  10. 三星5G手机全球销量200万台:年底将翻番