EFI 스텁(efistub)을 통해 Linux 커널을 로드하는 방법에 대한 몇 가지 튜토리얼을 읽고 있습니다. 이러한 지침에서는 커널 부팅 매개변수를 사용하는 경우가 많습니다 add_efi_memmap
. 예상되는 하드웨어는 8GB RAM을 갖춘 Intel x64입니다. 현재 설정에서는 grub-efi
부트로더와 커널 v3.13을 실행하고 있습니다.
애벌레시작하다아니요시작 매개변수 add_efi_memmap
:
23
BIOS-e820 줄 번호dmesg | grep BIOS-e820: | wc -l
243
EFI 메모리 행dmesg | grep efi:\ mem | wc -l
- DMA 영역:
24
예약 페이지 - 메모리: 7840568K/8283384K 사용 가능
- 442816K 예약됨
애벌레시작하다그리고 add_efi_memmap
그리고 EFI 메모리 맵 크기가 다른 것 같습니다.
23
BIOS-e820 라인57
EFI 메모리 케이블- DMA 영역:
22
예약 페이지 - 메모리: 7885076K/8283384K 사용 가능
- 398308K 예약됨
EFI 스텁시작하다아니요 add_efi_memmap
:
22
BIOS-e820 라인60
EFI 메모리 케이블- DMA 영역:
21
예약 페이지 - 메모리: 7885012K/8283384K 사용 가능
EFI 스텁시작하다그리고 add_efi_memmap
:
22
BIOS-e820 라인66
EFI 메모리 케이블- DMA 영역:
21
예약 페이지 - 메모리: 7882124K/8283384K 사용 가능
자세한 정보를 읽은 후(아래 인라인) 추가해야 할지 모르겠습니다 add_efi_memmap
. 시작에 절대적으로 필요하지 않은 몇 가지 추가 작업을 수행합니다. 반면에 사용 가능한 메모리에 대한 더 나은(더 완전한) 보기를 제공할 수 있습니다.
어떤 상황에서 이 작업을 수행해야 합니까?add_efi_memmapEFI 스텁 부팅에 부팅 매개변수를 사용할 수 있습니까? 이로 인해 EFI 스텁 시작 속도가 증가/감소하고 애플리케이션에 사용 가능한 메모리가 증가하거나 감소합니까? 내 EFI 메모리 맵에 E820 맵보다 더 많은 항목이 포함되어 있는지 어떻게 확인할 수 있습니까?
add_efi_memmep 문서를 참조하십시오.
add_efi_memmap : 사용 가능한 물리적 RAM의 EFI 메모리 맵을 포함합니다.
EFI 메모리 맵에 E820 맵에 없는 추가 항목이 있는 경우 다음 커널 명령줄 매개변수를 사용하여 사용 가능한 실제 RAM의 커널 메모리 맵에 이러한 항목을 포함할 수 있습니다. -https://www.kernel.org/doc/Documentation/x86/x86_64/uefi.txt
처음에 E820 BIOS 메모리 맵 항목 및/또는 커널 명령줄 메모리 맵 항목을 찾은 후 항상 EFI 메모리 맵 항목(있는 경우)을 메모리 맵에 추가하지 말고 커널 부팅 옵션이 있는 경우에만 추가하십시오. EFI 메모리 맵 항목:
add_efi_memmap
지정됨. -http://www.gossamer-threads.com/lists/linux/kernel/937817
시작 정지- GRUB이 커널과 초기 램디스크를 로드한 후 오류 메시지 없이 부팅이 중단되면 add_efi_memmap 커널 매개변수를 제거해 보십시오. -https://wiki.archlinux.org/index.php/GRUB#Boot_freezes
add_efi_memmap
/proc/iomem
이 패치는 현재 실행 중인 커널 명령줄에 옵션이 있을 때 대신 커널 메모리 맵을 읽도록 kexec 로더의 동작을 변경합니다/sys/firmware/memmap
.EFI 시스템에서는 e820 테이블이 누락되거나 불완전한 경우가 있습니다. 이와 같은 시스템은
add_efi_memmap
EFI의 메모리 테이블 항목을 커널의 메모리 테이블에 추가하여 시스템 메모리의 전체 그림을 작성하는 옵션을 사용하지만, 이 옵션을 사용하면 테이블을 채우는 데 사용되는 테이블에 이러한 항목이 추가되지 않습니다/sys/firmware/memmap
. 원본.kexec 로더는 기본적으로 원시 메모리 매핑을 사용합니다. 이는 로더에 완전한 시스템 맵이 없고 실제로 사용할 수 없는 위치에 커널이나 램디스크를 잘못 로드하는 경우 문제를 일으킬 수 있습니다. 이 변경으로 인해 kexec 로더는 실행 중인 커널의 명령줄에서 옵션을 확인
add_efi_memmap
하고 옵션이 발견되면 원래 매핑 대신 수정된 매핑을 사용합니다. -http://lists.infradead.org/pipermail/kexec/2011-April/005014.html
Linux 커널 개발자는 많은 실패 끝에 2009년에 솔루션(해킹)을 발견했습니다. 이는
add_efi_memmap
커널에 EFI 메모리 맵을 보고 이를 사용하여 E820 메모리 맵의 다양한 항목을 수정하도록 지시하는 커널 명령줄 옵션을 추가하는 것이었습니다. -http://blog.fpmurphy.com/2012/08/uefi-memory-v-e820-memory.html
답변1
부트로더(또는 Grub)는 e820처럼 메모리 맵을 다시 작성하므로 GRUB와 EFI 스텁 로더 사이에 다른 값이 표시되는 것 같습니다.
Linux 소스 코드의 설명에 따르면 EFI는 "e820 레거시(제로 페이지) 메모리 맵에 들어갈 수 있는 최대 128개 이상의 항목"을 허용한다고 나와 있습니다. 귀하가 게시한 숫자에 따르면 그렇지 않은 것 같습니다. 따라서 add_efi_memmap을 추가하는 것이 도움이 될지는 의문입니다... 하지만 이 테이블을 구문 분석하는 것은 확실히 나쁠 것은 없습니다...
답변2
Linux 배포판이 EFI STUB를 성공적으로 시작하면 add_efi_memmap을 사용할 필요가 없습니다. 이 커널 명령줄 옵션은 요즘 거의 필요하지 않습니다. 이에 대한 UEFI 펌웨어 및 Linux 커널 지원은 2009년 이후 크게 향상되었습니다.