XDP入门--之eBPF sample内核示例代码的编译

2024-02-16 19:30

本文主要是介绍XDP入门--之eBPF sample内核示例代码的编译,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

Linux内核代码提供了很多eBPF的示例代码(以linux6.1版本内核代码为例),我们可以在/Linux/samples/bpf目录下找到示例代码。

1、查看Linux内核版本

本文不讨论交叉编译的情况,因为eBPF还在快速发展中,不同版本的Linux内核的支持情况不太一至。所以第一步,我们需要通过uname命令查看本机的Linux内核版本号,以便下面几个步骤的开展。

pi@raspberrypi:/usr/src/linux-6.1/samples/bpf $ uname -a
Linux raspberrypi 6.1.21+ #1642 Mon Apr  3 17:19:14 BST 2023 armv6l GNU/Linux

2、下载linux内核代码

Linux内核代码托管在github里,我们可以通过左边的master这里下拉后,找到第1章里查询出来的当前linux内核对应版本的内核代码。如下图单击选择v6.1版本。
在这里插入图片描述然后在左边code这个下拉框里选择Download ZIP直接下载或者复制HTTPS那里的URL后通过git下载源代码到本地主机。
在这里插入图片描述

3、拷贝并安装源代码

这一步很简单,直接将下载下来的文件直接拷贝或者解压缩到/usr/src目录下则可。

pi@raspberrypi:~ $ sudo unzip ./linux-6.1.zip -d /usr/src/

解压完成后如下命令查看,如果看到有/usr/src/linux-6.1/samples目录,则说明内核源代码已经正确安装好。

pi@raspberrypi:~ $ cd /usr/src/linux-6.1/samples/
pi@raspberrypi:/usr/src/linux-6.1/samples $ ls -l | grep bpf
drwxr-xr-x 2 root root 4096 May 25 13:36 bpf

4、配置编译环境

sudo apt install make
sudo apt install clang
sudo apt install llvm
sudo apt install gcc
sudo apt install flex
sudo apt install bison
sudo make defconfig
sudo make headers_install
sudo make modules_prepare
sudo cp /sys/kernel/btf/vmlinux /usr/src/linux-5.19
sudo ln -s ./x86_64-linux-gnu/sys/ ./sys
sudo ln -s /usr/include/linux/capability.h /usr/include/sys/capability.h
sudo ln -s /usr/lib/x86_64-linux-gnu/libcap.so.2.44 /usr/lib/libcap.so
sudo ln -s /usr/src/linux-5.19/include/asm-generic/ /usr/src/linux-5.19/include/include/asm
sudo ln -s /usr/src/linux-5.19/samples/bpf/Module.symvers /usr/src/linux-5.19

5、编译

注意上面第4步的各个步骤都要做一下,否则会出现种头文件找不到,库文件找不到的错误。
然后运行以下命令后就可以把所有示例代码编译成功。

sudo make M=samples/bpf

这篇关于XDP入门--之eBPF sample内核示例代码的编译的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!


原文地址:https://blog.csdn.net/meihualing/article/details/130865317
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.chinasem.cn/article/715480

相关文章

C#使用MQTTnet实现服务端与客户端的通讯的示例

《C#使用MQTTnet实现服务端与客户端的通讯的示例》本文主要介绍了C#使用MQTTnet实现服务端与客户端的通讯的示例,包括协议特性、连接管理、QoS机制和安全策略,具有一定的参考价值,感兴趣的可... 目录一、MQTT 协议简介二、MQTT 协议核心特性三、MQTTNET 库的核心功能四、服务端(BR

使用Java实现Navicat密码的加密与解密的代码解析

《使用Java实现Navicat密码的加密与解密的代码解析》:本文主要介绍使用Java实现Navicat密码的加密与解密,通过本文,我们了解了如何利用Java语言实现对Navicat保存的数据库密... 目录一、背景介绍二、环境准备三、代码解析四、核心代码展示五、总结在日常开发过程中,我们有时需要处理各种软

Java List排序实例代码详解

《JavaList排序实例代码详解》:本文主要介绍JavaList排序的相关资料,Java排序方法包括自然排序、自定义排序、Lambda简化及多条件排序,实现灵活且代码简洁,文中通过代码介绍的... 目录一、自然排序二、自定义排序规则三、使用 Lambda 表达式简化 Comparator四、多条件排序五、

Java 压缩包解压实现代码

《Java压缩包解压实现代码》Java标准库(JavaSE)提供了对ZIP格式的原生支持,通过java.util.zip包中的类来实现压缩和解压功能,本文将重点介绍如何使用Java来解压ZIP或RA... 目录一、解压压缩包1.zip解压代码实现:2.rar解压代码实现:3.调用解压方法:二、注意事项三、总

Linux实现简易版Shell的代码详解

《Linux实现简易版Shell的代码详解》本篇文章,我们将一起踏上一段有趣的旅程,仿照CentOS–Bash的工作流程,实现一个功能虽然简单,但足以让你深刻理解Shell工作原理的迷你Sh... 目录一、程序流程分析二、代码实现1. 打印命令行提示符2. 获取用户输入的命令行3. 命令行解析4. 执行命令

SQL Server身份验证模式步骤和示例代码

《SQLServer身份验证模式步骤和示例代码》SQLServer是一个广泛使用的关系数据库管理系统,通常使用两种身份验证模式:Windows身份验证和SQLServer身份验证,本文将详细介绍身份... 目录身份验证方式的概念更改身份验证方式的步骤方法一:使用SQL Server Management S

Spring Boot 集成 Solr 的详细示例

《SpringBoot集成Solr的详细示例》:本文主要介绍SpringBoot集成Solr的详细示例,本文通过实例代码给大家介绍的非常详细,感兴趣的朋友一起看看吧... 目录环境准备添加依赖配置 Solr 连接定义实体类编写 Repository 接口创建 Service 与 Controller示例运行

Python多进程、多线程、协程典型示例解析(最新推荐)

《Python多进程、多线程、协程典型示例解析(最新推荐)》:本文主要介绍Python多进程、多线程、协程典型示例解析(最新推荐),本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定... 目录一、multiprocessing(多进程)1. 模块简介2. 案例详解:并行计算平方和3. 实现逻

Vue中插槽slot的使用示例详解

《Vue中插槽slot的使用示例详解》:本文主要介绍Vue中插槽slot的使用示例详解,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧... 目录一、插槽是什么二、插槽分类2.1 匿名插槽2.2 具名插槽2.3 作用域插槽三、插槽的基本使用3.1 匿名插槽

uniapp小程序中实现无缝衔接滚动效果代码示例

《uniapp小程序中实现无缝衔接滚动效果代码示例》:本文主要介绍uniapp小程序中实现无缝衔接滚动效果的相关资料,该方法可以实现滚动内容中字的不同的颜色更改,并且可以根据需要进行艺术化更改和自... 组件滚动通知只能实现简单的滚动效果,不能实现滚动内容中的字进行不同颜色的更改,下面实现一个无缝衔接的滚动