Adding a New System Call into the Linux Kernel 2.6

========================================== Stage 1: To modify the kernel to add our own system call ==========================================

1. Edit file /usr/src/linux/arch/i386/kernel/syscall_table.S

Find the 223 syscall and modified like this:

arch/i386/kernel/syscall_table.S …… 233         .long sys_mysyscall 234         .long sys_gettid 235         .long sys_readahead                       /* 225 */ ……

2. Edit file /usr/src/linux/arch/i386/kernel/Makefile Add obj-y += mysyscall.o

3. Create a new file call mysyscall.c under /usr/src/linux/arch/i386/kernel/ directory. Type the following into the file:

#include <linux/linkage.h> #include <linux/kernel.h>

asmlinkage int sys_mysyscall(void) { printk("This is the my new system call build in the kernel!/n"); return 0; }

4. Edit file unistd.h include/asm-i386/unistd.h /usr/include/asm/unistd.h

231 #define __NR_mysyscall                          223      /* mysyscall adds here */

5. At this point, you can start building your new kernel.

make menuconfig && make && make modules_install && make install

6.After a successful build, reboot the machine and boot into the newly built kernel.

=========================== Stage 2: To test the new system call ===========================

7.Create a new file call testsyscall.c in your directory. Type the following into the file:

#include <linux/unistd.h>

_syscall0(long, mysyscall);

int main () { mysyscall(); return 0; }

8.Compile the above testsyscall.c source code with :

gcc -Wall testsyscall.c -o testsyscall

9.If you arrive here without problems, you can now test the newly created system call just type

./testsyscall

10. To check if it works, you can use:

dmesg | tail -n 5

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章