Linux 커널 모듈 컴파일에서 make 및 sudo make 관련 문제

Linux 커널 모듈 컴파일에서 make 및 sudo make 관련 문제

저는 현재 간단한 Linux 커널 모듈을 개발 중이며 make 및 sudo make 명령 실행과 관련된 문제를 겪고 있습니다. 이것은 내 Makefile의 내용입니다.

obj-m := main.o

all:
    make -C /lib/modules/$(shell uname -r)/build M=$(PWD) modules

clean:
    make -C /lib/modules/$(shell uname -r)/build M=$(PWD) clean

일반 사용자로 make를 실행하면 컴파일 프로세스가 완벽하게 작동합니다. 그런데 sudo make를 시도하면 $(PWD) 명령이 실패하여 오류가 발생하는 것 같습니다. pwd는 환경 변수이며 쉘에서 루트로 종료하고 실행하는 경우에도 잘 컴파일됩니다.만들다루트 사용자로

sudo make를 실행할 때 오류 출력이 발생합니다.:

make -C /lib/modules/`uname -r`/build M= modules
make[1]: Entering directory '/usr/src/linux-headers-6.2.0-39-generic'
make[2]: *** No rule to make target 'arch/x86/entry/syscalls/syscall_32.tbl', needed by 'arch/x86/include/generated/uapi/asm/unistd_32.h'.  Stop.
make[1]: *** [arch/x86/Makefile:248: archheaders] Error 2
make[1]: Leaving directory '/usr/src/linux-headers-6.2.0-39-generic'
make: *** [Makefile:4: all] Error 2

$(PWD) 명령이 실패하여 오류가 발생한 것 같습니다. 누구든지 이해하는 데 도움이 되거나 실제로 도움이 될 만한 통찰력이 있다면 매우 감사하겠습니다. 감사해요

답변1

귀하의 sudo구성은 주어진 명령을 실행하기 전에 환경을 정리하는 것 PWD입니다 make.

이 설정을 변경하려면 요청하세요.sudo 아니요환경을 정화하세요:

sudo -E make

(구성이 허용되는 경우) 또는 PWD수동으로 값을 제공하십시오.

sudo make PWD="$PWD"

Make 자체의 "현재 디렉터리" 변수를 사용하도록 Makefile을 변경하는 것도 가능해야 합니다 CURDIR.

all:
    make -C /lib/modules/$(shell uname -r)/build M=$(CURDIR) modules

관련 정보