Find the answer to your Linux question:
Results 1 to 2 of 2
Enjoy an ad free experience by logging in. Not a member yet? Register.
  1. #1

    SOS: how to implement a system call in linux


    I encountered a variety of difficulties when implementing a system call as simple as HelloWorld example in Linux so far.
    Firstly, according to the book "Linux Kernel Development Second Edition", I tried to implement a syscall in 2.6.31 but no way absolutely because 2.6.10 has a very different way to deal with it by comparison to 2.6.31. In fedora 4(2.6.11) I tried to compile the new kernel versions 2.6.10 or 2.6.11 but failed with unexpected errors. Even "make menuconfig" fails to work in this case.
    Secondly, I tried to get help from the example from "HOWTO/html_single/Implement-Sys-Call-Linux-2.6-i386/" but still not work. Even the compilation of new kernel 2.6.17 in Ubuntu 6.10(exact 2.6.17) fails to add a syscall.
    Last I also got no help from the example "imada.sdu.dk/~daniel/DM510/assignment1/system-call.html" which indicates how to implement a syscall in recent 2.6.28. But the error always take place when compiling the source with new system call modification on source:
    arch/x86/built-in.o: In function `sys_call_table':
    (.rodata+0x724): undefined reference to `sys_hellokernel'
    make: *** [.tmp_vmlinux1] Error 1

    Now can somebody give me a detailed step-by-step howto example to implement a syscall in linux?
    Thank you!

  2. #2
    Quote Originally Posted by sunnyhay View Post
    I encountered a variety of difficulties when implementing a system call as simple as HelloWorld example in Linux so far.
    Firstly, according to the book "Linux Kernel Development Second Edition", I tried to implement a syscall in 2.6.31 but no way absolutely because 2.6.10 has a very different way to deal with it by comparison to 2.6.31. In fedora 4(2.6.11) I tried to compile the new kernel versions 2.6.10 or 2.6.11 but failed with unexpected errors. Even "make menuconfig" fails to work in this case.
    Secondly, I tried to get help from the example from "HOWTO/html_single/Implement-Sys-Call-Linux-2.6-i386/" but still not work. Even the compilation of new kernel 2.6.17 in Ubuntu 6.10(exact 2.6.17) fails to add a syscall.
    Last I also got no help from the example "imada.sdu.dk/~daniel/DM510/assignment1/system-call.html" which indicates how to implement a syscall in recent 2.6.28. But the error always take place when compiling the source with new system call modification on source:
    arch/x86/built-in.o: In function `sys_call_table':
    (.rodata+0x724): undefined reference to `sys_hellokernel'
    make: *** [.tmp_vmlinux1] Error 1

    Now can somebody give me a detailed step-by-step howto example to implement a syscall in linux?
    Thank you!
    1 I downloaded 2.6.26 kernel. Fedora 9 is my OS with kernel version 2.6.25;
    2. I extract the source into /usr/src/linux-2.6.26;
    3. Make a directory "/mysyscall" under the source folder;
    4. Add two files in "/mysyscall".
    (1) mysyscall.c
    #include <linux/kernel.h>
    #include <linux/linkage.h>

    asmlinkage long mysyscall(int i){
    printk(KERN_DEBUG "Hello World with number %d \n", i);
    return(1);}
    (2) mysyscall.h with only one line
    obj-y := mysyscall.o
    3. Modify Makefile under the source folder.
    just add the new folder in the end of this line
    core-y += kernel/ mm/ fs/ ipc/ security/ crypto/ block/
    So the change line is
    core-y += kernel/ mm/ fs/ ipc/ security/ crypto/ block/ mysyscall/
    4. Add an entry for the new syscall by modifying source/arch/x86/kernel/syscall_table_32.S. The new line is
    .long sys_mysyscall
    5. Add a new #define line in source/include/asm-x86/unistd_32.h with
    #define __NR_mysyscall 327
    6. I compile the kernel 2.6.26 and get the following error message:
    arch/x86/built-in.o: In function `sys_call_table':
    (.rodata+0x724): undefined reference to `sys_mysyscall'
    make: *** [.tmp_vmlinux1] Error 1

    It's all. Please tell me how to implement the syscall successfully. Thank you very much!

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •