tracing

    xiaoxiao2023-10-02  154

    #将跟踪添加到设备驱动程序

    本文档介绍如何向设备驱动程序添加跟踪。

    ##概述

    请阅读[Fuchsia追踪系统设计](../tracing/design.md) 有关跟踪的概述。

    ##跟踪提供者

    驱动程序不必指定跟踪提供程序,devhost进程通过`libdriver.so`提供它。这里提到它是为引入主题。

    ##添加跟踪记录

    ###来源添加

    通过调用`TRACE_*()`宏(`ddk/trace/event.h`),最容易添加跟踪记录。

    可以发出各种跟踪记录。 有关说明,请参阅`trace/internal/event_common.h`中各种宏定义。

    从内部实现文件中查找宏相关文档是暂时的情况。最终这样的文档将存在于一个更合适的地方。

    例:

    ```c++ #include <ddk/trace/event.h>

    void DoSomething(int a, std::string b) {   TRACE_DURATION("example:example1", "DoSomething", "a", a, "b", b);

      // Do something } ```

    大多数宏的前两个参数是“类别”和事件名称。这里它们分别是“example:example1”和“DoSomething”。

    跟踪类别是跟踪系统允许用户指定要收集哪些数据。如果用户未请求类别,那么将不收集任何数据。

    类别不需要在驱动程序中是唯一的。 通常将一些事件分组在同一类别下。 按照惯例,类别具有格式 “<provider-name>:<category-name>[:<subcategory1-name>...]”。 驱动程序的“<provider-name>”通常应该是驱动程序名称。 这样做是为了避免整个系统跨类别名称的冲突。对此约定的潜在补充是所有的驱动程序类别都带上前缀“driver:”。例如,“driver:ethernet:packets”。 避免与其他跟踪提供者的命名冲突很重要,否则用户可能会请求特定类别,却获得来自不同跟踪提供者的完全不相关的数据。

    包含在跟踪中的事件名称描述事件的具体内容。它通常对每个事件都是唯一的。

    ### Makefile添加

    为了实现追踪支持,需要在驱动程序的`rules.mk`文件中添加以下内容:

    ```make MODULE_STATIC_LIBS += system/ulib/trace.driver MODULE_HEADER_DEPS += system/ulib/trace system/ulib/trace-engine ```

    ##使用跟踪引导

    为保守起见,跟踪使用内核命令行标志来启用它: `driver.tracing.enable = 1`。 `driver.tracing.enable = 1`是默认值。 用`driver.tracing.enable = 0`启动内核,可以禁止驱动程序在Fuchsia跟踪中的参与。

    例:

    第一次构建:

    ```sh $ fx set $arch $ fx build-zircon $ fx build ```

    然后启动QEMU:

    ```sh $ fx run -k -N ```

    或者在h/w上(增加特定于你的h/w的选项):

    ```sh $ fx serve ```

    一旦跟踪支持稳定,这些额外要求将被删除。

    ##使用跟踪

    系统启动后,您可以在目标上收集跟踪然后手动将它们复制到开发主机。 这些示例使用上述源添加中的类别。

    例:

    ```sh fuchsia$ trace record --categories=example:example1 host$ fx cp --to-host /data/trace.json trace.json ```

    但是,在主机开发中调用`traceutil`程序更容易,它会将文件直接复制到您的主机并可以使用Chrome跟踪查看器查看。

    ```sh host$ fx traceutil record --categories=example:example1 ```

    请参阅[跟踪使用指南](https://fuchsia.googlesource.com/fuchsia/+/master/garnet/docs/tracing_usage_guide.md) 了解更多信息。

    最新回复(0)