L'ajout de nouveau Appel Système à Noyau Linux 3.13 sur système 64 bits
J'essaye d'ajouter un simple helloworld
Système d'Appel à kernel 3.13.0-37-generic
sur système 64 bits.
Je vais essayer de montrer ce que j'ai fait jusqu'à présent, étape par étape :
1 - j'ai téléchargé les sources du noyau par :
sudo apt-get source linux-image-3.13.0-37-generic
Après cela, les sources du noyau fichiers extraits à /usr/src/
2 - Définir un nouveau système d'appel sys_hello()
:
J'ai créé un répertoire avec hello
nom dans le répertoire des sources du noyau dans /usr/src/linux-3.13/
Et j'ai créé un hello.c
fichier dans hello
répertoire avec le contenu ci-dessous :
#include <linux/kernel.h>
asmlinkage long sys_hello(void)
{
printk(“Hello world\n”);
return 0;
}
Puis j'ai créé un Makefile
dans le bonjour répertoire avec le contenu suivant :
obj-y := hello.o
3 - Ajouter le bonjour répertoire du noyau Makefile
J'ai changé de ligne suivante dans /usr/src/linux-3.13/Makefile
:
core-y += kernel/mm/fs/ipc/security/crypto/block/
:
core-y += kernel/mm/fs/ipc/security/crypto/block/hello/
4 - Ajouter le nouveau système d'appel sys_hello()
dans la table des appels systèmes (syscall_64.tbl)
Parce que je suis en utilisant le système 64 bits, j'ai besoin de modifier le syscall_64.tbl
fichier :
/usr/src/linux-3.13/arch/x86/syscalls/syscall_64.tbl
Ajouté la ligne suivante à la fin du fichier :
-Dernier numéro de la ligne a été 313
314 common hello sys_hello
5 - Ajouter le nouveau système d'appel sys_hello()
dans le système d'appel d'en-tête de fichier
vim /usr/src/linux-3.13/include/linux/syscalls.h
J'ai ajouté la ligne suivante à la fin du fichier, juste avant le #endif déclaration au bas de l'écran :
asmlinkage long sys_hello(void);
6 - Compilation du noyau sur mon système
Pour configurer le noyau, j'ai essayé la commande suivante :
sudo make menuconfig
Après la commande ci-dessus une fenêtre pop-up est venu et j'ai fait en sorte que ext4
a été sélectionné, puis save
.
Alors :
# cd /usr/src/linux-3.13/
# make
Il y 2~3 heures.
Après que :
# make modules_install install
Après cela, j'ai redémarré mon système.
7 - Test de l'appel système (le Problème Est Ici)
Après le redémarrage, j'ai créé un fichier avec le nom hello.c
dans le dossier d'accueil avec le contenu suivant :
#include <stdio.h>
#include <linux/kernel.h>
#include <sys/syscall.h>
#include <unistd.h>
int main()
{
long int amma = syscall(314); //314 is the number of sys_hello line in `syscall_64.tbl`
printf(“System call sys_hello returned %ld\n”, amma);
return 0;
}
Alors :
# gcc hello.c
# ./a.out
La sortie est :
System call sys_hello returned -1
Problème est exactement -1
. Il doit retourner 0
pas -1
.
Semble sys_hello
n'est pas ajouté au Noyau du Système d'Appel.
Ce que je fais mal?
Je ne peux pas la comprendre par
uname
cause avant/après le noyau est le même (les Deux sont kernel 3.13.0-37-generic
).Il n'y a pas de log dans
dmesg
liées à sys_hello
appel système !Ne de votre sortie du noyau comprennent quand il a été construit? Je n'étais pas suggérer que vous y chercher des preuves de votre fonction, mais plutôt la preuve que vous êtes en fait en cours d'exécution de votre nouvelle construction. Ensuite séparément de faire quelques vérifications pour voir si votre nouvelle construction récupéré votre code.
Apprendre
make-kpkg
de construire un noyau, et passer -j 4
à make-kpkg
ou à make
lors de sa construction.OriginalL'auteur Hamed Kamrava | 2014-11-03
Vous devez vous connecter pour publier un commentaire.
Le problème a été à partir de l'étape 6 à la dernière étape (la Compilation du Noyau).
Après l'étape 5, nous avons à faire, comme suit :
6 - Compilation du noyau sur mon système
Pour configurer le noyau, j'ai essayé la commande suivante :
Après la commande ci-dessus une fenêtre pop-up est venu et j'ai fait en sorte que ext4 a été sélectionné, puis enregistrer.
Puis de créer
DEB
fichier à partir d'un nouveau noyau, nous avons :Il va créer un peu de
deb
fichiers dans/usr/src/
.Après cela, nous avons besoin de les installer :
Il va installer le nouveau noyau sur votre système.
Maintenant, redémarrez votre système. Après que le système a redémarré, vous pouvez déterminer si le nouveau noyau est installé ou pas :
Et si vous voulez savoir votre nouveau Système d'Appel a ajouté à noyau ou pas il suffit de taper :
Dans mon cas :
Sortie suivante indique que votre Système d'Appel avec succès ajoutés au Noyau :
OriginalL'auteur Hamed Kamrava