在 Linux 启动时,我可以提前多久将数据发送到串行端口?

问题描述

我有一个外部串行外围设备,需要在嵌入式系统的 Linux 启动时进行设置。 我需要的是在系统启动期间尽早发送一个简短的配置字符串,所以我的程序很简单

  • 将端口设置为 115200 bps
  • 发送一个字符串,比如“ABCDE\r\n”

我看到最近的内核支持早期的串行控制台,但我需要的不是控制台(我的外围设备也可以在那个阶段发送无意义的数据,而且我将在图形模式下显示启动画面),只是外围设备的快速初始化。

怎么做?

解决方法

这个问题的答案将是主观的,取决于您所说的尽早是什么意思。我将提供一些我知道的可能对您有帮助的可能性

  • 如果您的嵌入式平台使用任何形式的引导加载程序(例如:U-Boot),那么您可以将串行(UART)初始化作为引导加载程序的一部分(通常这将仅针对目标平台完成,因此我们可以看到引导发生的程度)。您可以尝试在引导加载程序本身中初始化您的外部串行外围设备。由于引导加载程序将在 linux 内核加载之前执行,因此您可以轻松实现这一点。

  • 如果您的平台不使用任何形式的引导加载程序,则可以通过内核驱动程序(或)系统初始化进程来初始化外部串行外围设备。

我一直在使用 PSplash 程序,它使用基本的帧缓冲驱动程序进行引导。如果有兴趣,请查看以下 repo

PSplash