태그 보관물: linux-kernel

linux-kernel

UEFI / EFI 부팅에서 add_efi_memmap를 커널 인수로 언제 지정해야합니까? 스텁 (efistub)로드하는 방법에

Linux 커널을 EFI 스텁 (efistub)로드하는 방법에 대한 자습서를 읽고 있습니다. 이 명령어들은 종종 커널 부트 매개 변수를 사용합니다 add_efi_memmap. 의도 된 하드웨어는 8GB RAM을 가진 Intel x64입니다. 현재 설정에서 grub-efi부트 로더와 커널 v3.13을 실행 중입니다.

GRUB의 부팅 없이add_efi_memmap 부트 인자 :

  • 23BIOS-E820 라인 에 의해 계산dmesg | grep BIOS-e820: | wc -l
  • 243EFI 메모리 라인 에 의해 계산dmesg | grep efi:\ mem | wc -l
  • DMA 영역 : 24예약 된 페이지
  • 메모리 : 7840568K / 8283384K 사용 가능
  • 442816K 예약

GRUB의 부팅 과 함께 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_memmap 부팅 인수를 EFI 스텁 부팅에 사용해야합니까? 그러면 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 메모리 맵 항목 및 / 또는 커널 명령 줄 memmap 항목을 처음 찾은 후 항상 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옵션이 현재 실행중인 커널의 명령 행에 있을 때 대신 kexec 로더의 동작을 변경하여 /proc/iomem대신 에서 커널 메모리 맵을 읽습니다 /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


많은 잘못된 시작 후 2009 년에 Linux 커널 개발자가 도달 한 솔루션 (해킹)은 커널 명령 줄 옵션을 추가하는 것이 었습니다 add_efi_memmap. 커널에 EFI 메모리 맵을보고이를 사용하여 다양한 항목을 수정하도록 지시했습니다. E820 메모리 맵에서. -http : //blog.fpmurphy.com/2012/08/uefi-memory-v-e820-memory.html



답변

부트 로더 또는 그 문제에 대한 Grub은 e820과 같은 메모리 맵을 재구성합니다. 이것이 GRUB과 EFI 스텁 로더 사이에 다른 값을 보는 이유라고 생각합니다.

리눅스 소스 코드에는 EFI가 “e820 레거시 (제로 페이지) 메모리 맵에 들어갈 수있는 최대 128 개 이상의 엔트리”를 허용한다고 언급되어 있습니다. 이것은 게시 한 숫자에 따라 그렇지 않은 것 같습니다. 따라서 add_efi_memmap를 추가하는 것이 도움이 될지 의심 스럽습니다 … 그러나이 테이블을 파싱하는 것도 확실히 아프지 않습니다 …


답변

Linux 배포가 EFI STUB 부팅에 성공하면 add_efi_memmap를 사용할 필요가 없습니다. 이 커널 명령 줄 옵션은 현재 거의 필요하지 않습니다. 2009 년 이후 UEFI 펌웨어 및 Linux 커널 지원이 크게 향상되었습니다.


답변