从0开始的ebpfGo
从0开始的ebpfGo
学学ebpf Go捏
使用 https://github.com/cilium/ebpf
会在ubuntu上和安卓上面跑
硬性要求
android内核高于5.10 或
环境搭建
本人环境 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的话
你的网卡可能不是eth0
修改为eth1后
可能是因为wsl的网卡有特殊权限导致的?在android上指定eth0没有问题
在wsl上使用lo的话是没有问题的
然后ping 127.0.0.1 即可看到
交叉编译到android上面!
参考文章 https://zhuanlan.zhihu.com/p/319682047
注意你的android版本和架构
我的环境是在mac m1上运行的avd
重新将代码中的网卡改为eth0 使用adb root
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
即可