Find the answer to your Linux question:
Results 1 to 2 of 2
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", ...
Enjoy an ad free experience by logging in. Not a member yet? Register.
  1. #1
    Just Joined!
    Join Date
    Nov 2009
    Posts
    4

    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
    Just Joined!
    Join Date
    Nov 2009
    Posts
    4
    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
  •