• Tidak ada hasil yang ditemukan

Menambahkan System Call pada Linux kernel

N/A
N/A
Protected

Academic year: 2021

Membagikan "Menambahkan System Call pada Linux kernel"

Copied!
5
0
0

Teks penuh

(1)

Menambahkan System Call pada Linux kernel 2.6.22

System call merupakan mekanisme yang digunakan oleh program aplikasi untuk meminta service dari  sistem operasi. Service yang dimaksud adalah services yang dikelola oleh sistem operasi seperti storage,  memory, network, process management, mengakses perangkat keras, dll. Sebelumnya, Anda harus memiliki akses root. Instruksi untuk menambahkan system call: 1. Download source linux kernel 2.6.22 di http://user.arc.itb.ac.id/incoming/kernel/linux­ 2.6.22.tar.gz atau http://www.kernel.org 2. Ekstrak file source kernel di /usr/src dengan perintah #tar –zxvf linux.2.6.xx.tar.gz 3. Edit file /usr/src/linux­2.6.xx/arch/i386/kernel/syscall_table.S System Call tidak dapat dipanggil melalui user process, melainkan harus melalui mekanisme  interrupt dan terdaftar pada interrupt table. Maka Anda harus menambahkan system call baru  pada interrupt table dengan cara mengedit file /usr/src/linux­2.6.xx/arch/i386/kernel/entry.S. Pada bagian akhir file tersebut, Anda akan menemukan kode #include "syscall_table.S" yang berarti file entry.S meng­include file syscall_table.S. Di file inilah Anda tambahkan system  call baru pada akhir file. Contohnya dengan menambahkan .long sys_showproc pada akhir  file syscall_table.S dengan “showproc” merupakan nama system call baru yang akan  kita  tambahkan. 4. Anda perlu meng­generate system call “stub” sehingga program user dapat mengivokasi system  call Anda. Lakukanlah dengan cara mengedit file /usr/src/linux­2.6.xx/include/asm/unistd.h  seperti ini #ifndef _ASM_I386_UNISTD_H_ #define _ASM_I386_UNISTD_H_ /*

* This file contains the system call numbers. */ #define __NR_restart_syscall 0 #define __NR_exit 1 #define __NR_fork 2 ... #define __NR_eventfd 323 #define __NR_mysyscall 324 Anda perlu menambahkan #define untuk system call Anda pada akhir file dengan menuliskan  “__NR_” sebgai prefix. Sebagai contoh, ditambahkan  #define __NR_showproc 325 Kemudian tambahkan juga 

#define NR_syscalls 325  menjadi 

#define NR_syscalls 326 (ditambahkan 1).

(2)

showproc.c pada direktori usr/src/linux­2.6.xx/arch/i386/kernel/ 

Agar dapat di­link dengan baik, system call Anda membutuhkan kata “asmlinkage” sebelum  fungsi dan “sys_” sebelum nama fungsi. Perlu juga dituliskan #include <linux/linkage.h> agar “asmlinkage” dikenali. Contohnya, Anda akan menuliskan

#include <linux/linkage.h>

#include <linux/syscalls.h> /*agar sys_getpid() dikenali*/ asmlinkage int sys_showproc (int arg1, char* arg2) {

return(sys_getpid()); /*sys_getpid() mengembalikan pocess id*/ } 6. Editlah file usr/src/linux/arch/i386/kernel/Makefile (file “Makefile” pada direktori tempat Anda  menyimpan file showproc.c) lalu tambahkan showproc.o pada akhir baris ke 10. Tujuannya  adalah agar file Anda dapat dkompile dan di­link dengan baik. 7. Lakukan konfigurasi kernel jika dibutuhkan. Ada tiga cara untuk melakukan konfigurasi kernel,  yaitu melalui :  text­based program

jalankan perintah #make config dalam direktori /usr/src/linux.2.6.xx. Perintah make akan  menanyakan berbagai pertanyaan terkait konfigurasi kernel. Menekan <ENTER> akan  mengembalikan nilai default.

 text­based menu program

jalankan perintah #make menuconfig dalam direktori /usr/src/linux.2.6.xx. Selanjutnya  akan ditampilakan menu dialog seperti gambar di bawah ini

 jika pada sistem Anda ter­install X Windows, Anda dapat menggunakan X­based program.

jalankan perintah #make xconfig dalam direktori /usr/src/linux.2.6.xx. Selanjutnya akan  ditampilakan window seperti gambar di bawah ini

(3)

8. #make clean 9. #make dep

Instruksi ini hanya dibutuhkan pada kernel 2.4 or older untuk mempersiapkan source file yang  akan digunakan pada saat compiling.

10. Editlah file usr/src/linux/arch/i386/kernel/Makefile untuk memberi nama unik pada kernel Anda.  Caranya adalah dengan mengedit baris “EXTRAVERSION=” untuk menambahkan suffix yang  unik pada akhir nama kernel default.

Sebagai contoh, jika Anda memiliki kernel dengan versi 2.6.22 dan Anda mengedit 

“EXTRAVERSION=” mejadi “EXTRAVERSION=-6-new”, Maka nama versi kernel Anda adalah  2.6.22­6­new.

11. Compile kernel dengan perintah #make. Ini akan memakan waktu yang cukup lama. 12.#make modules_install

Tujuannya adalah untuk meng­copy semua module yang diciptakan pada tahap sebelumnya ke  tempat default­nya, yaitu direktori /lib/modules/<kernel version>.

13.#make install

Kernel yang telah Anda buat harus di­copy ke partisi /boot dimana seluruh file kernel aktif dari  sistem disimpan. Ini dilakukan dengan perintah #make install. Anda dapat melihat kernel  Anda sudah terinstall dengan perintah #ls -l /boot/vmlinuz*

14. Anda dapat meng­update file /etc/grub.conf untuk memasukkan kernel Anda pada boot options.  Sebenarnya, perintah #make install telah melakukan ini secara otomatis.

(4)

default=2 timeout=10

splashimage=(hd0,7)/boot/grub/splash.xpm.gz hiddenmenu

title Fedora Core (2.6.22) root (hd0,7)

kernel /boot/vmlinuz-2.6.22 ro root=LABEL=/ rhgb quiet initrd /boot/initrd-2.6.22.img

title Fedora Core (2.6.18-1.2798.fc6) root (hd0,7)

kernel /boot/vmlinuz-2.6.18-1.2798.fc6 ro root=LABEL=/ rhgb quiet initrd /boot/initrd-2.6.18-1.2798.fc6.img

title Windows XP

rootnoverify (hd0,0) chainloader +1

pada file di atas, tertulis default=2. Ini berarti, default boot option yang akan dipilih jika  timeout habis adalah yang ke­3, yaitu “Windows XP”. Anda dapat mengubah default boot option  menjadi “Fedora Core (2.6.22)” dengan mengubah “default=2” menjadi “default=0”. Anda  juga dapat mengubah waktu timeout “timeout=10” sesuai yang Anda inginkan, dengan nilai  integer sebagai satuan detik. 15. Lakukan reboot dengan perintah #reboot   Setelah reboot dengan kernel baru, perlu dibuat driver untuk mengetes system call baru yang Anda buat.  Misalkan file mainsp.c di bawah ini adalah driver yang Anda buat. Letaknya dapat di mana saja, pada  contoh ini letaknya di /root/Desktop Anda juga perlu mengedit unistd.h pada direktori /usr/src/linux­ x.x.x/include/asm/ ke  /usr/include/kernel/ karena file tersebut mengandung indeks system call Anda yang baru. #include <linux/errno.h>

#include <sys/syscall.h> //agar dapat memanggil system call #include <linux/unistd.h>

long errno; //this is the return code from the system call

//this is a macro defined in unistd.h to help prototype sys calls int showproc(int i,char* c)

{

return syscall(__NR_showproc,i,c); }

int showproc_par(int i,char* c) {

return syscall(__NR_showproc_par,i,c); }

int showproc_time(int i,char* c) {

(5)

return syscall(__NR_showproc_time,i,c); }

int showproc_grp(int i,char* c) {

return syscall(__NR_showproc_grp,i,c); }

int main(){

printf("Current process ID : %d\n",showproc(1, "hi"));

printf("Current process parent ID : %d\n",showproc_par(1, "hi")); printf("Current process group : %d\n",showproc_grp(1, "hi")); printf("Current process time : %d\n",showproc_time(1, "hi")); return 0; } Pada file di atas, ada beberapa system call yang tidak dijelaskan pembuatannya pada tahap sebelumnya: ● showproc_par adalah system call yang mengembalikan current process parent ID ● showproc_grp adalah system call yang mengembalikan current process group ● showproc_time adalah system call yang mengembalikan current process time Compile file mainsp.c dengan perintah #gcc -o sp mainsp.c Eksekusi dengan perintah #./sp, maka akan tampil keluaran [root@localhost Desktop]# ./sp Current process ID : 4329

Current process parent ID : 4299 Current process group : 4329 Current process time : -1 [root@localhost Desktop] Written by : R. Aditya Satrya Wibawa (adityasatrya.wordpress.com) Referensi: ● Adding a System Call to a 2.6.x Linux Kernel, By Corban Rivera, 3204 GTA ● Special Edition Using Linux, 4th Edition. Que ● Tugas­1 Mata Kuliah Sistem Operasi IF3191 “Menambah System call baru pada Kernel Linux  2.6.x.x” ● Asistensi IF3191, by Pasukan Asisten Sister ● Tambah System Call di Linux, by Catur Wirawan ● Adding A System Call, Worchester Poltechnic Institute Computer Science ● Quick HOWTO : Ch33 : Modifying the Kernel to Improve Performance. Retrieved from  "http://www.linuxhomenetworking.com/wiki/index.php/Quick_HOWTO_:_Ch33_:_Modifying_t he_Kernel_to_Improve_Performance"

Referensi

Dokumen terkait

Berkaitan dengan tugas menetapkan kegiatan dan jadwal acara rapat DPRD, Panitia Musyawarah menetapkan acara DPRD untuk satu masa sidang atau sebagian dari suatu masa

TENTANG : JENIS DAN TARIF ATAS JENIS PENERIMAAN NEGARA BUKAN PAJAK YANG BERLAKU PADA ARSIP NASIONAL REPUBLIK INDONESIA JENIS DAN TARIF ATAS JENIS PENERIMAAN

Hasil penelitian mengindikasikan bahwa variabel interaksi dengan teman dan interaksi dengan dosen tidak signifikan terhadap dependen, sedangkan variabel keterlibatan

Metode penelitian eksperimental menjadi metode yang dipakai pada tinjauan literature yang ada, sehingga peneliti akan menggunakan metode yang sama dalam pembuatan

Kosakata bahasa Indonesia, selain berasal dari bahasa asli yaitu bahasa Melayu (Riau), banyak bahasa dari etnis lainnya yang dipinjam sebagai bagian dalam bahasa

1) Memperoleh pengetahuan dan ketrampilan baru dalam pembelajaran 2) Meningkatkan kemampuan peserta didik dalam pemecahan masalah projek. 3) Membuat peserta didik lebih aktif

Bila kita ingin mencetak dokumen, pada kotak dialog print pilihan yang digunakan untuk mencetak dokumen hanya pada halaman ganjil saja adalah …. Pada saat kita mencetak dokumen