当前位置: 首页 > news >正文

kernel4.19 rk3568 buildroot perf 编译踩坑记录

我遇到的就3个问题


问题1: Kernel → Linux Kernel Tools 下没有perf

问题 1:Kernel → Linux Kernel Tools 下没有 perf 选项

原因:perf 的启用条件涉及 GCC 版本和内核版本:

  • GCC 不高于 10 或内核版本为 5.10
  • 默认情况下,如果 GCC 版本过高,perf 选项会被隐藏

解决方法

  1. 在 Buildroot 菜单中打开 Toolchain → GCC Version,将 GCC 版本降级到 9.x(C++14 兼容)
  2. 再进入 Kernel → Linux Kernel Tools,perf 选项就会出现并可选中

⚠️ 降级 GCC 对 C++14 项目通常没有影响,但需要注意内核版本兼容性

![[Pasted image 20250923193729.png]]

可以看到这里的前置条件有两个: 要不GCC版本不要高于10,要不就算内核版本为5.10
对于我而言,我使用的C++14,所以降级GCC并不影响我的使用,反倒实际内核可能导致以下意料外的问题,因此到"Toolchain"找寻到GCC版本选择的位置,修改版本
![[Pasted image 20250923194005.png]]

比如我降级到了9.x
然后再去Kernel → Linux Kernel Tools 下看,就有perf的选项了


问题2: build/linux-custom/tools/perf/libtraceevent-dynamic-list:2: ignoring invalid character '@' in script

这个问题在2022-05-18年已被 Konstantin Kharlamov提交补丁修复
如果遇到,大概率是没有补丁

解决方法也很简单

  • 第一步先把文件里的’@'去掉
cd [SDK PATH]/buildroot/output/rockchip_rk3568/build/linux-custom/tools/perf
sed -i 's/@[^;]*//g' libtraceevent-dynamic-list
  • 第二步添加补丁
mkdir -p [SDK PATH]/buildroot/package/linux-tools/patches

这里提供两种方法:

  1. 下载补丁 补丁下载
  2. 手动添加 把内容写入到 buildroot/package/linux-tools/patches/0001-plugins-sanitize-out-VERSION-string-in-symbols.patch
From 29a21ac5b07f0022747891cfcd349b0ff738f417 Mon Sep 17 00:00:00 2001
From: Konstantin Kharlamov <Hi-Angel@yandex.ru>
Date: Tue, 19 May 2020 00:20:05 +0300
Subject: [PATCH] plugins: sanitize out `@@VERSION` string in symbolsAt least on nm version 2.34.50.20200508 symbols may look like this:U statx@@GLIBC_2.28U stpncpy@@GLIBC_2.2.5U strchr@@GLIBC_2.2.5The @@ postfix breaks the build. Let's sanitize it outBugzilla: https://bugzilla.kernel.org/show_bug.cgi?id=207779Signed-off-by: Konstantin Kharlamov <Hi-Angel@yandex.ru>
---tools/lib/traceevent/plugins/Makefile | 2 +-1 file changed, 1 insertion(+), 1 deletion(-)diff --git a/tools/lib/traceevent/plugins/Makefile b/tools/lib/traceevent/plugins/Makefile
index 349bb81482ab..b28d386ee129 100644
--- a/tools/lib/traceevent/plugins/Makefile
+++ b/tools/lib/traceevent/plugins/Makefile
@@ -197,7 +197,7 @@ define do_generate_dynamic_list_filexargs echo "U w W" | tr 'w ' 'W\n' | sort -u | xargs echo`;\if [ "$$symbol_type" = "U W" ];then				\(echo '{';                                              \
-		$(NM) -u -D $1 | awk 'NF>1 {print "\t"$$2";"}' | sort -u;\
+		$(NM) -u -D $1 | awk -F '[ |\t|@]+' 'NF>1 {print "\t"$$3";"}' | sort -u;\echo '};';                                              \) > $2;                                                 \else                                                            \
-- 
2.26.2

建议先查询一下实际位置,比如我的就不是在197行

mouj@MateBook:~/rk3568/buildroot/output/rockchip_rk3568/build/linux-custom$ grep -n "define do_generate_dynamic_list_file" . -r
./tools/lib/traceevent/Makefile:261:define do_generate_dynamic_list_file

然后自己修改一下

如果觉得麻烦了,其实有更简单的方法,编辑
buildroot/output/rockchip_rk3568/build/linux-custom/tools/lib/traceevent/Makefile,
找到
$(NM) -u -D $1 | awk 'NF>1 {print "\t"$$2";"}' | sort -u;\,
将其注释,在下一行添加
$(NM) -u -D $1 | awk -F '[ |\t|@]+' 'NF>1 {print "\t"$$3";"}' | sort -u;\即可
如果不行就
$(NM) -u -D $1 | awk 'NF>1 {print $$2}' | sed 's/@.*//' | sort -u | awk '{print "\t"$$1";"}'; \

第一种依赖 awk 的正则字段分隔,第二种更稳健。如果你的环境中 awk 不同,第一种可能解析失败;第二种通常安全


问题3: ``buildroot/output/rockchip_rk3568/host/bin/python3: No module named asciidoc

这里是perf生成文档的错误,perf 使用 Python3 脚本生成文档需要asciidoc` 模块
对于我而言,嵌入式设备上并不需要文档,因此解决方法就是绕过DOC的生成

具体方法如下:

cd buildroot/output/rockchip_rk3568/build/linux-custom/tools/perf
  1. 编辑 Makefile.perf 文件,找到 DOC_TARGETS 行:
    DOC_TARGETS := doc man html info pdf
    将其注释或清空:
    # DOC_TARGETS := doc man html info pdf
  2. 保存后重新编译,即可跳过文档生成阶段
    ![[Pasted image 20250923201022.png]]
http://www.dtcms.com/a/399462.html

相关文章:

  • Springboot实现WebSocket通信(一)
  • wordpress站点标题360免费自助建站
  • 网站开发前端设计二维码创意设计
  • 太原网站建设随州steam交易链接怎么改
  • 网站风格设计怎么写织梦搞笑图片网站源码
  • 网站建设 中企动力板材生态板跨境电商平台建设方案
  • STM32 单片机 - ADC
  • STM32_08_中断(☆☆☆)
  • 网站建设合优wordpress首页添加视频
  • todesk开启虚拟屏后被控黑屏
  • 学校网站建设的申请书推广100种方式
  • 瑞芯微RK3506核心板/开发板DSM音频开发实战,关键知识点与实操案例必看攻略!
  • 网站建设项目明细表网站建设讠金手指科杰
  • 美文的手机网站代理服务器地址怎么找
  • 自动化单mysql多实例库的全量迁移脚本
  • Lucene 8.7.0 版本中doc、tim、tip、tmd文件详解
  • golang1.18升级到1.23遇到的坑
  • 网站建设广告费 科目高埗网站仿做
  • 52Hz——FreeRTOS学习笔记——FReeRTOS移植遇到的问题
  • 网站建设肆金手指排名7全网通网站
  • AI赋能互联网广告变现的商业模式
  • 52Hz——FreeRTOS学习笔记——删除任务
  • AI 重塑教育生态:从个性化学习到公平鸿沟
  • 将二级域名 网站目录网站首页排名下降
  • 实现Word文档自动编号提取技术详解
  • 超越OCR:深入智能文档处理(IDP)的技术内核与实现路径
  • 江苏自助建站平台html5游戏开发
  • SQL server 2022下载安装详细教程
  • 工业视觉缺陷检测算法总结:从传统到深度学习,5类核心算法
  • 建设银行网站打不开别的网站可以口碑好的移动网站建设