커널 컴파일(make) 중 "[N/y/?]" 같은 문구가 자꾸 뜨는 이유
Q: make -j4 했는데 계속 y를 입력해야 하는 게 뜨네요.. 그리고 y 좀 입력하다 보면 "Amount of low memory, in kilobytes, to reserve for the BIOS" 이런 문장이 뜹니다. 공간이 부족하다는 건가요? 어떻게 해결하나요?
안녕하세요. 리얼리눅스 입니다.
리눅스 커널 소스코드 컴파일을 위해서 리눅스커널OS 가 어떤 보드(컴퓨터) 환경에서 동작하냐에 따라서 다르게 컴파일 되어야하기때문에 make 명령어 입력하기 전에는 사실 커널 컴파일 설정(.config)파일을 먼저 구성하셔야합니다. 그런데 사용자님께서 커널컴파일 설정을 하지않은상태로 make 동작을 하다보니 일일이 설정을 어떻게 하는게 좋을지 실시간적으로 물어봐서 자꾸 "[N/y]" 와 같은게 출력되는현상이 벌어진것입니다.
원활한 커널 컴파일을 위해서 커널컴파일 설정을 미리하는게 좋고 보통 아래와 같이 make oldconfig 명령어나 make defconfig 등을 입력할 수 있습니다. 만약 다양하게 커널 컴파일 설정을 수정하시려면 make menuconfig 명령어를 사용할 수도 있습니다.
$ make oldconfig $ make defconfig $ make menuconfig
(참고: oldconfig 는 현재 실행중인 커널의 컴파일 설정을 그대로 가져가는것이고 defconfig 는 ARCH 아키텍쳐 (예: x86) 에 맞춰서 기본 커널 컴파일 설정을 하는것 입니다.)
* 참고: 라즈베리파이 같은 ARM 환경에서 구동할 커널을 컴파일 한다면 크로스 컴파일이 필요하고 이럴땐 특정 보드를 위한 커널 컴파일 설정(예: make bcm2711_defconfig )을 해야할 수 있습니다.
$ make bcm2711_defconfig
그리고 "Amount of low memory, in kilobytes, to reserve for the BIOS" 문구를 설명드리자면 아마도 make 명령어 입력시 위에서 말씀드린것처럼 커널 컴파일 설정(.config) 이 안된상태 였기때문에 계속 "[N/y]" 와 같은 커널 컴파일 설정을 물어보는 출력이 계속 되었을거고 그 안에서 설정을 물어보는 문구중 하나 라고 보입니다.
예를 들면 아래 처럼요. 64 는 기본값을 뜻합니다.
Amount of low memory, in kilobytes, to reserve for the BIOS (X86_RESERVE_LOW) [64]
위 커널 컴파일 설정은 CONFIG_X86_RESERVE_LOW 설정을 뜻합니다.
이는 BIOS 의 데이터 정보를 담을 Low 메모리를 크기를 KB 단위로 몇으로 설정할 것 인지를 물어보는 사항입니다.
기본값은 64KB 입니다. 아마도 컴파일 하고 계신 커널은 비교적 옛날 커널 버전으로 보입니다. 현재 최신커널 버전에서는 CONFIG_X86_RESERVE_LOW 설정은 2021년 6월 1일 이후(약 v5.14)로 없어진 상태이고 제거된 이유는 아래 커밋으로 확인가능합니다.
https://github.com/torvalds/linux/commit/1a6a9044b96729abacede172d7591c714a5b81d1
부가적인 설명들을 함께 드렸지만 결론은 make 하기전에 커널 컴파일 설정(.config)을 생성하고 컴파일을 하면 일일일 "[N/y]" 와 같은 출력결과에 답변할 필요없이 컴파일이 가능합니다.
(추가 참고설명: make -j4 옵션은 --jobs 옵션으로 동시에 여러개의 CPU 코어를 활용하여 병렬적으로 빠르게 컴파일 하는 옵션입니다.)
다음과 같은 관련 내용의 교육이 필요하시다면 리얼리눅스 강의 중 리눅스 중급 A/B 를 추천드립니다.