vmlinux - vmlinux
vmlinuxis een statisch gekoppeld uitvoerbaar bestand dat de Linux-kernel bevat in een van de objectbestandsindelingen die door Linux worden ondersteund, waaronder Executable and Linkable Format (ELF), Common Object File Format (COFF) en a.out . Het vmlinuxbestand kan nodig zijn voor het debuggen van de kernel , het genereren van symbolentabellen of andere bewerkingen, maar moet opstartbaar worden gemaakt voordat het als een besturingssysteemkernel wordt gebruikt door een multiboot- header, bootsector en setup-routines toe te voegen .
Etymologie
Traditioneel noemden UNIX- platforms de kernel-image /unix. Met de ontwikkeling van virtueel geheugen kregen kernels die deze functie ondersteunden het vm-voorvoegsel om ze te onderscheiden. De naam vmlinuxis een mutatie van vmunix , terwijl in vmlinuzde letter zaan het einde aangeeft dat het gecomprimeerd is (bijvoorbeeld gzipped ).
Plaats
Traditioneel bevond de kernel zich in de hoofdmap van de bestandssysteemhiërarchie; echter, omdat de bootloader BIOS- stuurprogramma's moet gebruiken om toegang te krijgen tot de harde schijf , betekenden beperkingen op sommige i386- systemen dat alleen de eerste 1024 cilinders van de harde schijf adresseerbaar waren.
Om dit te verhelpen, moedigden Linux-distributeurs gebruikers aan om een partitie aan het begin van hun schijven te maken, speciaal voor het opslaan van bootloader- en kernelgerelateerde bestanden. GRUB , LILO en SYSLINUX zijn veelvoorkomende bootloaders .
Volgens afspraak wordt deze partitie op de bestandssysteemhiërarchie aangekoppeld als /boot. Dit werd later gestandaardiseerd door de Filesystem Hierarchy Standard (FHS), die nu vereist dat de Linux-kernelimage zich in /of bevindt /boot, hoewel er geen technische beperking is die dit afdwingt.
Compressie
Traditioneel wordt de kernel bij het maken van een opstartbare kernel-image ook gecomprimeerd met gzip , of, sinds Linux 2.6.30, met LZMA of bzip2 , waarvoor een zeer kleine decompressie- stub in de resulterende image moet worden opgenomen. De stub decomprimeert de kernelcode, drukt op sommige systemen stippen af naar de console om de voortgang aan te geven, en gaat dan verder met het opstartproces. Ondersteuning voor LZO , xz en LZ4 werd onder druk later toegevoegd.
De decompressieroutine is een verwaarloosbare factor in de opstarttijd, en voorafgaand aan de ontwikkeling van de bzImage , waren de groottebeperkingen van sommige architecturen, met name i386, extreem beperkend, waardoor compressie noodzakelijk werd.
Op de SPARC- architectuur wordt het vmlinux-bestand gecomprimeerd met behulp van eenvoudige gzip , omdat de SILO- bootloader gzip-afbeeldingen transparant decomprimeert.
De bestandsnaam van de opstartbare afbeelding is niet belangrijk, maar veel populaire distributies gebruiken vmlinuz .
bzImage
Naarmate de Linux-kernel volwassener werd, groeide de grootte van de kernels die door gebruikers werden gegenereerd boven de limieten die werden opgelegd door sommige architecturen, waar de beschikbare ruimte om de gecomprimeerde kernelcode op te slaan beperkt is. Het bzImage ( big zImage ) formaat is ontwikkeld om deze beperking te overwinnen door de kernel te splitsen over niet-aangrenzende geheugenregio 's.
De bzImage werd gecomprimeerd met gzip tot Linux 2.6.30, wat meer algoritmen introduceerde . Hoewel het bz voorvoegsel kan suggereren dat bzip2- compressie wordt gebruikt, is dit niet het geval. (Het bzip2-pakket wordt vaak gedistribueerd met tools met het voorvoegsel bz, zoals bzless, bzcat, enz.)
Het bzImage-bestand heeft een specifiek formaat. Het bevat aaneengeschakelde bootsect.o+ setup.o+ misc.o+ piggy.o. piggy.obevat het gzipped vmlinux-bestand in zijn gegevenssectie. Het script extract-vmlinuxonder scripts/in de kernelbronnen decomprimeert een kernelimage. Sommige distributies (bijv. Red Hat en klonen) kunnen worden geleverd met een kernel-debuginfo RPM die het vmlinuxbestand voor de overeenkomende kernel-RPM bevat, en het wordt meestal geïnstalleerd onder /usr/lib/debug/lib/modules/`uname -r`/vmlinuxof /usr/lib/debug/lib64/modules/`uname -r`/vmlinux.
Zie ook
Opmerkingen en referenties
Verder lezen
- Alavoor Vasudevan (2003-08-15). "10. Informatie over kernelbestanden". De Linux Kernel HOWTO .
-
Daniel Pierre Bovet (2013/01/03). "Speciale secties in Linux-binaries" . LWN.net .
alle speciale secties die in de Linux-kernel verschijnen, worden uiteindelijk verpakt in een van de segmenten die zijn gedefinieerd in de vmlinux ELF-header. Elke speciale sectie vervult een bepaald doel.