USB-OTG 可以用于 U-Boot 和 Linux 控制台吗?
Can USB-OTG be used for U-Boot and Linux consoles?
我有一个自定义的基于 i.MX6Q 的开发板,带有工作的 U-Boot 和 Linux (Ubuntu) 设置。 micro和板子都支持USB-OTG和一个串口;目前,串口服务于 U-Boot 和 Linux 的控制台。然而,我们可能需要将串口用于其他目的,但我们不想为 U-Boot 和 Linux 而失去控制台。是否可以将 USB-OTG 端口用于 U-Boot 和 Linux 的系统控制台?
我做了一些研究,发现了几篇很有前途的文章 here and here,尽管第二篇文章说了这个花絮:
Unfortunately it won't work as system console as the gadget driver is loaded as a module, but we can use it for serial console.
我不确定我是否理解这一点,但听起来该方法不能满足我的需求,即为 U-Boot 和 Linux 系统控制台使用 USB-OTG。我确实尝试了这些方法,但没有成功,这可能意味着 U-Boot 和 Linux 没有正确构建所需的功能。
所以这是我的问题:
- 这可以用于 U-Boot 吗?
- 这对 Linux 有效吗?
- 我是不是疯了才考虑这条路?
如果能提供任何指导(例如教程、示例等),我们将不胜感激。
谢谢!
- Can this work for U-Boot?
是的,至少自 U-Boot 版本 2008.10 起,README 文件已说明:
Define the below if you wish to use the USB console.
CONFIG_USB_DEVICE
Define this to build a UDC device
CONFIG_USB_TTY
Define this to have a tty type of device available to
talk to the UDC device
CFG_CONSOLE_IS_IN_ENV
Define this if you want stdin, stdout &/or stderr to
be set to usbtty.
请注意,这些配置符号无法使用 menuconfig 访问,必须在配置文件中启用。
目前至少有五块板使用此 U-Boot 功能,基于 include/configs/ 中文件中 CONFIG_USB_TTY 的出现,例如 include/configs/ti_omap4_common.h。
此 USB 配置需要 stdin
和 stdout
环境变量的非默认定义。有关详细信息,请参阅 README 文档。
- Can this work for Linux?
是的,Linux(至少从 4.5 版开始)可以在 USB 连接上有一个串行控制台,可以是主机端口上的 USB 转串行适配器,也可以是设备端口上的 USB 串行小工具(使用 CDC/ACM)。
例如,在drivers/usb/gadget/Kconfig中有选择:
config U_SERIAL_CONSOLE
bool "Serial gadget console support"
depends on USB_G_SERIAL
help
It supports the serial gadget can be used as a console.
在 Linux 5.7.8 内核中,只有两块板具有使用此功能的默认配置,例如参见 [=23=]。
除了构建必要驱动程序的正确配置外,串行小工具控制台还需要 (1) 内核参数规范(例如 console=ttyGS0,...
),以及 (2) 由 getty 命令(例如在 inittab 文件中)。
- Am I insane for contemplating this path?
无评论。
请注意,如果您遇到内核启动问题,Linux serial-gadget 控制台不支持 earlycon 也不支持 earlyprintk能力。
就我个人而言,我更喜欢使用一个连续的 link,无论目标板的状态如何,它都是持久的。这确保了终端仿真器程序不会抱怨丢失的连接。
附录
不幸的是,USB 串行小工具上的这个 Linux 控制台不显示内核生成的引导消息(在登录提示之前),即使所有驱动程序都静态地 linked 到内核中图片。
尽管系统日志中有类似
的消息
console [ttyGS0] enabled
g_serial gadget: g_serial ready
...
gs_open: ttyGS0 ((ptrval),(ptrval))
在显着 Freeing unused kernel memory
消息之前,主机端不会收到任何控制台消息,直到用户空间处于活动状态。
本指南中也报告了此缺点:https://linux-sunxi.org/USB_Gadget/Serial
我有一个自定义的基于 i.MX6Q 的开发板,带有工作的 U-Boot 和 Linux (Ubuntu) 设置。 micro和板子都支持USB-OTG和一个串口;目前,串口服务于 U-Boot 和 Linux 的控制台。然而,我们可能需要将串口用于其他目的,但我们不想为 U-Boot 和 Linux 而失去控制台。是否可以将 USB-OTG 端口用于 U-Boot 和 Linux 的系统控制台?
我做了一些研究,发现了几篇很有前途的文章 here and here,尽管第二篇文章说了这个花絮:
Unfortunately it won't work as system console as the gadget driver is loaded as a module, but we can use it for serial console.
我不确定我是否理解这一点,但听起来该方法不能满足我的需求,即为 U-Boot 和 Linux 系统控制台使用 USB-OTG。我确实尝试了这些方法,但没有成功,这可能意味着 U-Boot 和 Linux 没有正确构建所需的功能。
所以这是我的问题:
- 这可以用于 U-Boot 吗?
- 这对 Linux 有效吗?
- 我是不是疯了才考虑这条路?
如果能提供任何指导(例如教程、示例等),我们将不胜感激。
谢谢!
- Can this work for U-Boot?
是的,至少自 U-Boot 版本 2008.10 起,README 文件已说明:
Define the below if you wish to use the USB console.
CONFIG_USB_DEVICE
Define this to build a UDC device
CONFIG_USB_TTY
Define this to have a tty type of device available to
talk to the UDC device
CFG_CONSOLE_IS_IN_ENV
Define this if you want stdin, stdout &/or stderr to
be set to usbtty.
请注意,这些配置符号无法使用 menuconfig 访问,必须在配置文件中启用。
目前至少有五块板使用此 U-Boot 功能,基于 include/configs/ 中文件中 CONFIG_USB_TTY 的出现,例如 include/configs/ti_omap4_common.h。
此 USB 配置需要 stdin
和 stdout
环境变量的非默认定义。有关详细信息,请参阅 README 文档。
- Can this work for Linux?
是的,Linux(至少从 4.5 版开始)可以在 USB 连接上有一个串行控制台,可以是主机端口上的 USB 转串行适配器,也可以是设备端口上的 USB 串行小工具(使用 CDC/ACM)。
例如,在drivers/usb/gadget/Kconfig中有选择:
config U_SERIAL_CONSOLE
bool "Serial gadget console support"
depends on USB_G_SERIAL
help
It supports the serial gadget can be used as a console.
在 Linux 5.7.8 内核中,只有两块板具有使用此功能的默认配置,例如参见 [=23=]。
除了构建必要驱动程序的正确配置外,串行小工具控制台还需要 (1) 内核参数规范(例如 console=ttyGS0,...
),以及 (2) 由 getty 命令(例如在 inittab 文件中)。
- Am I insane for contemplating this path?
无评论。
请注意,如果您遇到内核启动问题,Linux serial-gadget 控制台不支持 earlycon 也不支持 earlyprintk能力。
就我个人而言,我更喜欢使用一个连续的 link,无论目标板的状态如何,它都是持久的。这确保了终端仿真器程序不会抱怨丢失的连接。
附录
不幸的是,USB 串行小工具上的这个 Linux 控制台不显示内核生成的引导消息(在登录提示之前),即使所有驱动程序都静态地 linked 到内核中图片。
尽管系统日志中有类似
console [ttyGS0] enabled
g_serial gadget: g_serial ready
...
gs_open: ttyGS0 ((ptrval),(ptrval))
在显着 Freeing unused kernel memory
消息之前,主机端不会收到任何控制台消息,直到用户空间处于活动状态。
本指南中也报告了此缺点:https://linux-sunxi.org/USB_Gadget/Serial