Tambah System call di Linux
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..

thanx suse sensei.. arigatou ne!
Comment by hikam — September 21, 2007 @ 10:10 am
Tangkyu tur… berguna banget… lanjutkan langkah mu nak…
Comment by joel — September 22, 2007 @ 2:42 am
sip2.. membantu banget..
tapi langkah2 tambahannya ga gw ikutin tetap bisa.
ntahlah..heheheh
Comment by hengky — September 24, 2007 @ 2:57 am
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
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
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