Linux 커널: "맵 파일을 찾을 수 없습니다"

Linux 커널: "맵 파일을 찾을 수 없습니다"

나는 내 자신의 구성 및 컴파일된 Linux 커널을 실행하려고 노력했지만 지금까지는 성공하지 못했습니다. 해당 머신은 무료 Libreboot 펌웨어가 설치되어 있고 페이로드로 GRUB2가 있는 Apple Macbook(Intel Core 2 Duo, 64비트)입니다. 나는 이 사용자 정의 커널을 사용하여 내가 만든 Linux From Scratch 설치를 부팅하려고 합니다. 컴퓨터의 다른 파티션에 Trisquel GNU/Linux(버전 7)가 설치되어 있고 제대로 작동하므로 이 하드웨어/펌웨어 구성에서 GNU/Linux를 부팅할 수 있다는 것을 알고 있습니다.

커널 버전은 4.13.1(linux-libre)이며 이것이 내 커널을 컴파일하려는 첫 번째 시도입니다. GRUB 명령 프롬프트에서 시작하려고 하면 화면이 검게 변하고 출력이 표시되지 않지만 /var/log/kern.log 파일에 기록됩니다. 특히 로그 파일 시작 부분에 다음 메시지가 표시되어 혼란스럽습니다.

Oct 9 17:24:17 <lee_lfs> kernel: klogd 1.5.1, log source = /proc/kmsg started.
Oct 9 17:24:17 <lee_lfs> kernel: Inspecting /boot/System.map
Oct 9 17:24:17 <lee_lfs> kernel: Cannot find map file.
Oct 9 17:24:17 <lee_lfs> kernel: Loaded 100800 symbols from 32 modules.
Oct 9 17:24:17 <lee_lfs> kernel: [ 0.000000] random: get_random_bytes called from start_kernel+0x30/0x3bc with crng_init=0
Oct 9 17:24:17 <lee_lfs> kernel: [ 0.000000] Linux version 4.13.1-gnu (nobody@lee-LibreBook) (gcc version 7.2.0 (GCC)) #1 SMP PREEMPT Mon Oct 9 13:39:53 EDT 2017 

아래 두 번째 줄은 /boot/System.map 파일을 찾았음을 나타내는 것 같습니다. 그러나 다음 줄은 파일이 거부되었음을 나타냅니다(커널이 완전히 부팅되지 않은 데는 적어도 부분적으로 원인이 있을 수 있다고 생각됩니다).

이 문제의 원인이 무엇인지 아는 사람이 있습니까? 나는 이전에 Linux 질문 웹사이트(여기 링크); 그러나 아무도 이것을 알아낼 수 없었습니다. (이 링크에는 문제에 대한 자세한 배경 정보와 이전에 제안된 내용이 포함되어 있습니다.)

편집 - 의견에 제시된 제안에 답변하려면 다음을 수행하세요.

한 사용자는 "Inspecting..." 줄이 klogd가 파일에 액세스하고 있다는 의미가 아니라 단지 파일을 찾기 시작했다는 의미일 수도 있다고 제안했습니다. 그러나 처음에는 /boot 파티션에 대해 /etc/fstab에 줄을 추가하는 것을 잊어버렸고(이 경우 파일을 분명히 찾을 수 없음) "check..." 줄이 인쇄에 추가되지 않았습니다. /etc/fstab을 수정한 후에야 매핑된 파일에 대한 올바른 경로와 함께 해당 행이 로그에 나타나기 시작했습니다. 이것이 바로 klogd가 매핑 파일을 찾고 있다고 의심하지만 어떤 이유로 이를 받아들이지 않는 것 같습니다.

답변1

그래서 저는 klogd의 소스 코드를 파헤쳐 보았는데, 답이 무엇인지 알 것 같습니다.

첫째, 이 Inspecting ...줄은 klogd가 해당 위치에서 매핑 파일을 찾아 성공적으로 열었음을 의미합니다.

그러나 해당 줄을 인쇄하는 이유는 Cannot find map file.양식의 매핑 파일에서 해당 줄을 찾기 때문입니다.

[address] [type] _Version_XXXXX

여기서 "XXXXX"는 베이스 256으로 인코딩된 커널 버전입니다.

그러나 이 버전 라인은 커널 빌드 중에 생성된 매핑 파일(또는 사전 패키지된 Trisquel 설치에서 제공하는 매핑 파일)에는 존재하지 않습니다. 따라서 klogd는 이 버전 라인을 찾을 수 없기 때문에 맵 파일을 거부합니다.

분명히 이것은 더 많은 질문을 제기하지만 ...

편집하다:다음과 같은 후속 질문을 만들었습니다.

"지도 파일을 찾을 수 없습니다"는 정말 심각한 문제입니다. 메시지를 시작하시겠습니까?

내 System.map 파일에 "Version_XXXXX" 줄이 포함되지 않는 이유는 무엇입니까?

편집하다:System.map 파일 시작 부분에 "더미" 버전 줄을 추가했습니다.

0FFFFFFFFFFFFFFF d Version_265223

이 주소는 가상 메모리 맵에 존재하지 않아야 합니다(따라서 파일의 다른 기호를 방해하거나 충돌하지 않기를 바랍니다). "265223"은 Base 256으로 인코딩된 내 커널 버전(4.12.7)입니다. 이제 시작 시 kern.log 파일에 다음이 표시됩니다.

Nov  3 19:12:02 <lee_lfs> kernel: klogd 1.5.1, log source = /proc/kmsg started.
Nov  3 19:12:02 <lee_lfs> kernel: Inspecting /boot/System.map-4.12.7
Nov  3 19:12:02 <lee_lfs> kernel: Loaded 86148 symbols from /boot/System.map-4.12.7.
Nov  3 19:12:02 <lee_lfs> kernel: Symbols match kernel version 4.12.7.
Nov  3 19:12:02 <lee_lfs> kernel: Loaded 11257 symbols from 31 modules.

그래서 작동하는 것 같습니다 - klogd가 마침내 맵 파일을 인식합니다! 커널이 여전히 부팅되지 않습니다. 이는 다른 문제로 인한 것일 수 있지만 다음에 조사해야 합니다. 이것은 현재 임시 해결책인 것 같습니다. 그러나 이것이 어떻게 작동하는지 알아보기 위해 커널 개발 팀에 문의하겠습니다.

관련 정보