내 Linux 시스템에서 사용자 정의 모듈을 크로스 컴파일(arm64)하려고 합니다. 그래서 지금까지 내가 한 일은 다음과 같습니다.
- 대상 커널 소스 설치
- 크로스 컴파일러 설치
- 모듈을 활성화하고 크로스 컴파일러를 사용하여 커널을 빌드합니다. 지금까지 너무 좋았습니다. 마침내 "이미지" 파일을 올바르게 만들었습니다.
이제 모듈을 만들려고 합니다. 소스가 있는 폴더로 이동합니다. 생성된 파일은 다음과 같습니다.
bj-m := my_module.o
PWD := $(shell pwd)
DEBUG := 1
my_module-objs += my_module_core.o my_module_utils.o
ccflags-y += -O2 -Wall -DDEBUG
all:
make ARCH=arm64 CROSS_COMPILE=$(CROSS) -C $(KERNEL) M=$(PWD) modules
그런 다음 빌드를 실행하려고 합니다.
make KERNEL=/tmp/linux-kernel-src/ CROSS=aarch64-linux-gnu-
나는 다음과 같은 결과를 얻습니다.
make[1]: Entering directory '/tmp/linux-kernel-src'
Building modules, stage 2.
MODPOST 0 modules
make[1]: Leaving directory '/tmp/linux-kernel-src'
그래서 오류가 없는 것처럼 보이지만 빌드 프로세스에서는 컴파일해야 하는 현재 폴더의 모든 파일을 건너뛰고 아무 일도 일어나지 않습니다.
뭔가 분명한 걸 놓치고 있는 것 같은데... 뭔가 파악이 안 되는군요... 혹시 아이디어가 있으신가요?
매우 비슷한 문제가 있는 다른 게시물을 보았습니다(커널 모듈 빌드), 하지만 이 경로에는 대괄호가 있는데 제 경우는 그렇지 않습니다.
감사합니다!
답변1
알았어, 난 공식적으로 바보야! 찾았지만 Makefile의 시작 부분에 "o"가 없습니다.
:-(
obj-m := my_module.o
매우 유감입니다!