一般地,安装在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文件的内容,如下:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15# 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文件。修改的地方有几个。

启动参数:

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

配置串口控制台:

1

2

3

4

5# 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"

完整的文件如下:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34# 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文件如下:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15menuentry '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·里面的配置改回原来的。

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

1

2

3

4

5# 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日中午休息前

linux设置BIOS串口,将x86平台的Linux控制台重定向到串口相关推荐

  1. 将x86平台的Linux控制台重定向到串口

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

  2. 研华工控机linux改win7,嵌入式工控机研华工控机用u盘装系统如何设置bios?在虚拟机中的Linux系统中咋挂u盘 我的虚拟机上都没有USB 显示5...

    研华工控机用u盘装系统如何设置bios?在虚拟机中的Linux系统中咋挂u盘 我的虚拟机上都没有USB 显示5 在上一篇文章中,小编为您详细介绍了关于<有一个研祥工控机 旧的 想拆里面的视频采集 ...

  3. linux 内核移植4412,基于FS4412平台的Linux系统移植

    实验一 交叉工具链的安装 [实验目的] 了解交叉工具链的编译过程及其使用. 说明:在实验中命令行提示符 为"$"表示在主机上运行,"#"表示在目标板上运行 [实 ...

  4. linux进程tss和ldt,x86体系下linux中的任务切换与TSS

    tss的作用举例:保存不同特权级别下任务所使用的寄存器,特别重要的是esp,因为比如中断后,涉及特权级切换时(一个任务切换),首先要切换栈,这个栈显然是内核栈,那么如何找到该栈的地址呢,这需要从tss ...

  5. linux设置自己的网站,我是如何在Linux服务器部署自己的网站

    前提 突然想在腾讯云的服务器上部署一个markdown编辑器供自己使用,毕竟自己动手丰衣足食嘛.之前在我的服务器上已经部署过博客.一些静态网页了.但是很长时间没有去操作过了.借着这一次机会再把相关流程 ...

  6. linux设置开机自启 etc rt.d,Linux下禁止服务开机自启动

    一. Upstart是兼容System V的配置方式的,但主要的服务配置放在 /etc/init 下,这也就是为什么修改 /etc/rc${runlevel}.d/ (Ubuntu默认启动runlev ...

  7. linux设置steam为中文,[Steam聊天工具]Linux下,Steam中文输入的治标方案.

    2020-04-14 更新下现状,linux的steam上还是不能直接输入中文. 脚本后面又做了小改动.这个工具要配合着系统的快捷键来使用更方便.给它绑定一个全局快捷键,以方便在需要的时候呼出它来.s ...

  8. linux 设置swap分区,更改Swap分区大小 Linux

    >>参照原文:https://blog.csdn.net/hshl1214/article/details/6048278 以下的操作都要在root用户下进行,使用free -m 查询当前 ...

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

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

最新文章

  1. 以太坊今日大涨7.5%,芝商所备战“以太坊期货”
  2. python条件语句-python条件、循环语句
  3. 将功补过 树形动态规划
  4. 设置 tableview 的背景颜色,总是不生效
  5. CentOS 7.1下KVM的安装与配置
  6. DROP TABLE ** CASCADE CONSTRAINTS PURGE删除表的时候级联删除从表外键
  7. 微信小程序开发:学习笔记[9]——本地数据缓存
  8. mysql随机显示记录_mysql随机提取记录数的方法
  9. 博文视点大讲堂第44期——招聘真相全揭秘 圆满结束
  10. python模块:数字处理
  11. 框架鲜花商城系统测试_小程序商城 Open-Shop
  12. 人脸识别系统Python源代码的实现
  13. 【安价】亚拉奈夫想要复兴贫弱男爵家的样子【内政】2
  14. 数学漫游 - 向量投影和最小二乘法
  15. 天翼云80/8080/443端口访问不通问题
  16. 2022年外贸公司邮箱签名怎么设置?
  17. 保持青春的秘诀是有一颗不安份的心zz
  18. 【错误】Non-static method*** cannot be referenced from a static
  19. 【iOS 安全相关】
  20. Kafka 的简单介绍

热门文章

  1. 有趣!用计算机视觉技术与PaddlePaddle打造AI控烟项目
  2. js判断数字是否为整数
  3. fedora 安装smplayer 播放各种格式视频
  4. 出现一次的数字(找单身狗)
  5. IOS彩票第三天界面
  6. java音频播放器代码_java音乐播放器实现代码
  7. 内容更新 2014-08-13
  8. centos vi 设置显示行号
  9. 如何在STS正确导入项目
  10. Unity分辨率全屏设置的方法