Expérience du système d'exploitation | Implémentation des appels système Linux

Préface

Je n'ai pas appris le système d'exploitation pendant un semestre. Quand j'ai vraiment pensé à rattraper les expériences que je devais, j'ai réalisé que c'était vraiment une torture. J'ai fait des erreurs six ou sept fois, alors j'ai soudain eu l'idée d'enregistrer le système d'exploitation. tout le processus expérimental. Que cette expérience au moins ne soit pas complètement infructueuse.

01 Contenu de l'expérience

  • Compilation complète du noyau
  • Effectuer un appel système

02 Environnement expérimental

  • VMware Workstation Pro 16
  • Ubuntu 20.04 LTS
  • Noyau Linux 5.10.2

Pour installer Ubuntu sur VMware, veuillez vous référer à : Lien du didacticiel

Essayez de tout télécharger depuis le site officiel. L'échec de plusieurs de mes expériences était dû à des problèmes avec les images que j'avais téléchargées depuis d'autres chaînes. C'était vraiment une torture.

Et essayez d'allouer 55 Go de mémoire lors de la sélection de l'espace de stockage au début
1) Pour éviter un échec de compilation dû à un espace insuffisant lors de la compilation ultérieure
2) Si vous n'allouez pas suffisamment de mémoire au début, il sera très difficile de la réaffecter après le l'installation est terminée (ne demandez pas Comment puis-je le savoir ? Au final j'ai choisi de désinstaller et de réinstaller :)

N'oubliez pas de modifier les paramètres après l'installation
Insérer la description de l'image ici

03 Remplacer les sources domestiques

La source par défaut est une source externe et l'accès domestique est très lent, voire indisponible du tout, nous l'avons donc remplacé par une source domestique avant l'expérience.

Sauvegarder la source originale

sudo cp /etc/apt/sources.list /etc/apt/sources.list.bak

Fichier open source

sudo gedit /etc/apt/sources.list

Modifier vers la source miroir de version correspondante

Généralement, nous choisirons la source Alibaba ou la source Tsinghua pour les sources d'images nationales (l'auteur a utilisé la source Alibaba pendant l'expérience, ce qui sera plus rapide.

Aliyuan 20.04 LTS

deb http://mirrors.aliyun.com/ubuntu/ focal main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ focal main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ focal-security main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ focal-security main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ focal-updates main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ focal-updates main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ focal-proposed main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ focal-proposed main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ focal-backports main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ focal-backports main restricted universe multiverse

Tsinghuayuan 20.04LTS

# 默认注释了源码镜像以提高 apt update 速度,如有需要可自行取消注释
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal main restricted universe multiverse
# deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal main restricted universe multiverse
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal-updates main restricted universe multiverse
# deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal-updates main restricted universe multiverse
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal-backports main restricted universe multiverse
# deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal-backports main restricted universe multiverse
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal-security main restricted universe multiverse
# deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal-security main restricted universe multiverse

Changer de source

renouveler

sudo apt-get update 
sudo apt-get upgrade

04 Installer les dépendances nécessaires à la compilation

Je n'ai eu aucun problème lors de cette étape d'installation. Après avoir lu quelques informations sur Internet, si une erreur est signalée à cette étape, il se peut que la version de la source de l'image précédente ne corresponde pas à la version du système.

sudo apt-get install libc6-dev
sudo apt-get install libelf-dev
sudo apt-get install libncurses5-dev libssl-dev
sudo apt-get install build-essential openssl
sudo apt-get install libidn11-dev libidn11
sudo apt-get install zlibc minizip
sudo apt-get install bison
sudo apt-get install flex
sudo apt-get install pkg-config

05 Récupérer le code source du noyau

Afficher le noyau actuellement utilisé

uname -r (查看当前内核版本
dpkg --get-selections | grep linux(查看所有相关配置文件

Généralement, choisissez un noyau supérieur à la version par défaut actuelle. Le code source du noyau peut être téléchargé sur le site officiel . La version que j'ai choisie est : Linux Kernel 5.10.2 (on dit que cette version a moins de problèmes.

Enregistrez le package d'installation dans un certain répertoire, puis faites un clic droit dans ce répertoire pour ouvrir un terminal et entrez la commande pour obtenir les autorisations (si vous avez déjà obtenu les autorisations, entrez-la plus tard sous root, sans ajouter sudo

sudo su

décompresser

tar -xavf  linux-5.10.2.tar.xz

06 Ajouter des appels système personnalisés

Tout d’abord, entrez dans le répertoire où se trouve le code source décompressé du noyau.

cd linux-5.10.2

Ouvrez le fichier syscall_64.tbl avec le numéro d'appel système personnalisé et ajoutez l'appel système personnalisé après le dernier appel système commun.

sudo gedit arch/x86/entry/syscalls/syscall_64.tbl

Ajout personnalisé

07 Ajouter une déclaration et une définition de fonction

Ouvrez le fichier syscalls.h

sudo gedit include/linux/syscalls.h

Ajouter une déclaration de fonction à la fin

/*mq's syscall */
asmlinkage long sys_mysyscall(int number);

Ajouter une déclaration de fonction
Ouvrez le fichier sys.c

sudo gedit kernel/sys.c

Ajouter une définition de fonction à la fin

/*mq's syscall */
SYSCALL_DEFINE1(mysyscall,int,number)
{
        printk("mysyscall\n");
        printk("The Number You Enter Is %d\n",number);
        return number;
}

Ajouter une définition de fonction

08 Compiler le noyau

Nettoyer les fichiers du noyau

sudo make mrproper

Supprimer divers fichiers de compilation, fichiers de configuration et divers fichiers de sauvegarde

sudo make clean

Sélectionnez automatiquement la portée de la compilation en fonction des modules chargés dans le noyau (gain de temps par rapport à make meunconfig), appuyez jusqu'au bout sur Entrée et OK

make localmodconfig

Modifier le fichier de configuration (gros gouffre !!

Entrez d'abord le fichier de configuration, puis appuyez sur Ctrl+F pour rechercher CONFIG_SYSTEM_TRUSTED_KEYS et définissez-le sur vide
. Si toutes les sélections de processus sont cohérentes avec l'auteur, alors ce paramètre dans le fichier .config est initialement défini sur vide.

sudo gedit .config

Modifier le fichier de configuration
Compilation (le nombre derrière correspond au nombre de cœurs utilisés et au nombre de cœurs utilisés)

sudo make -j8

Le dernier dossier compilé est sound, qui peut être utilisé pour déterminer si le processus de compilation est terminé à mi-chemin.

Insérer la description de l'image ici

Réinitialisez le noyau (j'ai échoué plusieurs fois à cette étape. Si cette étape échoue, vérifiez ce que vous avez fait de mal lors du processus précédent !

sudo make modules_install
sudo make install

Insérer la description de l'image ici

09 Vérification

Redémarrage

reboot

Vérifiez la version actuelle du noyau . S'il s'agit de la version du noyau qui vient d'être compilée, l'expérience est réussie.

uname -r

Redémarrage

Vérifier les appels système ajoutés

  • Ouvrez l'éditeur et écrivez un programme C
sudo gedit test.c
#include <linux/kernel.h>
#include <sys/syscall.h>
#include <unistd.h>
#include <stdio.h>

int main(int argc,char **argv)
{
        //441:long sys_mysyscall(int)
        long temp;
        temp = syscall(441,1314);
        printf("mysyscall return %ld\n",temp);
        return 0;
}
  • Enregistrez, quittez et exécutez
sudo gcc -o test test.c
sudo ./test
  • La sortie 1314 est un succès

sortir

10 PS—Suppression du noyau

Il y a eu quelques expériences où je voulais changer la version du noyau à mi-chemin, j'ai donc désinstallé la machine virtuelle et l'ai réinstallée. Plus tard, j'ai découvert que je pouvais simplement supprimer le noyau... Je viens de Chubby.

Afficher tous les fichiers du noyau

 dpkg --get-selections | grep linux

Désinstaller (le fichier installé est suivi du mot installer, et après l'avoir désinstallé, il est désinstallé

sudo apt-get remove + 文件名

Supprimer les fichiers de configuration (nettoyage plus complet

sudo apt-get purge

renouveler

sudo update-grub

Épilogue

Quoi qu'il en soit, l'expérience a finalement réussi = =. Les étapes des expériences suivantes étaient évidemment exactement les mêmes mais il y avait toujours des problèmes (tellement bizarre !!), et puis j'ai juste changé pour une version miroir (encore plus bizarre orz), donc l'ordinateur c'est vraiment de la métaphysique (j'en suis sûr).

Je suppose que tu aimes

Origine blog.csdn.net/manpi/article/details/117526896
conseillé
Classement