-1
Ceci est mon premier noyau et dans mon exemple de programme ci-dessous, j'ai créé un proc/système de fichiers simple. Je vois READ est appelé 3 fois chaque fois que je chat le noyau. Vous vous demandez pourquoi il le fait./proc/filesystem read est appelé trois fois
Sortie et le code est ci-dessous.
cat /proc/myKernel
dmesg | grep -i myKernel
myKernel: Read (/proc/myKernel) called
myKernel: Read (/proc/myKernel) called
myKernel: Read (/proc/myKernel) called
int myKernel_read(char *buffer, char **bufferLocation, off_t offset, int bufferLength, int *eof, void *data)
{
int ret = 0;
u64 msrvalue;
printk(KERN_INFO "myKernel: Read (/proc/%s) called\n", procFile_name);
ret = sprintf(buffer, "Hello World\n");
return ret;
}
static int __init myKernel_init(void)
{
entry = create_proc_entry(procFile_name, 0644, NULL);
if(!entry)
printk(KERN_INFO "myKernel: error registering proc control file\n");
else
{
entry->read_proc = myKernel_read;
}
return 0;
}
Avez-vous essayé de lire le code source 'cat'? –
Eh bien, vous retournez des ordures (variable 'ret' non initialisée) de votre fonction' myKernel_read', ce qui signifie que vous n'avez aucune idée de ce que ça retourne. Je suppose que vous ne remplissez pas certains des paramètres de sortie que vous êtes censé remplir (comme '* eof'). Essayez de régler cela et de voir ce qui se passe. Si cela se produit toujours, essayez de consigner les paramètres importants dans 'myKernel_read' comme' offset' afin de vous donner une meilleure idée de ce qui se passe. Enfin, que signifie "Ceci est mon premier noyau"? – Celada
mon mauvais. En copiant le texte sélectionné, je n'ai pas inclus la ligne de code de remplissage du tampon. Je vois encore trois messages de débogage (dnesg | grep myKernel) – RedFox