Avatar billede adams Nybegynder
13. marts 2002 - 18:36 Der er 2 kommentarer og
1 løsning

nyt systemkald i linux (200 point)

Hvordan laves en header-fil, så jeg ikke behøver at skrive _syscall2(...) i selve testprogrammet testafkald.c?

På siden http://fossil.wpi.edu/docs/howto_add_systemcall.html har jeg fundet en vejlieding til at gøre dette. (Se den)

Jeg har således lavet følgende:
I filen linux/arch/i386/kernel/entry.S har jeg tilføjet:

.long SYMBOL_NAME(sys_pedagogictime)        /* 191 */

I filen linux/include/asm/unistd.h har jeg tilføjet:

#define __NR_pedagogictime          191

Jeg har lavet ny fil linux/include/linux/pedagogictime.h:

#ifndef __LINUX_PEDAGOGICTIME_H
#define __LINUX_PEDAGOGICTIME_H
   
#include <linux/unistd.h>
#include <linux/linkage.h>

_syscall2(int, pedagogictime, int, arg1, int, arg2);

#endif

Jeg har lavet ny fil linux/kernel/pedagogictime.c:

#include <linux/pedagogictime.h>
#include <linux/kernel.h>
   
asmlinkage int sys_pedagogictime (int arg1, int arg2)
{
  printk("HELLO WORD!\n");
  return(1);
}

Jeg har i filen linux/kernel/Makefile tilføjet pedagogictime.o det rigtige sted:

O_OBJS = ... pedagogictime.o

Jeg kunne så uden problemer kompelere linux-kernen med:
make clean
make dep
make
make bzImage

Jeg fik så lavet et fungerende (!!!) testprogram testafkald.c i c, som kunne compeleres med gcc:

#include <linux/unistd.h>
#include <linux/kernel.h> // ikke sikker skal bruges
#include <sys/time.h> // ikke sikker skal bruges

void main( ){
_syscall2(int, pedagogictime, int, arg1, int, arg2);

pedagogictime(1,1);
pedagogictime(0,0);
}

Jeg fik følgende output:
HELLO WORD!
HELLO WORD!

Men det var jo IKKE mening, at _syscall2(...) skull være i denne fil. Så jeg ændrede testafkald.c til:

#include <linux/unistd.h>
#include <linux/pedagogictime.h>
#include <linux/kernel.h> // ikke sikker skal bruges
#include <sys/time.h> // ikke sikker skal bruges

void main(){
pedagogictime(1,1);
pedagogictime(0,0);
}

Jeg fik en fejl om at linux/pedagogictime.h ikke kunne findes. Den samme fejl fik jeg med <pedagogictime.h> i stedet for <linux/pedagogictime.h>. Hvis jeg ikke skrev <...pedagogictime.c> fik jeg en fejl om at kaldet pedagogictime ikke kunne genkendes.

Hvad gør jeg galt???
Avatar billede peter_m Nybegynder
14. marts 2002 - 09:06 #1
Har du prøvet at flytte din header fil i /usr/include/linux etc. ??
Avatar billede adams Nybegynder
15. marts 2002 - 00:02 #2
Peter du er for ... :o), det hele virker helt fint nu !!!

Lav lige et svar i stedet for kommentar så jeg kan give dig de 200 point.

Det kan godt virke lidt sjovt at der skulle så lidt til, men da opgaven er en haste-sag er jeg kun glad, at jeg fik et brugbart svar så hurtigt. :o)
Avatar billede peter_m Nybegynder
15. marts 2002 - 10:52 #3
svar
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester