Ubuntu设置RS-232串口登陆终端(译文,节选)

原文地址:http://2stech.ca/index.php/linux/linuxtutotials/tutorials/207-ubuntu-serial-console-login

 

如果你有一台服务器(不论大小),保留一个可以用来登陆系统的串口终端,通常来说是一件非常好的事情。这篇短文将展示如何配置服务器或PC上的串口,使其可以用作登陆终端。

前提

  • 你已经在BIOS中启用了串口;
  • 机器上第一个串口(在Linux系统中称作/dev/ttyS0)使用的连接模式为“115200 8n1”,即:模特率115200,8个数据位,1个停止位,无奇偶校验。若串口不支持这种通讯方式,一般而言会使用“9600 8n1”模式;
  • 你有足够的能力及自信,去编辑和修改关键的系统文件(如/etc/inittab, /boot/grub/menu.lst等); 
  • You are using a serial (null modem) cable. It is also possible to use a USB to Serial adaptor, but the tty* must be changed to reflect your hardware.

配置终端登陆过程

较新版本的 Ubuntu 系统使用 Upstart 来启动。这就是我们要修改的第一个东西。

如果你查看 /etc/init 目录下的文件,你会发现一些已有的终端服务配置文件,如 tty1.conf 等。很简单,我们可以复制其中一个文件:

$ cp /etc/init/tty1.conf /etc/init/ttyS0.conf

然后我们对新建的 ttyS0.conf 进行修改:

将:

# tty1 - getty

改为:

# ttyS0 - getty

将:

# This service maintains a getty on tty1 from the point the system is

改为:

# This service maintains a getty on ttyS0 from the point the system is

将:

exec /sbin/getty -8 38400 tty1

改为:

exec /sbin/getty -L 115200 ttyS0 vt102

理论上讲,文件的注释部分是不需要修改的。但为了可读性及后期维护,我们仍旧修改它。 
当你完成了以上修改, ttyS0.conf 文件应该差不多是以下这个样子:

# ttyS0 - getty 

# This service maintains a getty on ttyS0 from the point the system is 
# started until it is shut down again.

start on stopped rc RUNLEVEL=[2345] 
stop on runlevel [!2345]

respawn 
exec /sbin/getty -L 115200 ttyS0 vt1022

此时,你就可以开启这个服务了:

$ sudo start ttyS0

搞定!现在你就可以尝试用串口进行登陆了~

转载于:https://www.cnblogs.com/Ricky-Gong/p/4437928.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Ubuntu 20.04中,你可以使用以下步骤来创建一个C++工程,并编写代码来接收并解析RS-232串口数据: 1. 创建一个新的C++项目 你可以使用你喜欢的C++ IDE,例如Visual Studio Code或者Qt Creator,来创建一个新的C++项目。在创建项目时,选择C++作为项目类型,并且指定你想要保存项目的路径。 2. 包含必要的头文件 在你的C++代码文件中,你需要包含以下头文件: ```c++ #include <iostream> #include <fcntl.h> #include <termios.h> #include <unistd.h> #include <string.h> ``` 这些头文件将帮助你设置RS-232串口的参数,打开串口并读取数据。 3. 打开串口设置参数 在你的代码中,你需要使用以下代码来打开串口设置参数: ```c++ int fd; // 串口句柄 termios tty; // 串口参数 fd = open("/dev/ttyS0", O_RDWR | O_NOCTTY); // 打开串口 if (fd < 0) { std::cerr << "Error: could not open serial port." << std::endl; return 1; } tcgetattr(fd, &tty); // 获取当前串口参数 cfsetospeed(&tty, B9600); // 设置波特率为9600 cfsetispeed(&tty, B9600); tty.c_cflag &= ~PARENB; // 设置无奇偶校验 tty.c_cflag &= ~CSTOPB; // 设置停止位为1 tty.c_cflag &= ~CSIZE; // 设置数据位为8 tty.c_cflag |= CS8; tcsetattr(fd, TCSANOW, &tty); // 设置新的串口参数 ``` 请注意,这里我们打开的是/dev/ttyS0串口设备。如果你使用的是其他串口设备文件,请将其替换成相应的文件名。 4. 读取串口数据 在你的代码中,你需要使用以下代码来读取串口数据: ```c++ char buffer[256]; // 字符缓冲区 int n = read(fd, buffer, sizeof(buffer)); // 读取数据 if (n > 0) { // 处理数据 } ``` 这里我们使用read()函数来读取串口数据。如果读取成功,read()函数将返回读取的字节数。你可以在读取数据后进行相应的处理。 5. 解析串口数据 最后,你需要根据你所使用的串口通信协议,来解析串口数据。具体的解析过程取决于你所使用的协议,这里无法提供具体的代码示例。 综上所述,以上代码仅仅是一个简单的演示,实际应用中需要根据具体的需求进行更加完善的设计与开发。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值