Android - 较为轻松的单独编译安卓Linux内核模块
首先我们需要准备一个ndk,真的很奇怪那些人老是推荐去什么奇怪的地方去下载,那玩意要安Android Studio或者sdkmanager,我不想安装怎么办?去github下载就好了!点我直达!
首先我们得下载一个工具链(((
这里演示的平台是Windows!(最好用Linux平台)如果你是Linux或者Termux什么的,可以换!打开之后我们找bare-metal
,别下错了哦,其实你下载x86的也一样(((
安装好以后打开路径应该是这个样子,我这里就安装在D:\Env\14.2rel1
我这里偷懒添加了一个环境变量
其实都一样的,不加就指定一下绝对路径就好了!
PS: 我的ndk路径是
D:\Env\android-ndk-r25c
然后我们手写一段Makefile测试测试
ifndef TARGET_COMPILE
$(error TARGET_COMPILE not set)
endif
CC = $(TARGET_COMPILE)gcc
LD = $(TARGET_COMPILE)ld
# 可以继续加哦
INCLUDE_DIRS := . include
INCLUDE_FLAGS := $(foreach dir,$(INCLUDE_DIRS),-I$(KP_DIR)$(dir))
objs := hello-ko.o
all: hello-ko.ko
hello-ko.ko: ${objs}
${CC} -r -o $@ $^
%.o: %.c
${CC} $(CFLAGS) $(INCLUDE_FLAGS) -c -O2 -o $@ $^
至于头文件从什么地方去找就看你们自己了哦!建议是直接下个内核源代码,把头文件导进去,其实在Windows挺麻烦的,因为,默认情况下Win是不会处理链接的!
Ollvm混淆
ifndef TARGET_COMPILE
export TARGET_COMPILE=D:\Env\android-ndk-r25c\toolchains\llvm\prebuilt\windows-x86_64\bin
endif
CC = $(TARGET_COMPILE)aarch64-linux-android23-clang
LD = $(TARGET_COMPILE)ld.lld.exe
STRIP := llvm-strip.exe
# 可以继续加哦
INCLUDE_DIRS := . include
INCLUDE_FLAGS := $(foreach dir,$(INCLUDE_DIRS),-I$(KP_DIR)$(dir))
CFLAGS = -I$(AP_INCLUDE_PATH) $(INCLUDE_FLAGS) -Wall -Ofast -fno-PIC -fno-asynchronous-unwind-tables -fno-stack-protector -fno-unwind-tables -fno-semantic-interposition -U_FORTIFY_SOURCE -fno-common -fvisibility=hidden -mllvm -irobf-indbr
LDFLAGS += -s
objs := hello-ko.o
all: hello-ko.ko
hello-ko.ko: ${objs}
${CC} $(LDFLAGS) -r -o $@ $^
${STRIP} -g --strip-unneeded --strip-debug --remove-section=.comment --remove-section=.note.GNU-stack $@
%.o: %.c
${CC} $(CFLAGS) $(INCLUDE_FLAGS) -c -O2 -o $@ $^