Nyheter i Android, Telefoner, Prylar Och Recensioner

Linux Kernel Modifiering: Lägg till nya systemanrop

När behovet uppstår för att skapa ett kraftfullt och pålitligt Linuxbaserat system (vare sig det är för att underhålla systemprocesser eller webbhotell etc.), då blir det nödvändigt att konfigurera systemkärnan på ett sådant sätt att hela systemet fungerar. mer effektivt och tillförlitligt.

Dessutom förenklas konfigurationsprocessen för Linux-kärnan genom tillgången på Linux-kod, så vem som helst kan ladda ner Linux-kärnans källkod och använda den.

I det här inlägget hjälper vi dig att förstå några allmänna aspekter av att konfigurera Linux-kärnan och hur du lägger till ett nytt systemanrop. Vi får se.

Konfigurerbara kärnparametrar

Linux-systemkärnan har utvecklats på ett sådant sätt att det är ganska enkelt att anpassa den efter de nödvändiga driftsförhållandena och hårdvarumiljön (ungefär som allt annat i UNIX- och Linux-system).

Dessutom tillåter Linuxs flexibilitet dig att konfigurera dess kärna så att systemadministratörer kan ändra parametrar när som helst.

För att utföra denna uppgift finns det ett speciellt gränssnitt som stöder datakanaler mellan kärnan och program på användarnivå. Det är genom dessa kanaler som instruktioner för inställning av värden för kärnparametrar skickas.

1. Installera nödvändiga paket

Först måste du se till att ditt system har alla nödvändiga paket för att bygga kärnan. Annars måste du installera de saknade.

För att göra detta, kör kommandot:

sudo apt install libncurses-dev libncurses dwarves build-essential gcc bc bison flex libssl-dev libelf-dev
2. Skaffa kärnkällor

De bästa källorna erhålls från din distributionskitsida (om tillgänglig) eller från kärnans officiella webbplats: kernel.org. Så välj en version, gå till kernel.org och ladda ner de nödvändiga tarball-källorna.

Filen som erhålls från den officiella webbplatsen måste packas upp. För att göra detta, gå till din nedladdningsmappen och kör kommandot unzip :

cd ~ / Downloads(the folder you downloaded the archive to) / tar xvf linux *

Så du behöver gå till mappen med de uppackade kärnkällorna. För version 5.14.14 kommer kommandot att se ut så här:

cd linux-5.13.7/
3. Aktuell kärnkonfiguration

Ta den nuvarande kärnkonfigurationen och använd den som grund för att bygga en ny. Du kan återställa sådana inställningar med kommandot:

zcat /proc/config.gz > .config

Kärnkonfigurationen är finns i /boot-mappen, i en fil som heter och kärnversion. För att kopiera konfigurationsfilen till källmappen, kör följande kommando:

cp /boot/config-(version)-generic .config
4. Automatisk konfiguration

Den resulterande konfigurationen måste uppdateras till det aktuella kärntillståndet. Nyare kärnversioner lägger vanligtvis till nya alternativ som inte redan är tillgängliga i din distributions kärnkonfiguration.

Relaterad  Realme kommer att presentera den nya budgetsmartklockan Dizo Watch R och hörlurarna Dizo Buds Z Pro i början av januari

han Kommandot localmodulesconfig kan användas för att optimera denna process. eftersom det är det enklaste sättet att skapa en Linux-kärna för din hårdvara. Kontrollerar vilka kärnmoduler som för närvarande är inlästa och lämnar endast dessa moduler aktiverade, samtidigt som alla andra är inaktiverade.

För att köra skriptet localmodulesconfig, använd följande kommando:

make localmodulesconfig

Skapa ett systemsamtal

Så öppna en kommandoterminal och använd nano editor, skapa en ny typ C-fil så här:

nano exp.c 

Skriv nu alla följande C-koder i editorn:

#include<stdio.h>
#include<unistd.h>
#include<stdlib.h>
int main(int argc, char *argv[]) {
printf("PID of somefile.r = %d\n", getpid());
Char *args[] = {"First", "Second", "Third", Null};
execv("./justfile", args);
return 0;
}

När detta är gjort kommer din huvudfunktion att skapas. Här visar Printf filens strängdata och process-PID.

Så vi har en rad argument.[] teckentyper med vissa värden i dem. Exec-systemanropet används för att ta filnamnet och den föregående enradsmatrisen som ett argument. Skapa ytterligare en c-fil med nanoredigeraren.

Ange koden i den:

#include<stdio.h> 
#include<unistd.h>
#include<stdlib.h>
int main(int argc, char *argv[]) {
printf("Pid of justfile.r = %d\n", getpid());
return 0;
}

Låt oss nu kompilera båda filerna med hjälp av GNU-kompilatorsamlingen:

gcc –o somefile somefile.r
gcc –o justfile justfile.r

När vi kör filen genererar den den första utskriftssatsen för filen och båda utskriftsraderna, som du kan se nedan:

./somefile
PID of somefile.r = 2602
PID of justfile.r = 2602