Linux kernel 如何在Linux中设置串行端口以PIO模式(而不是DMA)运行

Linux kernel 如何在Linux中设置串行端口以PIO模式(而不是DMA)运行,linux-kernel,serial-port,linux-device-driver,dma,Linux Kernel,Serial Port,Linux Device Driver,Dma,我正在使用ubuntu,需要我的串行端口以PIO模式外部运行,以满足高精度读取要求(高度确定性奇偶校验错误检测)。 我无法确定我的/dev/stty0串行端口是否实际在DMA或PIO模式下运行 我无法确定了解此配置的setserial或stty参数 我发现了传递内核参数的可能性 setenv defargs'${defargs}fsl_lpuart.nodma=0' 用于启用/禁用DMA,但不清楚应在何处使用该命令 正在测试的硬件: 联想v520S con Intel Core i5-7400处

我正在使用ubuntu,需要我的串行端口以PIO模式外部运行,以满足高精度读取要求(高度确定性奇偶校验错误检测)。 我无法确定我的/dev/stty0串行端口是否实际在DMA或PIO模式下运行

我无法确定了解此配置的setserial或stty参数

我发现了传递内核参数的可能性

setenv defargs'${defargs}fsl_lpuart.nodma=0'

用于启用/禁用DMA,但不清楚应在何处使用该命令

正在测试的硬件: 联想v520S con Intel Core i5-7400处理器的集成串行端口
端口详细信息:/dev/ttyS0,UART:16550A,端口:0x03f8,IRQ:4)

一般来说,您可能无法确定,b/c它因硬件而异。不过,正如您所注意到的,对于特定驱动程序,有一个选项是传递内核命令行参数。只需在引导加载程序中执行即可。另一个是尝试制作更多低延迟的通用旋钮。根据您的目的和要求,寻找现有的硬件产品及其设备驱动程序会节省时间,您能获得性能/质量保证吗?0安德烈,请详细介绍一下低端通用旋钮。我没有在该领域进行研究,我的理解纯粹是一个如何实现的观点。因此,如果还没有修改的话,应该修改整个堆栈,即UART驱动程序->串行核心->tty(可能不需要)->UAPI(IOCTLs)->工具(
setserial
),以便在基本禁用DMA和可能启用其他一些硬件怪癖时支持此模式。为什么不尝试不同的路径,简单地测试您的(未指定)性能如何硬件检测8个数据位的奇偶校验错误?建议首先使用7位字符+奇偶校验进行测试,因为我使用由USB串行转换器发送并由PC移动UART接收的8位字符+奇偶校验得到的结果不可靠。一般来说,您可能不确定,b/c它因硬件而异。不过,正如您所注意到的,对于特定驱动程序,有一个选项是传递内核命令行参数。只需在引导加载程序中执行即可。另一个是尝试制作更多低延迟的通用旋钮。根据您的目的和要求,寻找现有的硬件产品及其设备驱动程序会节省时间,您能获得性能/质量保证吗?0安德烈,请详细介绍一下低端通用旋钮。我没有在该领域进行研究,我的理解纯粹是一个如何实现的观点。因此,如果还没有修改的话,应该修改整个堆栈,即UART驱动程序->串行核心->tty(可能不需要)->UAPI(IOCTLs)->工具(
setserial
),以便在基本禁用DMA和可能启用其他一些硬件怪癖时支持此模式。为什么不尝试不同的路径,简单地测试您的(未指定)性能如何硬件检测8个数据位的奇偶校验错误?建议首先使用7位字符+奇偶校验进行测试,因为我使用USB串行转换器发送并由PC mobo UART接收的8位字符+奇偶校验得到的结果不可靠。