Dux*_*uxa 0 linux serial serial-port headless minicom
我有一个运行 Ubuntu Server(无头)的 Linux 服务器(在桌面硬件上)。它隐藏起来并且很难访问,每年一次更新或其他原因会造成我无法再通过 ssh 访问它的问题。所以我的解决方案是花一个小时在上面连接一个显示器和一个键盘来调试。
更简单的解决方案是能够从树莓派之类的东西串行到它。目前该服务器中没有串口,有一个空的 PCI-E 插槽,但我不认为添加串口卡可以实现我想要的功能。我不想从此服务器访问串行连接,我想通过串行访问该服务器。
我知道如何做 Rpi 部分。如何创建一个接口(以及通过什么方式实现?)以便能够串行到此 Linux 无头服务器?
更好的是,除了串行之外,也许还有其他解决方案?USB 到 USB?服务器上 Rpi 到 USB 的标头?但它不能涉及网络,必须无需 IP 即可访问。
我的最终目标是能够从树莓派通过控制台访问服务器
编辑:这是主板,看起来在板的左上角有一个串行头。
\n\n我不认为添加串行卡会做我想做的事。我不想从此服务器访问串行连接,我想通过串行访问该服务器。
\n
这实际上是同一件事。硬件是一样的,只是哪一边运行软件来显示登录提示的问题。
\n串口是双向的,就像你使用同一种类型的以太网卡发送数据包和接收数据包 \xe2\x80\x93 它们都是双向的,你不需要使用一种类型的以太网来发起连接和另一种类型来接收它们。
\n(嗯,确实,串行线的“DTE”和“DCE”端之间存在细微差别,但许多直接连接只是完全忽略所有附加的载波检测线,因为最终它并不重要 \xe2 \x80\x93 例如,你的 Pi 可能除了 Rx 和 Tx 之外没有任何东西。所以除了这些之外,任何一方都可以通过串行线打印出“Login:”,并且任何一方都可以打印出 shell 提示符。)
\n请注意,许多稍旧的台式机实际上在主板上有一个内置串行端口接头(4 针),即使它们缺少实际的 DE9 连接器。
\nUSB 至 RS232 转换器也是一种选择;USB 设备将被识别为串行端口。和以前一样,人们用来从 PC 连接到 Pi 的适配器的工作方式完全相同在相反的方向上也(链接两个这样的转换器来制作“USB-to-RS232-to-USB”电缆也是可能的,并且其工作方式与内置串行端口相同。)
\n注意: Pi 需要一些东西来处理比普通 RS232 更低的电压,尽管 \xe2\x80\x93 其 UART 引脚使用 3.3V 信号,而标准端口通常在 5V(甚至高达 12-15V)下工作。如果没有一些额外的电子设备,计算机的 Tx 信号有可能烧毁 Pi 的 UART,而 Pi 的 Tx 信号可能太低而无法被计算机接收。
\n\n\n如何创建一个接口(以及通过什么方式实现?)以便能够串行到此 Linux 无头服务器?
\n
串行端口不是网络接口;它们是 tty 线路。只要该端口被系统识别,就会自动拥有一个/dev/tty*设备节点。(确切的命名有所不同;内置 PC 串行端口使用ttyS#名称,而 Pi 平台有ttyAMA#,USB 转 RS232 适配器可能是 或ttyUSB#。ttyACM#)
串行端口始终处于“开启”状态并且可以传输数据,您需要做的唯一配置就是设置其两侧的速率。Minicom 或 picocom 等程序会自动执行此操作;如果您想通过 shell 进行查看,请使用stty(请注意,这不是持久性更改):
# stty -F /dev/ttyS0 38400\n\n# echo Hello > /dev/ttyS0\n\n# cat /dev/ttyS0\nHello from the other side!\n^C\n#\nRun Code Online (Sandbox Code Playgroud)\n此时,您可以手动启动 shell,并将其输入/输出连接到串行线,尽管就崩溃而言这是完全不可靠的:
\n# TERM=vt220 bash </dev/ttyS0 &>/dev/ttyS0\n[appears to hang, because its prompt went to ttyS0 instead]\nRun Code Online (Sandbox Code Playgroud)\n要在串行 tty 线路上正确getty启动登录提示,请使用\xe2\x80\x93,与在本地“控制台”tty 上显示登录提示的过程相同。在基于 systemd 的发行版上,您可以通过启动serial-getty@服务来执行此操作:
systemctl enable --now serial-getty@ttyACM0.service\nRun Code Online (Sandbox Code Playgroud)\n此配置中agetty的默认设置是自动检测串行线的速度(波特率);也可以通过编辑服务的 ExecStart 来显式设置它。请参阅大量现有教程以获取更多信息,例如 Arch Linux Wiki。
\n对于基于 sysvinit 的系统,相当于将“getty”实例添加到 /etc/inittab。
\n您可能还想使用以下命令重定向内核控制台(其中复制 dmesg 警告和错误)console=。
console=ttyS1,115200n8 console=tty0\nRun Code Online (Sandbox Code Playgroud)\n最后,重定向你的引导加载程序重定向到串行端口 \xe2\x80\x93 GRUB2 支持通过串行显示其引导菜单;当您需要以某种方式引导到备用内核时,这非常有用:
\n(/etc/default/grub)\nGRUB_TERMINAL="console serial"\nGRUB_SERIAL_COMMAND="serial --unit=0 --speed=115200"\nRun Code Online (Sandbox Code Playgroud)\n合适的“服务器”主板还支持通过串行重定向其初始启动屏幕。(话又说回来,合适的“服务器”主板也将支持 IPMI Serial-over-IP。)
\n除了上述所有方法之外,您实际上可以使用 tty 线路运行 PPP ,并pppd为 IP-over-serial 创建实际的网络接口(这就是拨号 Internet 访问的工作方式),但登录不需要这样做到系统;直接通过同一 tty 线路发送登录提示要简单得多。
| 归档时间: |
|
| 查看次数: |
1094 次 |
| 最近记录: |