<acronym id="s8ci2"><small id="s8ci2"></small></acronym>
<rt id="s8ci2"></rt><rt id="s8ci2"><optgroup id="s8ci2"></optgroup></rt>
<acronym id="s8ci2"></acronym>
<acronym id="s8ci2"><center id="s8ci2"></center></acronym>
0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

ebpf的快速開發工具--libbpf-bootstrap

Rice嵌入式開發技術分享 ? 來源:Rice 嵌入式開發技術分享 ? 作者:Rice 嵌入式開發技 ? 2023-09-25 09:04 ? 次閱讀

基于ubuntu22.04-深入淺出 eBPF

基于ebpf的性能工具-bpftrace

基于ebpf的性能工具-bpftrace腳本語法

基于ebpf的性能工具-bpftrace實戰(內存泄漏)

什么是libbpf-bootstrap

libbpf-bootstrap是一個開源項目,旨在幫助開發者快速啟動和開發使用eBPF(Extended Berkeley Packet Filter)和libbpf的程序。eBPF是一種可以在Linux內核中運行的程序,提供了強大的網絡過濾、系統調用監控和性能分析等功能。libbpf是一個庫,用于加載和管理eBPF程序和map。

libbpf-bootstrap提供了一些樣例程序和模板,幫助開發者理解如何使用libbpf創建、加載、管理eBPF程序,并與這些程序進行交互。

libbpf-bootstrap開源鏈接:https://github.com/libbpf/libbpf-bootstrap/

「以下是libbpf-bootstrap的一些主要特性:」

樣例程序:libbpf-bootstrap提供了一些樣例程序,用于演示如何使用libbpf和eBPF。這些樣例程序包括網絡監控、性能分析等不同類型的eBPF程序。

構建系統集成:libbpf-bootstrap提供了集成到構建系統的模板,可以方便地編譯和鏈接eBPF程序。

BPF CO-RE(Compile Once - Run Everywhere)支持:BPF CO-RE是一種讓eBPF程序能在不同版本的Linux內核上運行的技術。libbpf-bootstrap支持CO-RE,使得開發的eBPF程序可以在不同版本的Linux內核上運行,無需重新編譯。

用戶空間和內核空間程序的交互:libbpf-bootstrap展示了如何從用戶空間程序發送數據到eBPF程序,以及從eBPF程序返回數據到用戶空間。

詳細的文檔:libbpf-bootstrap提供了詳細的文檔,包括如何安裝、如何使用樣例程序,以及如何創建自己的eBPF程序等。

使用libbpf-bootstrap的理由

開始使用BPF在很大程度上仍然令人生畏,因為即使為簡單的"Hello World"般的BPF應用程序設置構建工作流,也需要一系列步驟,對于新的BPF開發人員來說,這些步驟可能會令人沮喪和令人生畏。這并不復雜,但知道必要的步驟是一個(不必要的)困難的部分。

libbpf-bootstrap就是這樣一個BPF游樂場,它已經盡可能地為初學者配置好了環境,幫助他們可以直接步入到BPF程序的書寫。它綜合了BPF社區多年來的最佳實踐,并且提供了一個現代化的、便捷的工作流。libbpf-bootstrap依賴于libbpf并且使用了一個很簡單的Makefile。對于需要更高級設置的用戶,它也是一個好的起點。即使這個Makefile不會被直接使用到,也可以很輕易地遷移到別的構建系統上。

libbpf-bootstrap構建流程

libbpf-bootstrap的測試環境:本篇文章我們將在Ubuntu22.04進行驗證,下一篇文章我們將其在yy3568進行驗證。

安裝libbpf-bootstrap依賴的工具:clang,libelf,zlib

$sudoapt-getinstallclanglibelf1libelf-devzlib1g-dev

獲取源碼libbpf-bootstrap

//獲取libbpf-bootstrap主倉的代碼
$gitclonehttps://github.com/libbpf/libbpf-bootstrap

//獲取依賴的子倉代碼
$gitsubmoduleupdate--init--recursive

編譯libbpf-bootstrap

$cdexamples/c/
$make
MKDIR.output
MKDIR.output/libbpf
LIBlibbpf.a
MKDIR/home/rice/libbpf-bootstrap/examples/c/.output//libbpf/staticobjs
CC/home/rice/libbpf-bootstrap/examples/c/.output//libbpf/staticobjs/bpf.o
CC/home/rice/libbpf-bootstrap/examples/c/.output//libbpf/staticobjs/btf.o
CC/home/rice/libbpf-bootstrap/examples/c/.output//libbpf/staticobjs/libbpf.o
CC/home/rice/libbpf-bootstrap/examples/c/.output//libbpf/staticobjs/libbpf_errno.o
CC/home/rice/libbpf-bootstrap/examples/c/.output//libbpf/staticobjs/netlink.o
CC/home/rice/libbpf-bootstrap/examples/c/.output//libbpf/staticobjs/nlattr.o
.....

BINARYusdt
BPF.output/sockfilter.bpf.o
GEN-SKEL.output/sockfilter.skel.h
CC.output/sockfilter.o
BINARYsockfilter
BPF.output/tc.bpf.o
GEN-SKEL.output/tc.skel.h
CC.output/tc.o
BINARYtc
BPF.output/ksyscall.bpf.o
GEN-SKEL.output/ksyscall.skel.h
CC.output/ksyscall.o
BINARYksyscall
$

運行測試樣例

我們義kprobe測試樣例為例,需要打開三個terminal,第一個terminal執行kprobe程序,第二個terminal 我們cat trace_pipi的內容,第三個terminal我們制造一些現場。

當我們在第三個terminal制造現場的時候,第二個terminal就可以看到相關的探測內容

第一個terminal執行kprobe程序:

$sudo./kprobe

第二個terminal 我們cat trace_pipi的內容,需要進入超級管理員,在執行:

$cat/sys/kernel/tracing/trace_pipe

第三個terminal我們制造一些現場:

$touchyouyeetoo
$rm-rfyouyeetoo

最終效果

70ef16fe-5b3f-11ee-80f7-92fbcf53809c.png

下一步計劃

將在「深圳風火輪科技推出的YY3568」上跑ebpf程序,敬請期待

審核編輯 黃宇

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 開發工具
    +關注

    關注

    0

    文章

    206

    瀏覽量

    22148
  • Ubuntu
    +關注

    關注

    5

    文章

    538

    瀏覽量

    29036
  • bootstrap
    +關注

    關注

    0

    文章

    31

    瀏覽量

    3504
  • BPF
    BPF
    +關注

    關注

    0

    文章

    24

    瀏覽量

    3867
收藏 人收藏

    評論

    相關推薦

    CC2540迷你快速開發工具用戶指南

    CC2540迷你快速開發工具用戶指南
    發表于 02-23 09:23

    新手求助怎樣去設計快速開發工具?

    怎樣去設計快速開發工具?快速開發工具是如何實現與運用的?
    發表于 04-27 06:38

    openEuler 倡議建立 eBPF 軟件發布標準

    eBPF 技術應用呈現井噴現象,但是開發、發布、安裝等相關的基礎技術出現碎片化現象,導致技術成果無法快速平移至行業客戶生產環境;相似 eBPF 技術應用在重復實踐。這些問題阻礙
    發表于 12-23 16:21

    Microchip推出三款開發工具

    Microchip推出三款開發工具包   Microchip Technology Inc.(美國微芯科技公司)今天宣布推出三款開發工具包,可支持采用Microchip豐富的PIC單片機快速
    發表于 03-31 13:28 ?775次閱讀

    STM32 VR開發工具

    STM32 VR開發工具
    發表于 02-17 13:38 ?39次下載

    全志VR開發工具

    全志VR開發工具
    發表于 02-17 14:08 ?31次下載

    新手TinyM0+ 開發工具快速入門

    新手TinyM0+ 開發工具快速入門
    發表于 10-09 09:54 ?13次下載
    新手TinyM0+ <b class='flag-5'>開發工具</b><b class='flag-5'>快速</b>入門

    ARM開發工具解讀

    1.6 ARM開發工具 用戶選用ARM處理器開發嵌入式產品時,選擇合適的開發工具可以加快開發進度,節省開發成本。根據功能不同,ARM應用軟件
    發表于 10-18 13:29 ?3次下載
    ARM<b class='flag-5'>開發工具</b>解讀

    Microchip蘋果配件開發工具

    這一講是Microchip蘋果配件開發工具包蘋果配件開發工具
    的頭像 發表于 06-06 13:45 ?2103次閱讀

    如何使用KEELOQ3開發工具包作為開發工具來在目標板上仿真和調試固件

    本文檔介紹了如何使用 KEELOQ? 3 開發工具包作為開發工具來在目標板上仿真和調試固件。
    發表于 06-13 08:30 ?36次下載
    如何使用KEELOQ3<b class='flag-5'>開發工具</b>包作為<b class='flag-5'>開發工具</b>來在目標板上仿真和調試固件

    6個高效的前端開發工具

    高效的前端開發工具有哪些?在互聯網中許多開發工具可以讓前端開發人員的工作生活變得更加輕松。應用程序的功能越來越豐富,也導致了前端開發的復雜度大幅增加,急需好的
    的頭像 發表于 01-05 16:00 ?4148次閱讀

    硬件開發工具介紹

    MaskROM IC 制作了相關的硬件開發工具,包括 FDB 演示板、OTP 和相關燒錄器、Romter、ICE 等不 同的硬件工具,結合相關的軟件開發工具,讓工程人員和終端客戶都可以很
    發表于 06-14 15:14 ?4次下載
    硬件<b class='flag-5'>開發工具</b>介紹

    【新唐開發工具快速建構低功耗藍牙設計的開發模塊:BLE ATCMD

    【新唐開發工具快速建構低功耗藍牙設計的開發模塊:BLE ATCMD
    的頭像 發表于 08-09 15:27 ?431次閱讀
    【新唐<b class='flag-5'>開發工具</b>】<b class='flag-5'>快速</b>建構低功耗藍牙設計的<b class='flag-5'>開發</b>模塊:BLE ATCMD

    eBPF動手實踐系列三:基于原生libbpf庫的eBPF編程改進方案簡析

    在上一篇文章《eBPF動手實踐系列二:構建基于純C語言的eBPF項目》中,我們初步實現了脫離內核源碼進行純C語言eBPF項目的構建。libbpf庫在早期和內核源碼結合的比較緊密,如今的
    的頭像 發表于 03-19 14:19 ?384次閱讀
    <b class='flag-5'>eBPF</b>動手實踐系列三:基于原生<b class='flag-5'>libbpf</b>庫的<b class='flag-5'>eBPF</b>編程改進方案簡析

    基于原生libbpf庫的eBPF編程改進方案

    為了簡化 eBPF程序的開發流程,降低開發者在使用 libbpf 庫時的入門難度,libbpf-bootstrap 框架應運而生?;?/div>
    發表于 03-19 14:19 ?220次閱讀
    基于原生<b class='flag-5'>libbpf</b>庫的<b class='flag-5'>eBPF</b>編程改進方案
    亚洲欧美日韩精品久久_久久精品AⅤ无码中文_日本中文字幕有码在线播放_亚洲视频高清不卡在线观看
    <acronym id="s8ci2"><small id="s8ci2"></small></acronym>
    <rt id="s8ci2"></rt><rt id="s8ci2"><optgroup id="s8ci2"></optgroup></rt>
    <acronym id="s8ci2"></acronym>
    <acronym id="s8ci2"><center id="s8ci2"></center></acronym>