This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] Linux/AM57X:是否可以强制 USB3.0始终作为 USB2.0运行?

Guru**** 2543870 points


请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/745832/linux-am57x-usb3-0-can-be-forced-to-run-as-usb2-0-always

现在、我将使用适用于 am572x 的 Process SDK 03.02.05。

条件:

usb3.0磁盘连接到 usb3.0端口。

USB2.0磁盘连接到 USB2.0端口。

   在 usb3.0  和 USB2.0磁盘之间复制文件(总大小约为1GB)时、Linux 将会崩溃。

条件:

usb3.0磁盘连接到 USB2.0端口。

USB2.0磁盘连接到 usb3.0端口。

在做上述同样的事情时、一切都正常。

是否有任何修补程序可以解决此问题?

或者强制 usb3.0端口始终作为 USB2.0运行的任何方法、即使与 USB 3.0磁盘连接也是如此。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好 Junhu、

    请提供以下详细信息。

    -这是在您的定制板还是 TI EVM 上发生的? 如果您的主板、请发布原理图的 USB 部分、其中显示了哪个端口是 USB3.0端口、哪个端口是 USB2.0端口。
    - SDK/内核版本是什么?
    -请附加显示崩溃的完整内核日志。
    -您测试了多少种不同的 USB 设备?

    顺便说一下、除了添加 USB2.0集线器外、在软件中没有其他方法强制 USB3.0端口在 USB2.0模式下工作。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    -这是在您的定制板还是 TI EVM 上发生的? 如果您的主板、请发布原理图的 USB 部分、其中显示了哪个端口是 USB3.0端口、哪个端口是 USB2.0端口。

    是的、这是我的定制板。

    USB 部分

    e2e.ti.com/.../7587.usb.pdf

    - SDK/内核版本是什么?

    PSDK:03.02.05、内核:4.4.32

    -请附加显示崩溃的完整内核日志。

    崩溃后、CP 仍然继续。

    e2e.ti.com/.../ZOC1811.LOG

    -您测试了多少种不同的 USB 设备?

    USB3.0:Toshiba TransMemory-MX USB 磁盘;Kingston DataTraveler 100G3 USB 磁盘;Transcend USB3.0 SD 读卡器、带不同的 SD 卡(8G、16G)

    USB2.0:具有 不同 SD 卡(8G、16G)的 SSK USB 2.0 SD 读卡器

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    这是我的内核的配置文件。

    e2e.ti.com/.../siui_5F00_am57xx_5F00_defconfig.txt

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好、Jinhu、

    内核转储是由于内核内存管理中的内核内存分配失败(设置了标志 page_FLAGS_CHECK_at_prep)。 我不知道导致目前失败的原因、但这可能是内核中的错误。 您能否使用最新的 Processor SDK 进行测试、以查看问题是否仍然发生?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    是的、我认为这也是内核中的一个错误。

    但由于产品的截止日期、我没有时间全部移植到最新的 SDK。

    我想知道是否有任何修补程序可以解决我的问题? 或者更改一些内核选项?

    我检查了 git 上的所有 COM 从内核 SDK 03.02.05到03.03.00、但似乎没有 COM 解决问题。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我将尝试将内核更新为最新版本的 SDK。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    是的、您不必移植整个 SDK、只需使用最新 SDK v5.1中的新内核进行测试。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您能给我一个"board-supPOR/extra driver"的 git 吗?

    我不想下载并提取所有最新的 SDK。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    要测试 USB 本身、您不必使用额外的驱动程序。
    或者、您也可以下载 SDK 源包 am57xx-EVM-Linux-SDK-src-05.01.00.11.tar.xz、该源包较小、约为1.2GB。
    software-dl.ti.com/.../am57xx-evm-linux-sdk-src-05.01.00.11.tar.xz
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    结果与内核4.14.67相同。
    在 CP 期间、内核会显示 PAGE_FLAGS_CHECK_at_KETK。

    是否有解决此问题的想法?

    或者任何内核选项都是错误的?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    是内存问题还是内核错误?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    e2e.ti.com/.../0385.ZOC1811.LOG

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    不仅包括 USB3.0、还包括 USB2.0

    我使用"dd if=/dev/zero of=/零点 bs=1M count=4096"

    两个都是崩溃。

    页面似乎未被释放。


    是否有解决问题的想法?

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好、Jinhu、

    我目前无法解释问题、以前没看到过这个问题。
    但是、我将在 AM57x EVM 上运行相同的测试、以查看是否可以重现问题、然后我可以对其进行调试。
    您能否为 SDK 03.02和 SDK 5.1内核附上内核配置文件/proc/config.gz?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    适用于 SDK 03.02的 config.gz

    e2e.ti.com/.../5327.config.gz

    将内核更新到05.01后、但没有用处、因此我恢复到 SDK 03.02、需要再次执行此操作以更新到05.01、因此 config.gz 将会稍后更新。

    但我不更改 kenel 05.01的任何配置、唯一的问题是制作 menuconfig 并保存、然后解决 make 期间的一些错误。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    请首先测试 SDK 03.02、然后告诉我结果、谢谢。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我在 AM57x GP EVM 上使用 Processor SDK v3.2预编译映像进行了测试、并使用 config.gz 重新编译了内核映像、但我无法看到崩溃。

    您是否使用了以下链接中的 am57x GP EVM?
    www.ti.com/.../tmdsevm572x

    在互联网上搜索 page_FLAGS_CHECK_at_prep 不会显示太多信息、但有人建议可能与电源和存储器相关。

    您是否使用 EVM 封装随附的电源?
    您是否每次在测试中都看到崩溃?
    您是否使用不同的电路板进行了测试?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    谢谢。

    我终于找到了错误所在的位置。

    它来自第三个 partrry PCI 驱动程序的代码。

    ///----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

    pMemObject->pKernelVa =
    dma_alloc_相干(
    PDX->pPciDevice->dev、
    pMemObject->Size、
    总线地址(&B),
    GFP_kernel |__GFP_NOWARN
    );
    
    printk ("pMemObject->pKernelVa:%p、大小:%d\n"、pMemObject->pKernelVa、pMemObject->size);
    
    if (pMemObject->pKernelVa =NULL)
    {
    返回 NULL;
    }
    
    //存储总线地址
    pMemObject->BusPhysical =(ADS_UINT_PTR) BusAddress;
    
    #if 0
    //将所有页面标记为保留
    for (virt_addr =(ADS_UINT_PTR) pMemObject->pKernelVa;
    virt_addr <((ADS_UINT_PTR) pMemObject->pKernelVa + pMemObject->size);
    virt_addr += page_size)
    {
    SetPageReserved (virt_TO_PAGE (ADS_INT_TO_PTR (virt_addr)));
    }
    #endif
    
    //获取缓冲器的 CPU 物理地址
    pMemObject->CpuPhysical =(ADS_UINT_PTR) virt_TO_phys (pMemObject->pKernelVa);
    
    //清除缓冲区
    memset(pMemObject->pKernelVa, 0, pMemObject->Size);
    
    DebugPrintf (("分配的物理内存...\n")); 

    //------------------------------------------------------------

    该错误由 SetPageReserved 引起、我不知道为什么要使用、因为驱动程序不支持 mmap。

    在对代码块进行注释后、似乎可以。

    顺便说一下:

    我使用的内核版本为4.4.3.32、而03.02 SDK 的 git 分支为4.4.4.150。

    我是否必须更新到4.4.4.150?

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好!

    [引用 user="jinhu Wu"]错误是由 SetPageReserved 引起的,我不知道为什么要使用,因为驱动程序不支持 mmap。

    我很高兴看到问题得到解决。

    [引用用户="jinhu Wu"]

    我使用的内核版本为4.4.3.32、而03.02 SDK 的 git 分支为4.4.4.150。

    我是否必须更新到4.4.4.150?

    [/报价]

    通常、建议更新到最新的内核点版本、但最好查看新的补丁、以确保它们不会产生影响您的项目的新回归。