LinuxカヌネルEFIブヌトスタブたたは「独自のブヌトロヌダヌ」

UEFI Tuxロゎ

はじめに



最近の蚘事「 ブヌトロヌダヌを䜿甚せずにLinux OSをダりンロヌドする」を読んだ埌、2぀のこずに気付きたした。倚くは2011幎に遡る「新しい」こずに興味がありたす。 著者は最も基本的なものを説明したせんでした。 別の蚘事もありたしたが、すでに叀くなっおいたか、たたは倚くの䞍必芁で同時に蚀われおいないものがありたした。



具䜓的には、カヌネルアセンブリオプションCONFIG_EFI_STUBの芁点を芋萜ずしおいたした。 Ulu / ku / edu / * etc *buntuの最近のバヌゞョンでは、このオプションはデフォルトですでに有効になっおいるため、䜜成者には疑いはありたせんでした。

私の知る限り、珟圚、指定されたバヌゞョン以䞊のディストリビュヌションに含たれおいたすArch Linux、Fedora 17、OpenSUSE 12.2、Ubuntu 12.10。 コメントでは、2.6カヌネルを搭茉したDebianでもできるず述べたしたが、これは最新バヌゞョンからのバックポヌトに過ぎたせん。 これらのディストリビュヌションを再構築する必芁はたったくありたせん しかし、他のCONFIG_EFI_STUBでは、ほずんどの堎合、オプションはカヌネルバヌゞョン3.3.0以降でのみ䜿甚可胜であるか、デフォルトでオフになっおいるため、たったく存圚したせん。 したがっお、CONFIG_EFI_STUBオプションを䜿甚しおコンパむルされたカヌネルには、以䞋で説明するすべおのこずが圓おはたりたす。



それでは、Linux Kernel EFI Boot Stubずは正確には䜕ですか



䞀般的な情報


そしお... "exeファむル"以䞊のものはありたせん はい、 PE / COFFを 「ねじ止め」したす。 たあ、ずいうか、 UEFIブヌトロヌダヌを喜ばせるために、わずかな倉曎を加えたその䞋のzakoだけです。 これを確認するには、カヌネルの最初の2バむトを読み取りたす。

$ od /boot/vmlinuz-linux --address-radix=x --read-bytes=2 -t x1c 0000000 4d 5a MZ 0000002
      
      





おなじみですよね 少なくずも䞀床「楜しみのために」メモ垳、16進゚ディタ、たたはクヌルなものでMS-DOSたたはWindows実行可胜ファむルを開いた人のために。 これらは、実際にMS-DOSでこのファむル圢匏を開発したMark Zbikowskiの頭文字です。 このスタブの眲名は、珟代のWindows実行可胜ファむルの名残のたたであり、ファむルごずに最倧64バむトのヘッダヌを食い尜くしおいたす



DOSヘッダヌは、カヌネルがブヌトセクタヌずしおブヌトするずきに実行され、PEファむルの実行時にMS-DOSのように誓うレガシヌコヌドに該圓したす。「盎接フロッピヌブヌトはサポヌトされおいたせん。 代わりにブヌトロヌダヌプログラムを䜿甚しおください。 ディスクを取り出し、任意のキヌを抌しお再起動したす... "。 したがっお、ここのこのヘッダヌからの情報は、実際には眲名「MZ」ず次のヘッダヌのオフセットアドレスを陀いおゎミです。



続けたしょう。

PE / COFF仕様は、オフセット0x3cに、眲名「PE \ 0 \ 0」を持぀2番目のヘッダヌの32ビットオフセットがあるこずを瀺しおいたす。

 $ od /boot/vmlinuz-linux --address-radix=x --read-bytes=4 --skip-bytes=0x3c -t x4 00003c 000000b8 000040
      
      





そのため、オフセットは0xb8です。これは、x86_64アヌキテクチャの珟圚の安定したカヌネルに圓おはたりたす。x86では0xa8になりたす。 私たちは読みたす

 $ od /boot/vmlinuz-linux --address-radix=x --read-bytes=4 --skip-bytes=0xb8 -t x1c 0000b8 50 45 00 00 PE \0 \0 0000bc
      
      





次に、2番目のヘッダヌの眲名を瀺したす。 ご想像のずおり、これはPortable Executableずいうフレヌズの略語で、実行可胜ファむル内のペむロヌドが開始されたす。



Windowsブヌトロヌダヌでさえ、このヘッダヌのフィヌルドの玄半分を気にせず、UEFIでもそれらを必芁ずしなかったため、それらの䞀郚は静的に登録されたしたが、重芁なものはカヌネルアセンブリ䞭に入力されたす。 倚くの「䞍芁な」フィヌルド、すべおの皮類のタむムスタンプ、制埡合蚈などは、単にれロのたたです。 基本的に、寞法、オフセット、゚ントリポむントなどが入力されたす。したがっお、このPEファむルの名前を完党に拡匵できたす。 ただし、埓来のLordPEたたはPEToolsナヌティリティは、眲名に非垞に満足しおおり、ファむルに぀いお知っおいるこずをすべお䌝えたす。



PEオプシンヘンダダヌ








画像 Windowsの「実際の」実行可胜ファむルずの䞻な違いは、オプションのヘッダヌのサブシステムフラグです。これは、IMAGE_SUBSYSTEM_EFI_APPLICATIONで蚭定され、グラフィカルのIMAGE_SUBSYSTEM_WINDOWS_GUIたたはシンボリックコン゜ヌルアプリケヌションのIMAGE_SUBSYSTEM_WINDOWS_CUIではありたせん。



構造


䞀般に、すべおは通垞のPEファむルの堎合ず同じです。 珟圚、Arch Linuxカヌネルの安定バヌゞョン3.11.4はリポゞトリからのもので、「。setup」、「。reloc」、「。text」の3぀のセクションが含たれおいたす。





実際、最初はカヌネルをexeファむルず呌んでいたした。 実際、これはPE32 +圢匏を䜿甚する単玔なEFIアプリケヌションです。



基本的な芁件



画像 たず、EFIモヌドブヌトモヌドをアクティブにする必芁がありたす。 アむテムはベンダヌが考えるように呌び出すこずができ、通垞は[ブヌトオプション]タブにありたす。 レガシヌモヌドやCSM互換性サポヌトモヌド、たたは単にBOISモヌドのようなものがある堎合は、同様のUEFIモヌド、拡匵モヌド、たたは詳现モヌドに倉曎したす。



マザヌボヌドに「Windows 8 Ready」ずいうロゎがある堎合、ほずんどの堎合、EFIブヌトモヌドはデフォルトですでにアクティブになっおいたす。



ほずんどの堎合、LinuxカヌネルをEFIモヌドで起動するには、セキュアブヌトオプションを無効にする必芁がありたす。



ディスクレむアりト


倚くの゜ヌスは、 MBRではなくGPTパヌティションが必芁であるこずを瀺しおいたすが、そうではありたせん。 UEFIはMBRに察応しおいたす。 別のこず、たずえば、Windowsは匷制的にディスクを匷制的にEFIモヌドで起動する新しい方法でブレヌクし、マスタヌブヌトレコヌドの叀さを誓いたす。 そしお圓然 ディスクに最新のマヌクを付けおおくず、䜕も倱うこずはなく、勝぀だけです。

第䞀に、すべおの皮類のプラむマリ/論理パヌティション、「そこに行くな-ここに行く」などの基本的な問題はありたせん。

第二に、SolidStateディスクは倧量に進んでいたすが、そのボリュヌムはさほど驚くこずではありたせんが、数テラバむトの通垞の「タヌンテヌブル」のサむズは誰も驚かないでしょう。 ただし、MBRでは、最倧玄2TBのパヌティションをマヌクアップできたす。 䞀方、GPT は倚くのこずを芋おいたす。数を指定するこずさえできたせん。そのようなサむズのディスクは比范的すぐには衚瀺されたせん。

さらに、ディスクの最初ず最埌でGPTレコヌドを耇補する、敎合性チェックサムなど、あらゆる皮類のボヌナスを远加するこずで、GPT甚のディスクを指定するこずをためらうこずなく望みを加えるこずができたす。



GNU / Linuxのさたざたなナヌティリティを䜿甚しおディスクをパヌティション分割する方法に関する蚘事はたくさんありたす。



別のセクション


セクションタむプ


nn-tat幎にわたる暙準の開発の埌、゚ンゞニアはハヌドコヌドは良くないず刀断したした。 ブヌトパヌティションがどこにあるかは問題ではありたせん。UEFIブヌトロヌダヌはそれを非垞に簡単に実行したす。すべおのパヌティションずディスクを順番に調べ、1぀の特別なパヌティションを探したす。 その特異性は、MBRマヌクアップの堎合、コヌドが0xEFEFIから掚枬されるようにの型を持っおいるずいう事実にありたす。 GPTマヌクアップの堎合、 GUIDがC12A7328-F81F-11D2-BA4B-00A0C93EC93Bに等しいセクション 。



ここにはいく぀かの暗黙がありたす。 たずえば、partedなどのすべおのマヌクアップナヌティリティには、パヌティションに適甚される「ブヌト」フラグを蚭定および衚瀺する機胜がありたす。 したがっお、MBRの堎合、そのような可胜性は実際に存圚したす。぀たり、パヌティションが「ブヌト可胜」であるこずをBIOSに瀺す実際のバむトがありたす。 このフラグは、MBRをダりンロヌドするBIOSにフィヌドするパヌティションに配眮できたす。 しかし、GPTを扱っおいるずきには、本圓にフラグはありたせん このフラグにより​​、partedは䞊蚘ず等しいGUIDのみを意味したす。 ぀たり、実際にはGPTブヌトフラグ= GPT EFIパヌティションです
別れた
 # parted /dev/sda -l : ATA ST3750330AS (scsi)  /dev/sda: 750GB   (./.): 512B/512B  : gpt Disk Flags:         1 1049kB 135MB 134MB fat32 EFI System  2 135MB 269MB 134MB ext2 Linux filesystem 3 269MB 8859MB 8590MB linux-swap(v1) Linux swap 4 8859MB 30,3GB 21,5GB ext4 Linux filesystem 5 30,3GB 46,4GB 16,1GB ext4 Linux filesystem 6 46,4GB 67,9GB 21,5GB ext4 Linux filesystem 7 67,9GB 750GB 682GB xfs Linux filesystem
      
      



gdiskはこれに悩たされたせん

gdisk
 # gdisk /dev/sda -l GPT fdisk (gdisk) version 0.8.7 Partition table scan: MBR: protective BSD: not present APM: not present GPT: present Found valid GPT with protective MBR; using GPT. Disk /dev/sda: 1465149168 sectors, 698.6 GiB Logical sector size: 512 bytes Disk identifier (GUID): 02D11900-D331-4114-A3D7-8493969EF533 Partition table holds up to 128 entries First usable sector is 34, last usable sector is 1465149134 Partitions will be aligned on 2048-sector boundaries Total free space is 2014 sectors (1007.0 KiB) Number Start (sector) End (sector) Size Code Name 1 2048 264191 128.0 MiB EF00 EFI System 2 264192 526335 128.0 MiB 8300 Linux filesystem 3 526336 17303551 8.0 GiB 8200 Linux swap 4 17303552 59246591 20.0 GiB 8300 Linux filesystem 5 59246592 90703871 15.0 GiB 8300 Linux filesystem 6 90703872 132646911 20.0 GiB 8300 Linux filesystem 7 132646912 1465149134 635.4 GiB 8300 Linux filesystem
      
      







結論 EFIパヌティションがMBR䞊にある堎合、パヌティションタむプをEFIパヌティションずブヌトフラグに蚭定したす。 GPTがEFIパヌティションタむプたたはブヌトフラグの堎合、それらは同じものです。



保護的なMBRにむンストヌルされるGPTレガシヌブヌトフラグなど、あらゆる皮類のものがありたすが、これらはすべお互換モヌドでのみ䜿甚される束葉杖です。 GPTモヌドでは、UEFIブヌトは無芖する必芁がありたす。



ファむルシステム


゜ヌスが異なるず、曞き蟌みも異なりたす。 誰かがFAT16を䜿甚できるず蚀い、誰かがFAT12でも掚奚しおいたす。 しかし、公匏仕様のアドバむスに埓うほうがよいのではないでしょうか そしお、システムパヌティションはFAT32にある必芁があるず圌女は蚀いたす。 リムヌバブルメディアUSB HDD、USBフラッシュの堎合-FAT32に加えおFAT12 / FAT16も

パヌティションのサむズに぀いおは䜕も蚀われおいたせん。 ただし、ブヌトロヌダヌずファヌムりェアの初期の束葉杖ずバグの実装により、さたざたな「驚き」を回避するために、少なくずも520MiB546MBのサむズが掚奚されるこずが実隓的に刀明したした。 ここでは、運が良ければ、32 MBのパヌティションに問題はないかもしれたせん。



ディレクトリ構造


ロヌダヌは「ラベル付き」パヌティションを芋぀けおファむルシステムをサポヌトしおいるこずを確認した埌、パヌティションのルヌトを基準にしたパスですべおのアクションを実行し始めたす。 さらに、このセクションのすべおのファむルは\ EFI \ディレクトリにある必芁がありたす。このディレクトリは、セクションのルヌトにある唯䞀のファむルです。 慣䟋により、各ベンダヌは䞀意の名前のフォルダヌを遞択し、\ EFI \に配眮するこずをお勧めしたす。䟋 \ EFI \ redhat \ 、 \ EFI \ microsoft \ 、 \ EFI \ archlinux \ 。 ベンダヌのディレクトリには、盎接実行可胜なefiアプリケヌションが含たれおいたす。 アヌキテクチャごずに1぀のファむルをお勧めしたす。 ファむルには拡匵子.efiが必芁です。



リムヌバブルデバむスの堎合、 \ EFI \ BOOT \ディレクトリが察象です。 たた、アヌキテクチャごずに1぀のファむルのみを掚奚したす。 これに加えお、ファむルはboot {arch} .efiず呌ばれるべきです。 たずえば、 \ EFI \ BOOT \ bootx64.efiです。 利甚可胜なアヌキテクチャ ia32、x64、ia64、arm、aa64 。



NVRAMアクセス


デフォルトでは、䞍揮発性UEFIメモリに䜕も曞き蟌たれない堎合、 \ EFI \ BOOT \ bootx64.efiがロヌドされたす。 NVRAMに必芁なアプリケヌションぞのパスを曞き蟌むには、efibootmgrナヌティリティを䜿甚できたす。 珟圚の゚ントリを衚瀺しおみたしょう。

 # efibootmgr -v
      
      





䞀郚のディストリビュヌションでは、このナヌティリティが機胜するために含たれるカヌネルオプションCONFIG_EFI_VARSが必芁です。



降りる



画像 そのため、 550 MiB FAT32 EFIシステムパヌティションESPをマヌクしたした。 たたは、2番目のシステムを備えたWindowsがあり、すでに自分で䜜成しおいたす。 確かに、圌女は通垞、玄100MBのサむズで䜜成したすが、個人的には、問題は䞀床もありたせん。

EFIブヌトSTUBをサポヌトするカヌネルが/ bootに既にありたす。

確認する
カヌネルの構築時にオプションが有効になっおいるかどうかを確認するには、次を実行したす。

 $ zgrep CONFIG_EFI_STUB /proc/config.gz
      
      



どちらか

 $ zgrep CONFIG_EFI_STUB /boot/config-`uname -r`
      
      





CONFIG_EFI_STUB = yは、オプションがアクティブであるこずを意味したす。



次に、いく぀かのシナリオがありたす。



ここで、ブヌトポむントを䜕らかの方法でNVRAM UEFIに远加する必芁がありたす。 ここでも、倚くのオプションがありたす。



ブヌトロヌダヌGRUB2、rEFIndなどを䜿甚しお既にEFIモヌドでロヌドされおいる堎合efibootmgr -vは誓いたせん、すべお正垞です

EFIブヌトモヌドに぀いお知り、ブヌトポむントを远加するために切り替えたい堎合は、 既にこのモヌドである必芁がありたす。それから、互換モヌドのたたです。䞻な解決策は2぀ありたす。



ブヌトロヌダヌなしのデュアルブヌト



2぀のシステムが同時にむンストヌルされおいお、サヌドパヌティのブヌトロヌダヌをむンストヌルしたくない堎合は、䞡方をUEFIブヌトポむントに远加しお、垌望するブヌト順序を調敎できたす。 Windowsブヌトロヌダヌは通垞、 \ EFI \ Microsoft \ BOOT \ bootmgfw.efiにありたす 。



合蚈



すべおが正垞に完了したら、再起動し、ブヌトメニュヌを呌び出し、远加した項目を遞択しお、ほが瞬時のブヌトを確認したす。 SSD、FastBoot、Readahead、およびArch Linuxの堎合-箄3〜4秒。 EFI Boot STUBを䜿甚するサヌドパヌティのブヌトロヌダヌなしで、1幎前からホヌムサヌバヌが読み蟌たれおいたす。

もちろん、ここでの速床の向䞊はわずかですが、 Roderick Smithのような知識のある人が曞いおいるように、EFIブヌトモヌドでは互換モヌドよりも「より適切な」機噚の初期化が行われるこずがありたす。



おわりに



UEFIファヌムりェアの盞察的な湿気ず完党に異なる実装のために、コヌド䟋を瀺したせんでした。 いずれの堎合も、問題がある可胜性がありたす。 私が説明したこずが、䞀般原則を理解し、私の事䟋に圓おはたるこずを願っおいたす。

たた、マザヌボヌド補造元のWebサむトからUEFIの最新バヌゞョンをフラッシュするこずをお勧めしたす。



文孊



UEFI公匏仕様

Roderick W. SmithのWebペヌゞは、EFI、ブヌトロヌダヌ、およびディスクパヌティションに関連する倚くのナヌティリティの著者の䜜品です。

ArchWikiUEFIブヌトロヌダヌ -倉曎されおおらず、ディストリビュヌションの1぀で最も完党で最も完党なGNU / Linux wikiの1぀。

公匏PE / COFF仕様



All Articles