2011-05-14 12 views
14

Çekirdek 2.6.38-5 sürümünü indirdim ve sistem çağrısı eklemek istiyorum. yaptım şu:Sistem çağrısı eklenirken hatalı adres

  1. ben sistem çağrı tablosuna benim sistem çağrısı eklemiş;

    <src folder>/arc/x86/kernel/syscall_table_32.S 
    
    .long sys_mycall 
    
  2. Sistem çağrı numarasını ekledim;

    <src folder>/include/asm-generic/unistd.h 
    
    #define __NR_mycall 244 
    __SYSCALL(__NR_mycall, sys_mycall) 
    
  3. Ben syscalls.h için prototip eklemiş;

    <src follder>/include/linux/syscalls.h 
    
    asmlinkage long sys_mycall(long input); 
    
  4. Ve, işte benim sistem çağrısı;

    asmlinkage long sys_mycall(long input) { 
        return (input * 2); 
    } 
    
  5. Ben de Makefiles düzenledim. Ben syscall() aracılığıyla kullandığınızda

Şimdi derleme sonra, 14'e

errno sette ne yapmalıyım ile bana BAD ADDRESS veriyor?

+4

+1, tatmin edici bir açıklamaya ve probleminizin minimum bilgisine sahip olduğunuz için sizi kutlarız. Buraya gelen yeni insanların çok düşük seviyeli şeyler hakkında çok geniş sorular sorduğunu düşünemezsiniz. – zneak

cevap

5

, sistem çağrı numarası 244 zaten struct user_desc ilk argüman olarak bir işaretçi aldığı, get_thread_area() tarafından alınır Bunu bir işaretçi olarak yorumlayın, işleminizin dışına işaret ettiğini ve -EFAULT döndürdüğünü belirler.

+0

Haklısınız. Bu dosyaya göre/usr/include/asm/unistd_32.h' 244 - 259 aralığındaki tek sistem çağrı numarası 251'dir. Bu yüzden sistem çağrı numaramı 251 olarak değiştirdim. Fakat bu sefer şöyle diyor: 'ile errno = 38' –

0

Syscalls, kernel çalışan sorgusunu sorgulayın. İşlev, çekirdeğindeki bir adres alanına eşlenir. Bu çekirdeği yüklemez ve makineyi yeniden başlatmazsanız, adres geçerli olmayacaktır. Bir pointer yerine çok sayıda geçiyoruz

int get_thread_area(struct user_desc *u_info); 

, çekirdek çalışıyor: x86 üzerinde

+1

Bana cevap gibi gelmiyor – Dani

+0

Tamam, ayrıntılandırılıyor. – Mel

+0

Evet Yeni çekirdek resmi ve çekirdek başlıklarını yükledim. Ama işe yaramıyor! –