Maison >Tutoriel système >Linux >Une plongée approfondie dans les appels système Linux : nouvel appel système pour créer un numéro et l'imprimer
Table des matières
1. Objectif et exigences de conception
2. Concevoir du contenu
3. Équipement et environnement
4. Pensée conceptuelle
5. Principales structures et processus de données
6. Résultats des tests expérimentaux et analyse des résultats
7. Résumé de la conception du cours
Pièce jointe 1 Dossier de soutenance de conception de cours
Liste des programmes sources de la pièce jointe 2
1. Objectif et exigences de conception
Ce cours est conçu pour permettre aux collégiens de comprendre les principes de mise en œuvre des appels système Linux, de maîtriser comment modifier le code source du noyau Linux et comment compiler des programmes appelants pour appeler de nouveaux appels système. Les collégiens doivent suivre ce cours de manière indépendante et comprendre le concept et la mise en œuvre des appels système.
2. Concevoir du contenu
À l'aide de la méthode du noyau compiléPrincipes du système d'exploitation et expériences du système Linux, recompilez le noyau Linux et réduisez un appel système sous Linux.
Exigences : (1) Fonction implémentée par appel système : estimer le cube d'un nombre et le copier. (2) Écrivez un autre programme à appeler.
3. Équipement et environnement
Appareil : VMware Workstation Pro
Environnement : Ubantu15.0.2
Image : ubuntu-16.04-desktop-amd64.iso
4. Pensée de conception 4.1 Idée de conception
Modifiez le noyau Linux et abaissez un nouvel appel système pour implémenter la fonction d'estimation du cube d'un nombre et de sa copie, y compris le téléchargement du code source du noyau Linux, la modification, la compilation du noyau Linux modifié et son installation dans le système, Écrivez un programme qui appelle ce nouvel appel système.
4.2 Principales étapes
(1) Afficher le noyau d'origine :
(2)Téléchargez le nouveau noyau :
wgetPrincipes du système d'exploitation et expérience du système LinuxTransplantation Linux, puis appuyez sur Entrée. Le résultat est comme indiqué
(3) Connect the downloaded installation package to the /usr/src directory, and then unzip it. Enter the following command in the terminal, and the result is as shown
mvlinux-5.6.15.tar.gz/usr/src
cd/usr/src
tar-xvflinux-5.6.15.tar.gz
(4) Download the super editor vim (already downloaded before). I have already downloaded it here. If it is not downloaded, you can use sudoapt-get-yinstallvim to download it
(5) New system call:
Add calling function declaration: viminclude/linux/syscalls.h
Add asmlinkagelongsys_cube(intnum);
before #ifndefNote: i enters the editing mode, after adding, Esc returns to linux transplantation, and finally shift+: hit wq to save and exit.
(6) Add the calling function definition, enter vimkernel/sys.c, and add the function at the end of the article
SYSCALL_DEFINE1(cube,int,num){
intresult=numnumnum;
printk(“Theresultis%d.n”,result);
returnresult;
(7)Add system call number
Enter vimarch/x86/entry/syscalls/syscall_64.tbl and add 439 items in the syscall_64.tbl file
(8) Install the dependency packages required to compile the kernel:
apt-get -y install make apt-get -y install libncurses5-dev apt-get -y install flex apt-get -y install bison apt-get -y install libssl-dev apt-get -y install libelf-dev
(9) Configure the kernel
Enter makemenuconfig and execute [Save]->[Ok]->[Exit]->[Exit] in the pop-up interface
(10)Compile
Type make-j8 in [Terminal] (8 threads start compilation), it will take about an hour, and the compilation is completed as shown in the picture
Type the makemodules and makemodules_install commands to complete the compilation and installation of the module respectively.
(11)Install kernel
【Terminal】Input makeinstall
(12)Restart the system
[Terminal] Enter uname-r to check the kernel version. As shown in the picture, the kernel has been recompiled
Compile calling program:
Exit after saving, and execute gcctest.c-otest.out and ./test.out in [Terminal] to get the test results
5. Main data structures and processes
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!