![Linux 커널 모듈 컴파일에서 make 및 sudo make 관련 문제](https://linux55.com/image/227393/Linux%20%EC%BB%A4%EB%84%90%20%EB%AA%A8%EB%93%88%20%EC%BB%B4%ED%8C%8C%EC%9D%BC%EC%97%90%EC%84%9C%20make%20%EB%B0%8F%20sudo%20make%20%EA%B4%80%EB%A0%A8%20%EB%AC%B8%EC%A0%9C.png)
저는 현재 간단한 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