ucunbiri Mesaj tarihi: Nisan 12, 2009 Mesaj tarihi: Nisan 12, 2009 slmlar öncelikle herkese, operating systems dersi ile ilgili bir projem var ve yeni bir system call yazmam gerekiyor, ben de öncesinde hani nedir ne değildir diye internette mvcut olan örneklerden birisini denedim: 7.1 KERNEL SPACE HEADER #ifndef __LINUX_MYROUTINE_H #define __LINUX_MYROUTINE_H #include #endif //store it in linux directory under kernel include directory 7.2 KERNEL SPACE SOURCE #include asmlinkage int sys_myroutine(int arg1,int arg2){ return arg1+arg2; } //store under fs directory of kernel sourse and change make file under fs to add myroutine.c compiled 7.3 USER SPACE HEADER #include _syscall2(int, myroutine, int, arg1, int , arg2) //store it under linux directory of user space include directory buraya kadar sorun yok düzgün bir şekilde yazıyorum ve kerneli recompile ediyorum sırasıyla; make dep,make clean,make bzImage,make modules,make modules_install ve ardından make boot la reboot da ediyorum ama basit bir programla test etmeye kalktığımda ki program da şu: 7.4 SAMPLE PROGRAM #include main(){ int sum; sum=myroutine(10,10); printf("%d",sum); } //you should get 20 printed sonuç olarak 20 değil -1 dönüyor, ki internette biraz kurcalayınca bunun entry.S ve hem kernel hem de user level unistd.h dosyalarında tanımlanmadığı için olabileceğini gördüm. iki tarafta da doğru system call numaralarıyla tanımlılar o numarada 259 yani bunla ilgili bir sorun da olamaz kernel 2.4.20-8 kullanıyorum onun da 265e kadar tanımlı. sizce bu -1 in sebebi ne olabilir, ne atlıyorum?
ucunbiri Mesaj tarihi: Nisan 12, 2009 Konuyu açan Mesaj tarihi: Nisan 12, 2009 yok mu yahu fikri olan :(
Anason Mesaj tarihi: Nisan 12, 2009 Mesaj tarihi: Nisan 12, 2009 sample programini -S komutuyla derleyin ciktisini buraya yapistirirmisin. kisisel olarak ilk tahminim yanlis sistem cagrisi numarasi yuzunden oluyor, ayrica perror() fonksiyonunuda ekle hemen altina, perror("sebep : "); gibi.
Anason Mesaj tarihi: Nisan 12, 2009 Mesaj tarihi: Nisan 12, 2009 perror'u senin fonksiyondan hemen sonra ekle ama, printf den once yani. bide sample programini -S ile derleyince, sample.s olusucak. gereksin yerleri silebilirsin.
Anason Mesaj tarihi: Nisan 12, 2009 Mesaj tarihi: Nisan 12, 2009 ya aslinda dusundumde, o .s uzantili dosyanda pushl $10 pushl $10 call myroutine gibi satirlar varsa hic buraya koyma. ogrenmek istedigim kac numarali sistem cagirisini kullandigiydi programin.
ucunbiri Mesaj tarihi: Nisan 12, 2009 Konuyu açan Mesaj tarihi: Nisan 12, 2009 Anason said: sample programini -S komutuyla derleyin ciktisini buraya yapistirirmisin. kisisel olarak ilk tahminim yanlis sistem cagrisi numarasi yuzunden oluyor, ayrica perror() fonksiyonunuda ekle hemen altina, perror("sebep : "); gibi. okuldaki bilgisayardan yollicam abi yarın
Anason Mesaj tarihi: Nisan 12, 2009 Mesaj tarihi: Nisan 12, 2009 birde kontrol etmek amacli, entry.S ve unistd.h daki ilgili satirlari koyarsan guzel olur.
bonesoul Mesaj tarihi: Nisan 13, 2009 Mesaj tarihi: Nisan 13, 2009 strace ile geriye doğru incelemelisin. http://linux.die.net/man/1/strace In the simplest case strace runs the specified command until it exits. It intercepts and records the system calls which are called by a process and the signals which are received by a process. The name of each system call, its arguments and its return value are printed on standard error or to the file specified with the -o option.
Anason Mesaj tarihi: Nisan 13, 2009 Mesaj tarihi: Nisan 13, 2009 strace guzel bayagi tool ama burda sorun cekirdek seviyesinde oldugu icin pek bi anlami olmayabilir. yani strace'in ciktisi my_routine(10,10) = -1 gibi gozukur tahminim.
ucunbiri Mesaj tarihi: Nisan 13, 2009 Konuyu açan Mesaj tarihi: Nisan 13, 2009 ya hala -1 almaya devam ediyorum perror la hatayı bastırınca da function not implemented diyo kafayı yemek üereyim
bonesoul Mesaj tarihi: Nisan 15, 2009 Mesaj tarihi: Nisan 15, 2009 http://www.ibm.com/developerworks/aix/library/au-unix-strace.html
Öne çıkan mesajlar