Created
October 27, 2022 02:39
-
-
Save SeeFlowerX/bf8c14b96cd0dc0aa219e2771d96a892 to your computer and use it in GitHub Desktop.
尝试在linux x86_64上使用ndk交叉编译eBPF程序,以及混合go程序...
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
.PHONY: all | |
all: ebpf assets build | |
@echo $(shell date) | |
.ONESHELL: | |
SHELL = /bin/bash | |
# export PATH=/home/kali/Desktop/android-ndk-r25b/toolchains/llvm/prebuilt/linux-x86_64/bin:$PATH | |
# export PATH=/home/kali/Desktop/android-ndk-r23c/toolchains/llvm/prebuilt/linux-x86_64/bin:$PATH | |
GOARCH = arm64 | |
GOOS = android | |
# CGO_ENABLED = 1 | |
# NDK_ROOT = /home/kali/Desktop/android-ndk-r25b | |
CMD_CLANG = aarch64-linux-android29-clang | |
CMD_GO ?= go | |
CMD_LLC ?= llc-13 | |
CMD_AWK ?= awk | |
CMD_SED ?= sed | |
CMD_TR ?= tr | |
CMD_CUT ?= cut | |
CMD_TOUCH ?= touch | |
CMD_RM ?= rm | |
.check_%: | |
# | |
@command -v $* >/dev/null | |
if [ $$? -ne 0 ]; then | |
echo "edemo Makefile: missing required tool $*" | |
exit 1 | |
else | |
touch $@ # avoid target rebuilds due to inexistent file | |
fi | |
UNAME_M := $(shell uname -m) | |
UNAME_R := $(shell uname -r) | |
ARCH = arm64 | |
LINUX_ARCH = arm64 | |
GO_ARCH = arm64 | |
BPFHEADER = -I ./kern \ | |
-I ./kern/bpf/arm64 | |
KERN_BUILD_PATH ?= /home/kali/Desktop/ebpf/kheaders | |
KERN_SRC_PATH ?= /home/kali/Desktop/ebpf/kheaders | |
# | |
# tools version | |
# | |
CLANG_VERSION = 14 | |
# clang 编译器版本检测,llvm检测, | |
.checkver_$(CMD_CLANG): \ | |
| .check_$(CMD_CLANG) | |
# | |
@echo $(shell date) | |
@if [ ${CLANG_VERSION} -lt 12 ]; then | |
echo -n "you MUST use clang 12 or newer, " | |
echo "your current clang version is ${CLANG_VERSION}" | |
exit 1 | |
fi | |
$(CMD_TOUCH) $@ # avoid target rebuilds over and over due to inexistent file | |
GO_VERSION = $(shell $(CMD_GO) version 2>/dev/null | $(CMD_AWK) '{print $$3}' | $(CMD_SED) 's:go::g' | $(CMD_CUT) -d. -f1,2) | |
GO_VERSION_MAJ = $(shell echo $(GO_VERSION) | $(CMD_CUT) -d'.' -f1) | |
GO_VERSION_MIN = $(shell echo $(GO_VERSION) | $(CMD_CUT) -d'.' -f2) | |
# golang 版本检测 1.17 以上 | |
.checkver_$(CMD_GO): \ | |
| .check_$(CMD_GO) | |
# | |
@if [ ${GO_VERSION_MAJ} -eq 1 ]; then | |
if [ ${GO_VERSION_MIN} -lt 17 ]; then | |
echo -n "you MUST use golang 1.17 or newer, " | |
echo "your current golang version is ${GO_VERSION}" | |
exit 1 | |
fi | |
fi | |
touch $@ | |
KERN_SOURCES = kern/open.c | |
KERN_OBJECTS = ${KERN_SOURCES:.c=.o} | |
.PHONY: clean assets build ebpf | |
.PHONY: clean | |
clean: | |
$(CMD_RM) -f user/bytecode/*.d | |
$(CMD_RM) -f user/bytecode/*.o | |
$(CMD_RM) -f assets/ebpf_probe.go | |
$(CMD_RM) -f bin/edemo | |
$(CMD_RM) -f .check* | |
.PHONY: ebpf | |
ebpf: ${KERN_OBJECTS} | |
.PHONY: $(KERN_OBJECTS) | |
$(KERN_OBJECTS): .checkver_$(CMD_CLANG) \ | |
.checkver_$(CMD_GO) | |
$(CMD_CLANG) \ | |
--target=bpf \ | |
$(BPFHEADER) \ | |
-I $(KERN_SRC_PATH)/arch/$(LINUX_ARCH)/include \ | |
-I $(KERN_SRC_PATH)/arch/$(LINUX_ARCH)/include/uapi \ | |
-I $(KERN_BUILD_PATH)/arch/$(LINUX_ARCH)/include/generated \ | |
-I $(KERN_BUILD_PATH)/arch/$(LINUX_ARCH)/include/generated/uapi \ | |
-I $(KERN_BUILD_PATH)/include \ | |
-I $(KERN_SRC_PATH)/include/uapi \ | |
-I $(KERN_BUILD_PATH)/include/generated \ | |
-I $(KERN_BUILD_PATH)/include/generated/uapi \ | |
-O1 -emit-llvm -S \ | |
-D__BPF_TRACING__ \ | |
-D__KERNEL__ \ | |
-c -o user/bytecode/open.o kern/open.c | |
.PHONY: assets | |
assets: \ | |
.checkver_$(CMD_GO) | |
# | |
$(CMD_GO) run github.com/shuLhan/go-bindata/cmd/go-bindata -pkg assets -o "assets/ebpf_probe.go" $(wildcard ./user/bytecode/*.o) | |
.PHONY: build | |
build: \ | |
.checkver_$(CMD_GO) | |
# | |
GOARCH=arm64 GOOS=android CGO_ENABLED=1 CC=aarch64-linux-android29-clang $(CMD_GO) build -ldflags "-w -s" -o bin/edemo . |
Author
SeeFlowerX
commented
Oct 27, 2022
搜到的信息不多,上面的报错判断是交叉编译导致的问题
可能需要使用cmake把android.toolchain.cmake这种给加上?
或者按照之前的文章用AOSP的文件头
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment