Tambah System call di Linux

September 20, 2007

gak ada game kelas berat yang bisa dimainin dilinux jadi iseng-iseng nambah system call di linux. gak susah kok jangan kapok pake linux. gue juga baru pake Februari 2007(nekat gue) setelah terinpirasi oleh abang herdy yang berkomitmen tidak memakai bajakan, adikmu mengambi langkah yang lebih ekstrem bang.., eh September 2007 gue udah otak-atik kernel..buseet dah. linux memaksa kita melampau batas

1.  Download source kernel Linux dari alamat berikut
    http://user.arc.itb.ac.id/incoming/kernel/linux-2.6.22.tar.gz  atau http://www.kernel.org
    Untuk tugas ini dipergunakan source kernel dengan versi rilis 2.6.22.
2.  Extract file tar source kernel tersebut ke direktori /usr/src/ dan rename /usr/src/linux-2.6.x mejadi /usr/src/linux
3.  Edit file /usr/src/linux/arch/i386/kernel/syscall_table.S
4.  Tambahkan .long sys_coba pada akhir file tersebut.
5.  Buatlah sebuah file dengan nama coba.c pada direktori
    usr/src/linux/arch/i386/kernel/
    Buatlah system call yang me-return sebuah nilai sesuai dengan kerangka program di bawah. 
      #include <linux/linkage.h>
      asmlinkage int sys_coba (int arg1, char* arg2) {
        
return(5);
      }

6.  Editlah file usr/src/linux/arch/i386/kernel/Makefile lalu tambahkan
        coba.o pada akhir baris ke 10.
7.  Editlah file /usr/src/linux/include/asm-i386/unistd.h dan tambahkan 
      #define __NR_coba  324
    setelah 
      #define __NR_eventfd    323
8.  Kemudian ubah juga
      #define NR_syscalls     324
    menjadi
      #define NR_syscalls     325
9.  Sekarang compile-lah source kernel yang sudah dimodifikasi tadi. cara kompile:

    1.$su
    2.#cp kernel 2.6.xx.tar.gz /usr/src
    3.#cd /usr/src
         #tar -zxvf kernel-2.6.xx
        #mv linux-2.6.xx linux
    4.#cd linux
    5.#make clean
    6.#make menuconfig –>langsung pilih exit aja
    7.#make
    8.#make modules_install install

10. Selesaikan proses instalasi kernel baru dan kemudian reboot dengan kernel baru tersebut. 

saya menemukan sedikit keanehan saat selesai kompile dan reeboot. sistem call saya tidak dapat dikenal,pesan kompiler:undefined reference, sehingga saya menambah langkah yang sumber saya dapat di internet

adapun saya membuat sistem call dengan nama coba.c (nama system call yang saya contohkan adalah ‘coba(int arg1, char* arg2)’ bukan mysyscall)yang berisi:
    #include <linux/linkage.h>
    
    asmlinkage int sys_coba(int arg1,char* char2){
        return(5);
    }

setelah reboot, saya melakukan langkah berikut agar sistem call saya dikenali
1. copy file di /usr/src/linux/include/asm-i386/unistd.h ke /usr/include/asm ; jika ada peringatan overwrite jawab dengan yes. menurut sumber yang saya baca,Adding a System Call to a 2.6.x Linux Kernel By Corban Rivera, 3204 GTA, hal ini diperlukan karena file unistd.h pada /usr/include/asm belum me-list system call kita. setelah saya periksa pada /usr/include/asm/unistd.h ,ternyata benar file tersebut hanya men-list 317 system call berbeda sekali dengan unistd.h yang kita edit yang berisi 324 system call. sehingga saya merasa perlu melakukan penimpaan file

2. lalu saya membuat header file coba.h yang berisi
    #include <linux/unistd.h>
    #include <linux/errno.h>
    #include <sys/syscall.h>

    long errno;/*kode kembalian untuk syscall*/

    /*#define __NR_coba 324*/
    /*_syscall2(int,coba, int, arg1, char*, arg2);*/

    int coba(int i,char* c)/*ada dua parameter sesuai coba.c*/
    {
                return syscall(__NR_coba,i,c);
    }

3.lalu menurut sumber yang saya baca,Adding A system call by Worcester Polytechnic Institute Computer science, kita harus mengkopi file header yang kita buat, dalam contoh ini,coba.h ke /usr/include/sys

4.lalu membuat tesfile tes.c (dimana saja contohnya /home/catur)
    #include <stdio.h>
    #include <sys/coba.h>

    int main(){
        /*parameter-parameter ini sebenarnya mubazir*/
      printf("%d",coba(1, "hi"));/*tampilan ke layar: 5*/

    }

5.kompile $gcc -o tes tes.c

6.jalankan $./c

7.program akan mengeluarkan 5

saya berpikir,seharusnya tidak perlu ada langkah tambahan seperti ini, apa karena kita tidak menimpa kernel sebelumnya maka semua file-file library lama,termasuk systemcall, tidak terganti? jika ya,apakah mungkin kita harus melakukan hard link,soft link atau menimpa secara manual ke semua file library?, maka untuk teman-teman yang berhasil tanpa perlu melakukan langkah tambahan ini mohon direply mungkin ada hal yang kurang pada post saya sebelumnya,’cara lain kompile kernel’

terima kasih kepada punk_ab atas sumber-sumbernya. bisa dilihat di (http://students.if.itb.ac.id/~if15020/if3191/)

Ketua Brurkom(klub linuxer)

tolong comment-nya ya.. 

6 Comments »

The URI to TrackBack this entry is: http://catur20.blogsome.com/2007/09/20/tambah-system-call-di-linux/trackback/

  1. thanx suse sensei.. arigatou ne!

    Comment by hikam — September 21, 2007 @ 10:10 am

  2. Tangkyu tur… berguna banget… lanjutkan langkah mu nak…

    Comment by joel — September 22, 2007 @ 2:42 am

  3. sip2.. membantu banget..
    tapi langkah2 tambahannya ga gw ikutin tetap bisa.
    ntahlah..heheheh

    Comment by hengky — September 24, 2007 @ 2:57 am

  4. Wah, Tur, aku nyoba nggak pake make clean pas ngompile kernel lagi (terutama karena belum puas dengan syscall hasil utak-atiknya :) ) ternyata bisa lebih cepat. Jadi langsung make trus make modules_install install aja, terus reboot (gak nyampe 15 menit)

    Hmm, saranku kalo mau install aplikasi lewat source mending baca manual instalasinya, pake less README, ato less INSTALL. Lebih banyak berhasilnya…

    Anyway, referensi yang bagus ^_^

    Comment by KnightDNA — September 24, 2007 @ 10:35 am

  5. gile! dahsyat banget lo Tur! Kalo ada waktu, gw coba lah. Soalnya kan yang namanya nambah sesuatu yang berkaitan dengan system itu beresiko sedangkan gw lagi butuh2nya laptop gw bekerja optimal. masi banyak tugas, bro! ntar lah pas libur gw coba. semoga ga kernel panic! :p

    Comment by qbl — September 29, 2007 @ 6:27 pm

  6. wiii keren gila lo Tur. gw pengen coba sih, tapi ntar lah kalo ada waktu. ya, namanya yg berhubungan ma sistem kan beresiko, ntar kalo kenapa2 gawat. dan padahal gw lagi butuh laptop gw dalam kondisi sehat: banyak tugas, bro. ntar lah pas libur gw coba. semoga ga kernel panic.

    Comment by qbl — September 29, 2007 @ 6:29 pm

RSS feed for comments on this post.

Leave a comment

Line and paragraph breaks automatic, e-mail address never displayed, HTML allowed: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <code> <em> <i> <strike> <strong>



Anti-spam measure: please retype the above text into the box provided.

Get free blog up and running in minutes with Blogsome
Theme designed by Viewfinder Design