در این متن قرار است یک system call به نام wordcounts را به کرنل اضافه کنیم.
مراحل انجام کار:
ابتدا سورس هسته را از آدرس زیر دانلود می کنیم:
https://www.kernel.org/pub/linux/kernel/v3.x/linux-3.5.tar.bz2
سپس آن را از حالت فشرده خارج می کنیم.
به این ترتیب آدرس سورس هسته به صورت زیر می باشد:
Usr/src/linux-3.5
سپس برای معرفی system call خود به فایل systemcall_32.tbl به آدرس زیر می رویم:
Home/linux-3.5/arch/x86/syscalls/syscall_32.tbl
سپس در فایل ،خط زیر را اضافه می کنیم:
۳۵۰ i386 s sys_s
با توجه به اینکه در این فایل شماره ی system call نیز مشخص است و آخرین شماره هم ۳۴۹ است پس شماره ی system call ما ۳۵۰ است.
حال به فایل syscalls.h که شامل prototype همه ی system call ها است می رویم.با ادرس زیر:
Linux-3.5/include/linux/syscalls.h
و خط زیر را به آخر فایل اضافه می کنیم:
;(Asmlinkage int sys_s(void
Asmlinkage به کامپایلر می گوید که آرگومان های تابع روی پشته قرار دارند.اکنون با دستور mkdir kernel/s فولدر به نام s را می سازیم.حال یک ویرایشگر متنی را باز می کنیم و در پوشه ی s برنامه به زبان c را در آن تایپ می کنیم.حال در ترمینال به مسیر فولدر s می رویم.
سپس با دستور gedit یک ویرایشگر متنی به اسم Makefile بدون پسوند می سازیم و خطزیر را در آن می نویسیم:
Obj-$(CONFIG_M)+=s.o
اکنون در ترمینال دستور gedit kernel/Kconfig.m را تایپ کرده و در ویرایشگر متنی ظاهر شده، عبارت زیر را وارد می کنیم:
Config M
Bool “list current process”
Default y
Help
this will list all current running process pid and their state
که این فرایند یکپارچه سازی system call جدید را به سورس هسته کامل می کند.
اکنون Makefile موجود در پوشه ی linux را باز کرده و خط زیر را به آن اضافه می کنیم:
EXTREVERSION=.syscall
حال باید هسته را کامپایل کرد.برای این کار دستور زیر را تایپ می کنیم:
Make oldconfig
Make modules_install
Make install
تست برنامه:
برای اینکار،یک برنامه ی تست به زبان c نوشته و بعد از کامپایل آن را اجرا می کنیم:
#include <stdio.h>
#include <conio.h>
void main(){
char s[50],ch;
int i,c=0;
clrscr();
printf(“Enter any string : “);
for(i=0;ch!=’n’;i++){
ch=getchar();
s[i]=ch;
}
s[i]=’