从0开始的ebpfGo

发布时间 2024-01-08 11:14:07作者: FW_ltlly

从0开始的ebpfGo

学学ebpf Go捏

使用 https://github.com/cilium/ebpf

会在ubuntu上和安卓上面跑

硬性要求

android内核高于5.10 或 alt text

环境搭建

本人环境 ubuntu22.04(wsl)

安装golang 要求版本大于等于1.20

参考 https://golang.google.cn/doc/install

wget https://golang.google.cn/dl/go1.21.5.linux-amd64.tar.gz

rm -rf /usr/local/go 

tar -C /usr/local -xzf go1.21.5.linux-amd64.tar.gz


export PATH=$PATH:/usr/local/go/bin

加入环境变量中 .zshrc什么的

安装llvm和clang

安装sudo apt-get install libbpf-dev 来解决没有bpf_helpers.h的问题

如果你想交叉编译到安卓

下载ndk并解压 请一定要使用ndk内置的toolchains来编译 你不会想交叉编译抽风的叭

https://developer.android.google.cn/ndk/downloads?hl=zh-cn

操作

根据 https://ebpf-go.dev/guides/getting-started/ 来在ubuntu上构建你的第一个ebpf程序叭

如果已经配好环境了但是vscode还是红色波浪线的话请重启vscode:(

tips 如果你使用的也是ubuntu的wsl的话

alt text

你的网卡可能不是eth0

alt text

修改为eth1后

alt text

可能是因为wsl的网卡有特殊权限导致的?在android上指定eth0没有问题

在wsl上使用lo的话是没有问题的

然后ping 127.0.0.1 即可看到

alt text

交叉编译到android上面!

参考文章 https://zhuanlan.zhihu.com/p/319682047

注意你的android版本和架构

我的环境是在mac m1上运行的avd

alt text

重新将代码中的网卡改为eth0 使用adb root

alt text

build.sh

export NDK_ROOT=/home/ltlly/android-ndk-r26b

export PATH=$NDK_ROOT/toolchains/llvm/prebuilt/linux-x86_64/bin:$PATH


go get github.com/cilium/ebpf/cmd/bpf2go

go generate

GOARCH=arm64 GOOS=android CGO_ENABLED=1 CC=aarch64-linux-android29-clang  go build

如果你想为avd x86_64编译的话

最后一句改为

GOARCH=amd64 GOOS=android CGO_ENABLED=1 CC=x86_64-linux-android29-clang go build

即可