济南白癜风医院 http://pf.39.net/bdfyy/bdfyc/190326/6997150.html
来源于:分布式实验室—1—开发环境

这里以Ubuntu20.04为例构建eBPF开发环境:

uname-aLinuxVM-1-3-ubuntu5.4.0-42-generic#46-UbuntuSMPFriJul:24:02UTCx86_64x86_64x86_64GNU/Linuxsudoaptinstallbuild-essentialgitmakelibelf-devclangllvmstracetarbpfcc-toolslinux-headers-(uname-r)gcc-multilibflexbisonlibssl-dev-y

主流的发行版在对LLVM打包的时候就默认启用了BPF后端,因此,在大部分发行版上安装clang和llvm就可以将C代码编译为BPF对象文件了。

典型的工作流是:

用C编写BPF程序

用LLVM将C程序编译成对象文件(ELF)

用户空间BPFELF加载器(例如iproute2)解析对象文件

加载器通过bpf()系统调用将解析后的对象文件注入内核

内核验证BPF指令,然后对其执行即时编译(JIT),返回程序的一个新文件描述符

利用文件描述符attach到内核子系统(例如网络子系统)

某些子系统还支持将BPF程序offload到硬件(例如网卡)。

查看LLVM支持的BPFtarget:

llc--versionLLVM(



转载请注明地址:http://www.luofumua.com/lfmpz/9622.html