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.

[参考译文] SK-AM62-LP:在 Linux 内核在 CCS 中运行时读取寄存器

Guru**** 2560390 points


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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/1567232/sk-am62-lp-read-registers-while-the-linux-kernel-is-running-in-ccs

器件型号:SK-AM62-LP


工具/软件:

尊敬的团队:

我们希望在 Linux 内核在 CCS 中运行时读取寄存器。 请参阅下图。 如果有其他方法可以实现这一目标、也请予以分享。

我们的目标是在寄存器级调试内核。

此致、
Gopal Sharma

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

    您好:

    CCS 有寄存器视图(从顶部菜单 View -> Registers)、您是否可以使用它?  

    谢谢、

    Alex

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

    您好 Alex、

    CCS 有寄存器视图(从顶部菜单 View -> Registers)、您是否可以使用它?  

    是的、我们可以查看寄存器、但需要确认此方法是否有效。

    使用 CCS、我在停止 A53 内核时捕获了以下寄存器转储。  



    我观察到寄存器值已更新,但下面列出的寄存器总是显示0


    您能否确认这是否是读取寄存器值的有效方法? 这些值是否反映了实际的 CSI-RX 寄存器?

    此致、
    Gopal Sharma

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

    是的、这应该反映了实际值、我想问您是否能够看到其他寄存器值、而对于其他模块则是零 0x00000。  

    因此、必须确保 CSI_RX_IF0(或任何实际外设)可能未通电/启用、或者没有激活/启用其接口时钟来读取/控制 MMR 块(存储器映射寄存器块)、您可能只得到零。 确保已启用 CSI_RX_IF0 并且接口时钟正在运行。

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

    您好 Alex、

    感谢您的支持。

    其他寄存器显示不同的值。
    如果可能、您能否分享启用 CSI_RX_IF0 的方法或指导我们如何调试此问题?

    此致、
    Gopal Sharma

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

    我们正在内部进行检查、并将尽快回复您。  

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

    你好 Gopal Sharma ,  

    我看到您点击了这个选项、您可以详细说明一下您是如何解决问题的、如果其他社区成员遇到类似的问题、您可以参考这个问题吗?

    谢谢您、

    Alex

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

    您好 Alex、

    仅在流式传输开始后才会更新这些值。 在此之前、当我们在不进行流式传输的情况下检查这些寄存器值时、它们不会更新。

    此致、
    Gopal Sharma

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

    好的、感谢确认。

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

    您好 Alex、

    是否可以使用 CCS 手动更改该值?

    此致、
    Gopal Sharma

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

    你好 Gopal Sharma ,

    是的、您应该能够 直接从“Registers"视“视图否更改寄存器值?  您也可以上拉“Memory"视“视图、转到寄存器地址并从中进行更改。 这两种方法都对您有用。

    注意:硬件/软件可能会出于任何原因保留覆盖寄存器、因此您可能看不到手动更改。  

    请尝试一下、并告诉我们。

    谢谢、

    Alex

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

    您好 Alex、

    我们针对 Memory 视图执行的步骤导致了错误。











    此致、
    Gopal Sharma

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

    您好、Gopal、

    你到底想在这里完成什么?

    如果您只是尝试调试外设无法在 Linux 中工作的原因、我不建议使用 CCS 来调查寄存器。

    对于未来的读者、我在 Gopal 的另一个主题上提供了指向我知道的 CCS/Linux 调试资源的链接:
    SK-AM62-LP:查询:如何使用 CCS 调试内核驱动程序 

    一般调试步骤

    请注意、在这些论坛上、我们支持有关 TI 软件或 TI 硬件的问题、但我们不支持“通用 Linux“问题。 我将提供一些高级指导、但如果您想了解有关调试 Linux 的更多信息、则需要从其他地方(如 Bootlin)学习。

    首先、检查 Linux 终端引导日志。 外设是否按预期初始化? 是否看到任何错误输出? 尝试查找错误代码以查看它是否为您提供了更多信息(例如,“file not found“、“timeout",“,"resource、"resource not“ not available“等)。

    请检查 Linux 器件树文件。 外设是否已正确启用和配置?

    您也可以执行很多操作、例如使用 devmem2 工具从 Linux 终端读取寄存器值。

    此致、

    Nick

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

    您好、Nick、

    感谢您的支持。

    此帖子与我们在以下主题中面临的问题相关:
    https://e2e.ti.com/support/processors-group/processors/f/processors-forum/1549143/am620-q1-sk-am62-lp-issue-csi-2-i2c-interfacing-with-ov2311-sccb-protocol-always-reads-0x00-from-chip-id-0x300a/6036254?tisearch=e2e-sitesearch&keymatch=%252525252520user%25252525253A613007#

    我也同意你的关切。

    此致、
    Gopal Sharma

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

    您好、Gopal、

    我懂了。 很高兴看到这个问题已经有一个开放的主题。 我将与建中核实他是否需要从我这边对你的另一个线程的任何输入。

    此致、

    Nick

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

    从 Linux 终端检索存储器转储时(而不是插入 CCS):

    devmem2 仅检索特定的 32 位字。 几年前我知道我有一个脚本从终端转储一系列内存。 如果这对您有用、请告诉我、我可以看看我是否仍在计算机上的某个位置隐藏该代码。

    此致、

    Nick

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

    您好、Nick、

    如果您可以共享脚本、那将会很好。

    此致、
    Gopal Sharma

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

    您好、Gopal、

    在这里。  我将其保存 到 EVM 上名为 devmem2-range.sh 的脚本中:

    #!/bin/sh
    
    #  usage: devmem2-range.sh 41010000 41010050
    #  NOTE: change to .sh and add executable permissions
    
    FROM=$1 TO=$2
    if test ${#FROM} -gt ${#TO}; then
        FORMAT="%0${#FROM}X"
    else
        FORMAT="%0${#TO}X"
    fi
    FROM=$(printf '%d' 0x$FROM) TO=$(printf '%d' 0x$TO)
    while test $FROM -le $TO; do
    #   printf $FORMAT $FROM
        out=$(printf $FORMAT $FROM)
    #   echo $out
              devmem2 0x$out | grep Read
        FROM=$((FROM+4)) #32byte regs
        done
    printf '\n'

    我可以让您试用一下、并让我知道它是否可以正常工作而不做任何更改吗? 如果是这样、我将把它变成一个常见问题解答、以便其他人更容易找到。

    此致、

    Nick