同步操作将从 lucashliu/linux-bpf-learning 强制同步,此操作会覆盖自 Fork 仓库以来所做的任何修改,且无法恢复!!!
确定后同步将在后台操作,完成时将刷新页面,请耐心等待。
打造学习BPF知识的中文社区。学习计划如下:
Linux操作系统,推荐使用最新稳定内核版本.
本人自己的实验环境是Ubuntu 18.04
标准版vagrant虚拟机,内核版本为4.15.0
。可以从这里下载该vagrant虚拟机环境,已安装bcc工具集合:
下载链接: https://pan.baidu.com/s/11dsEU6Yk6KGDGNor-fbsgQ 提取码: qvhc。 使用方式可以参考这篇文章。
以下命令如无特殊说明,均在Ubuntu环境下测试执行。
预装clang、LLVM、iproute2、libelf-dev
# for ubuntu
apt install clang llvm libelf-dev iproute2
# test clang
clang -v
# test llvm
llc --version
# test iproute2
ip link
bpftool
命令行安装说明
下载Linux内核源码,进行本地编译。
# 确认内核版本
uname -r
# 找到对应内核版本的源代码
apt-cache search linux-source
apt install linux-source-5.3.0
apt install libelf-dev
cd /usr/src/linux-source-5.3.0
tar xjf linux-source-5.3.0.tar.bz2
cd linux-source-5.3.0/tools
make -C bpf/bpftool/
cd bpf/bpftool/
./bpftool prog/net
错误现象
在执行下面命令进行代码编译时,可能会遇到某些头文件找不到的错误:
clang -I ./headers/ -O2 -target bpf -c tc-xdp-drop-tcp.c -o tc-xdp-drop-tcp.o
In file included from tc-xdp-drop-tcp.c:2:
In file included from /usr/include/linux/bpf.h:11:
/usr/include/linux/types.h:5:10: fatal error: 'asm/types.h' file not found
#include <asm/types.h>
^~~~~~~~~~~~~
1 error generated.
原因分析
在源代码文件中引用了某些系统目录(一般为/usr/include/
)下的头文件,而这些头文件没有出现在目标路径下,导致编译失败。
如上述问题中的asm相关文件,asm全称Architecture Specific Macros
,直译过来“与机器架构相关的宏文件”,顾名思义它是跟机器架构密切相关的,不同的架构x86、x64、arm实现是不一样的,而操作系统并没有提供/usr/include/asm/
这样通用的目录,只提供了具体架构相关的目录,如/usr/include/x86_64-linux-gnu/asm/
,因此无法找到引用。
解决方案
添加软链/usr/include/asm/
,指向操作系统自带的asm目录:
cd /usr/include
ln -s ./x86_64-linux-gnu/asm asm
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。