如何为嵌入式/移动系统构建和安装VTune™ Amplifier采样驱动程序
本文介绍如何在嵌入式 Linux 系统上构建和安装采样驱动程序。
Intel® Developer Zone 提供跨平台应用程序开发工具和操作指南、平台和技术信息、代码示例以及同行专家经验,帮助开发人员创新并取得成功。加入我们的社区,获取 Android、物联网、Intel® RealSense™ 技术 和 Windows 的最新资讯,下载工具,获取开发套件,与志同道合的开发人员分享想法,并参与黑客马拉松、竞赛、路演和线下活动。
Intel® VTune™ Amplifier 使用采样驱动程序来启用硬件事件驱动采样 (EBS) 分析。在 Intel System Studio 的生产环境中安装时,采样驱动程序可以安装到主机系统中,以便我们收集在主机系统上运行的应用程序的性能数据。但是,如果我们要收集在目标系统上运行的应用程序的事件驱动采样数据,也应该将采样驱动程序安装到目标系统上。在这种情况下,我们可能需要手动构建采样驱动程序,以匹配目标系统的内核要求,并将采样驱动程序安装到目标系统上。
本文介绍如何在嵌入式 Linux 系统上构建和安装采样驱动程序。采样驱动程序将作为内核模块构建。在目标系统上启用采样驱动程序需要目标系统的 root 访问权限。在进行采样驱动程序工作之前,请确保您拥有目标系统的 root 访问权限。
本文涵盖以下主题
准备您的内核构建环境
内核配置要求
签名内核模块支持
构建 VTune Amplifier 采样驱动程序
在目标设备上加载采样驱动程序
准备您的内核构建环境
要为您的目标系统构建采样驱动程序,您应该拥有与您的目标内核版本完全匹配的内核构建环境。
如果您在本地主机上构建目标内核并将内核刷写到目标设备,那么您应该已经拥有内核源代码和为 VTune amplifier 采样驱动程序准备好的内核构建环境。在这种情况下,稍后将用于构建采样驱动程序的内核源代码目录就是您在主机系统上构建目标内核的目录。
如果您没有目标内核的构建环境,您可以根据用于构建目标系统的内核源代码来配置内核。在这种情况下,您应该拥有与您的目标内核版本完全匹配的内核源代码。在您的内核源代码目录中,将您目标系统的配置文件复制到主机系统,并将其重命名为内核源代码目录中的 .config。目标系统配置文件通常位于 /boot/ 文件夹中,名称为 config-`uname -r`。在主机上的内核源代码目录中,尝试使用以下命令准备构建:
$ make oldconfig
$ make prepare
$ make modules_prepare
配置完成后,您需要确保 kernel-src-dir/include/generated/utsrelease.h(或根据内核版本不同,为 kernel-src-dir/include/linux/utsrelease.h)中的 UTS_RELEASE
与您的目标系统上的 `uname -r` 输出匹配。如果版本不匹配,请尝试调整内核源代码目录中的内核 Makefile。
采样驱动程序的内核配置要求
要将 VTune Amplifier 采样驱动程序用于目标系统,您的内核版本应为 2.6.28 或更高版本。必须启用某些内核选项才能确保采样驱动程序能够顺利运行。这些内核选项列于下文。您需要确保这些选项在内核配置中已启用。
CONFIG_OPROFILE=m (or CONFIG_OPROFILE=y) CONFIG_MODULES=y CONFIG_SMP=y CONFIG_MODULE_UNLOAD=y CONFIG_KPROBES=y (must for sampling with stack) CONFIG_RING_BUFFER=y (must for sampling with stack) CONFIG_TRACEPOINTS=y (optional but recommended for sampling with stack) CONFIG_FRAME_POINTER=y (optional but recommended for kernel stack analysis)
对于大多数嵌入式 Linux 系统,这些配置默认是启用的。如果您正在处理自定义的 Linux 配置,请检查这些选项以确保 VTune Amplifier 采样驱动程序可以正常工作。
签名内核模块支持
自 Linux 内核 3.7 版本起,增加了对签名内核模块的支持。启用后,Linux 内核只会加载使用正确密钥进行数字签名的内核模块。这可以通过不允许加载未签名内核模块或使用错误密钥签名的内核模块来进一步加强系统安全性。
您可以检查配置选项 CONFIG_MODULE_SIG_FORCE
来查看是否需要签名内核模块。如果它被启用为 "CONFIG_MODULE_SIG_FORCE=y
",那么所有内核模块都必须用有效的密钥进行签名,VTune Amplifier 采样驱动程序也不例外。
如果需要签名内核模块,例如大多数现代移动操作系统如 Android*、Tizen* 等,您必须拥有与您的目标系统匹配的签名密钥。如果您在本地主机上构建内核并将其刷写到目标设备,这些密钥文件可在内核源代码文件夹中找到。在这种情况下,您可以像平常一样构建采样驱动程序。如果您从全新的内核源代码构建采样驱动程序并想将其用于现有的目标系统,您可能会获得不同的密钥,这可能导致在目标系统上加载驱动程序时出现错误,例如,您可能会收到错误消息 "ERROR: could not insert module pax.ko: Required key not available"。在这种情况下,您应该获取原始密钥文件并使用正确的密钥对采样驱动程序进行签名。或者,您可以构建新内核并使用自己的构建版本将其刷写到您的设备上。有关签名内核模块的更多信息,您可以参考 Cryptographically-signed kernel modules。
构建 VTune Amplifier 采样驱动程序
在准备好内核源代码环境后,我们现在可以构建采样驱动程序了。您可以从 Intel System Studio 安装文件夹中获取采样驱动程序源代码,例如,在 /opt/intel/system_studio_2015.x.y/vtune_amplifier_for_systems/target 文件夹中,您可以找到适用于目标系统的 VTune Amplifier 包,包括采样驱动程序的源代码。例如,在 target/linux32 中,您可以从一个 .tgz 文件中找到 32 位 Linux 目标所需的一切。在 target/linux64 文件夹中,您可以找到 64 位目标 Linux 系统的软件包。通常,有两种可用的软件包:VTune Amplifier target package 和 VTune Amplifier target "sep" package。VTune Amplifier target package 可用于从主机远程收集到目标的数据。 "sep" package 仅用于目标系统上的本地性能收集。这两个软件包都包含适当的采样驱动程序源代码。解压软件包,进入 sepdk/src 文件夹并构建驱动程序,例如:
$ cd sepdk/src $./build-driver -ni \ --c-compiler=i586-xxx-linux-gcc \ --kernel-version="3.4.34-25.1-clovertrail" \ --kernel-src-dir=/kernel-src-dir/ \ --make-args="PLATFORM=x32 ARITY=smp"
在上面的示例中,"--c-compiler
" 选项用于指定交叉编译器的交叉构建。请确保编译器可从 PATH 环境变量中访问。如果未指定此选项,将使用主机 gcc 编译器来构建采样驱动程序。
"--kernel-version
" 选项用于指定目标系统的内核版本。它应与您的目标系统的 `uname -r` 输出以及 kernel-src-dir/include/generated/utsrelease.h(或根据内核版本不同,为 kernel-src-dir/include/linux/utsrelease.h)中的 UTS_RELEASE
匹配。
"--kernel-src-dir
" 选项用于指定内核源代码目录,该目录已如本文前面的部分所述进行准备。
"--make-args
" 选项用于指定构建参数。对于 32 位目标系统,使用 "PLATFORM=x32
"。对于 64 位目标系统,使用 "PLATFORM=x32_64
"。
"-ni" 选项将禁用构建过程中的交互。
请使用 build-driver -h 选项查看所有可用选项的详细信息。默认情况下,如果未指定所有这些选项,build-driver 脚本将使用默认的 gcc 编译器为您的主机系统构建采样驱动程序。
构建完成后,您将在 sepdk/src 文件夹中找到以下 .ko 文件:
pax/pax.ko
sep3_10.ko,
vtsspp/vtsspp.ko。
这些 .ko 文件还会被复制到一个新名称,该名称可以反映目标内核版本,例如,文件 sep3_10.ko 可能会被复制到 sep3_10-x32-3.4.34-27.2-clovertrailsmp.ko。
要验证驱动程序是否使用正确的 vermagic 构建,这里有一个简单的检查方法。在命令行中,运行以下命令:
$modinfo ./sep3_10.ko |grep vermagic
它将给出一个 vermagic 字符串,例如如下:
vermagic: 3.4.34-27.2-clovertrail SMP preempt mod_unload ATOM
在您的目标 shell 上,运行 lsmod 并找到一个已加载的内核模块,使用 modinfo 获取该模块的 vermagic。确保采样驱动程序的 vermagic 与目标设备上现有的内核模块完全相同。
在目标设备上加载采样驱动程序
使用 ssh、ftp、adb、sdb 等任何您系统支持的方式将采样驱动程序的 sepdk/src 文件夹复制到您的目标系统。确保您拥有目标系统的 root 访问权限,在目标 shell 上进入 sepdk/src 文件夹,通过执行以下命令加载驱动程序:
$./insmod-sep3
该脚本将自动加载采样驱动程序。如果您在资源受限的环境中运行,请尝试添加 "-re" 选项,如下所示:
$ ./insmod-sep3 -re
如果您需要手动加载驱动程序,请使用以下命令加载采样驱动程序:
$insmod pax/pax.ko
$insmod sep3_10.ko
$insmod vtsspp/vtsspp.ko
您可以通过运行 lsmod 来查看 pax、sep3_10 和 vtsspp 内核模块是否已成功加载到内核中。一旦采样驱动程序在您的目标内核中加载,您就可以开始为您的目标系统收集事件驱动的性能数据了。
在开始性能收集之前,您需要禁用内核中的 nmi_watchdog。您可以通过以下命令轻松完成:
$echo 0 >/proc/sys/kernel/nmi_watchdog
注意
如果您正在使用 Yocto* Project 或 Wind River* Linux,有更简单的方法来为您的目标系统构建采样驱动程序。采样驱动程序和目标收集包可以自动构建到您的目标系统中。有关更多详细信息,您可以参考以下文章:
在 Wind River Linux 构建环境中使用 Intel(R) System Studio