kmidiff(1)

Från Wiki.linux.se -Linux wikipedia på Svenska.
Hoppa till navigering Hoppa till sök


NAMN

kmidiff – jämför KMI:er för Linux-kärnträd

kmidiff jämför de binära Kernel Module Interfaces för två Linux-kärnträd.

Den binära KMI:n är gränssnittet som Linux-kärnan exponerar för sina moduler.

Träden som är av intresse här är resultatet av byggandet av Linux-kärnans källträd.

ALLMÄNT TILLVÄGAGÅNGSSÄTT

Ett exempel på hur du bygger din kärna om du vill jämföra den med en annan med kmidiff är:

git clone -b v4.5 git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git linux/v4.5
cd linux/v4.5
make allyesconfig all

Installera sedan modulerna i en katalog, till exempel underkatalogen build/modules i ditt kärnkällträd:

mkdir build/modules
make modules_install INSTALL_MOD_DIR=build/modules

Konstruera sedan en lista över gränssnitt exporterade av kärnan, som du vill jämföra:

cat > kmi-whitelist << EOF
[kernel_4.5_kmi_whitelist]
 init_task
 schedule
 dev_queue_xmit
 __kmalloc
 printk
EOF

Anta att du har gjort något liknande för v4.6-grenen av Linux-kärnan; du har nu dessa två kataloger: linux/v4.5 och linux/v4.6.

Deras moduler finns under katalogerna linux/v4.5/build/modules och linux/v4.6/build/modules.

För att jämföra deras KMI behöver kmidiff veta var vmlinux-binärerna och deras tillhörande moduler finns.

Så här skulle kommandoraden se ut:

kmidiff                                     \\
  --kmi-whitelist  linux/v4.6/kmi-whitelist \\
  --vmlinux1       linux/v4.5/vmlinux       \\
  --vmlinux2       linux/v4.6/vmlinux       \\
                   linux/v4.5/build/modules \\
                   linux/v4.6/build/modules

Detta verktyg använder biblioteket libabigail för att analysera binären samt dess tillhörande felsökningsinformation.

Här är dess allmänna arbetssätt.

När det instrueras att göra det läses och analyseras en binär och dess tillhörande felsökningsinformation.

För detta ändamål analyserar libabigail som standard beskrivningarna av de typer som kan nås från gränssnitten, funktioner och variabler, som är synliga utanför sin översättningsenhet.

När den analysen är gjord konstrueras ett Application Binary Interface Corpus genom att endast beakta delmängden av typer som kan nås från gränssnitt associerade med ELF-symboler som är definierade och exporterade av binären.

Det är detta slutliga ABI-korpus som libabigail betraktar som representerande ABI:t för den analyserade binären.

Libabigail har sedan kapacitet att generera textuella representationer av ABI-korpusar, jämföra dem, analysera deras ändringar och rapportera om dem.

ANROP

Mer allmänt anropas kmidiff i formen:

kmidiff [options] <first-modules-dir> <second-modules-dir>

MILJÖ

Som standard jämför kmidiff alla gränssnitt, exporterade funktioner och variabler, mellan kärnan och dess moduler.

I praktiken kan dock vissa användare vilja jämföra en delmängd av dessa gränssnitt.

Som standard använder kmidiff felsökningsinformation i DWARF debug info-format, om den finns, annars jämför det gränssnitt med CTF- eller BTF-debug info-format, om de finns.

Slutligen, om ingen debug info i dessa format hittas, beaktar det endast ELF-symboler och rapporterar om deras tillägg eller borttagning.

Användare kan då definiera en "white list" över gränssnitten som ska jämföras.

En sådan white list är helt enkelt en fil i "INI"-format som ser ut så här:

[kernel_version_x86_64_whitelist]
  function1_name
  function2_name
  global_variable1_name
  ....

Observera att namnet på sektionen, namnet som står mellan de två hakparenteserna, i den INI-filen bara måste sluta med strängen "whitelist".

Så du kan definiera det namn du vill, till exempel [kernel_46_x86_64_whitelist].

Sedan är varje rad i den white list-filen namnet på en exporterad funktion eller variabel.

Endast dessa gränssnitt, tillsammans med typerna som kan nås från deras signaturer, kommer att jämföras rekursivt av kmidiff.

Observera att kmidiff som standard analyserar typerna som kan nås från gränssnitten associerade med ELF-symboler som är definierade och exporterade av Linux-kärnan som unionen av vmlinux-binären och alla dess kompilerade moduler.

Det jämför sedan dessa gränssnitt, tillsammans med deras typer.

OPTIONER

  • --help | -h
Visa kort hjälp om kommandot och avsluta.
  • --version | -v
Visa programmets version och avsluta.
  • --verbose
Visa vissa utförliga meddelanden under körning.
  • --debug-info-dir1 | --d1 <di-path1>
För fall där felsökningsinformationen för binärerna i den första Linux-kärnan är utdelad i separata filer, talar detta om för kmidiff var de separata felsökningsinformationsfilerna finns.
Observera att di-path måste peka på rotkatalogen under vilken felsökningsinformationen är ordnad på ett trädliknande sätt.
På Red Hat-baserade system är den katalogen vanligen <root>/usr/lib/debug.
  • --debug-info-dir2 | --d2 <di-path2>
Likt --debug-info-dir1 talar denna option om för kmidiff var den utdelade felsökningsinformationen för binärerna i den andra Linux-kärnan finns.
  • --vmlinux1 | --l1 <path-to-first-vmlinux>
Sätter sökvägen till den första vmlinux-binären som ska beaktas.
Detta måste vara den okomprimerade vmlinux-binären kompilerad med debug info.
  • --vmlinux2 | --l2 <path-to-first-vmlinux>
Sätter sökvägen till den andra vmlinux-binären som ska beaktas.
Detta måste vara den okomprimerade vmlinux-binären kompilerad med debug info.
  • --kmi-whitelist | -w <path-to-interface-whitelist>
Sätt sökvägen till white list över gränssnitt att jämföra medan Kernel Module Interface för den första kärnan jämförs mot den för den andra kärnan.
Om denna option inte tillhandahålls jämförs alla exporterade gränssnitt för de två kärnorna.
Det tar mycket tid och är inte nödvändigtvis meningsfullt eftersom många gränssnitt sannolikt är avsedda att se sina nåbara typer förändras.
Se därför till att alltid använda denna option om du inte verkligen vet vad du gör.
  • --suppressions | --suppr <path-to-suppressions>
Använd en suppression specification-fil placerad på path-to-suppressions.
Observera att denna option kan förekomma flera gånger på kommandoraden.
I så fall tas alla tillhandahållna suppression specification-filer med i beräkningen.
Observera att om denna option inte tillhandahålls, läses som standard default suppression specification files in.
  • --no-change-categorization | -x
Denna option inaktiverar kategoriseringen av ändringar i ofarliga och skadliga ändringar.
Observera att denna kategorisering är en förutsättning för filtreringen av ändringar, så denna option inaktiverar den filtreringen.
Målet med denna option är att snabba upp körningen av programmet för fall där grafen över ändringar är enorm och där användaren bara är intresserad av att titta på exempelvis lövnodsändringar utan att bry sig om deras möjliga påverkan på gränssnitt.
  • --ctf
Extrahera ABI-information från CTF-felsökningsinformation, om den finns, i kärnan och modulerna.
  • --btf
Extrahera ABI-information från BTF-felsökningsinformation, om den finns, i kärnan och modulerna.
  • --impacted-interfaces | -i
Tala om vilka gränssnitt som påverkades av varje enskild ABI-ändring.
  • --full-impact | -f
Skapa en ändringsrapport som visar den fullständiga påverkan av varje ändring på exporterade gränssnitt.
Detta är standardtypen av rapport som skapas av verktyg som abidiff eller abipkgdiff.
  • --exported-interfaces-only
När denna option används analyserar detta verktyg beskrivningarna av de typer som kan nås av gränssnitten, funktioner och variabler, associerade med ELF-symboler som är definierade och exporterade av Linux-kärnan.
Annars har verktyget också förmågan att analysera beskrivningarna av typerna som kan nås av gränssnitten associerade med ELF-symboler som är synliga utanför sin översättningsenhet.
Den senare möjligheten är dock mycket mer resursintensiv och leder till mycket långsammare operationer.
Det är därför denna option är aktiverad som standard.
  • --allow-non-exported-interfaces
När denna option används analyserar detta verktyg beskrivningarna av de typer som kan nås av gränssnitten, funktioner och variabler, som är synliga utanför sin översättningsenhet.
När den analysen är gjord konstrueras ett ABI Corpus genom att endast beakta delmängden av typer som kan nås från gränssnitt associerade med ELF-symboler som är definierade och exporterade av binären.
Det är detta slutliga ABI-korpus som jämförs mot ett annat.
Problemet med detta tillvägagångssätt är dock att analys av alla gränssnitt som är synliga från utsidan av sin översättningsenhet kan uppgå till mycket data, vilket leder till mycket långsamma operationer.
Observera att denna option är avstängd som standard.
  • --show-bytes
Visa storlekar och offset i byte, inte bitar.
Denna option är aktiverad som standard.
  • --show-bits
Visa storlekar och offset i bitar, inte byte.
Som standard visas storlekar och offset i byte.
  • --show-hex
Visa storlekar och offset med hexadecimal bas.
Denna option är aktiverad som standard.
  • --show-dec
Visa storlekar och offset med decimal bas.

FÖRFATTARE

Dodji Seketeli

UPPHOVSRÄTT

2014-2025, Red Hat, Inc.

KOLOFON

Denna sida är en del av projektet libabigail, ABI Generic Analysis and Instrumentation Library.

Information om projektet finns på:

https://sourceware.org/libabigail/

Om du har en felrapport för denna manualsida, se:

http://sourceware.org/bugzilla/enter_bug.cgi?product=libabigail

Denna sida hämtades från projektets uppströms Git-förråd:

git://sourceware.org/git/libabigail.git

den 24 maj 2026.

Vid den tidpunkten var datumet för den senaste commit som hittades i förrådet 30 april 2026.

Om du upptäcker renderingsproblem i denna HTML-version av sidan, eller om du anser att det finns en bättre eller mer aktuell källa för sidan, eller om du har rättelser eller förbättringar av informationen i denna KOLOFON, som inte är en del av den ursprungliga manualsidan, skicka e-post till:

man-pages@man7.org


Sidslut

Orginalhemsidan på Engelska https://man7.org/linux/man-pages/man1/kmidiff.1.html Det här är en maskinöversättning av Linux man sidor till svenska. Om du hittar fel är vi tacksamma om du rapporterar dem via formuläret som finns på https://www.linux.se/kontaka-linux-se/

Tack till Datorservice som har sponsrat Linux.se med webbhotell.