Archive for the coding Category

Meng-compile kernel module doang

Posted in coding with tags on April 17, 2008 by ag2uki

Fyuhm, puter-puter sana-sini bingung. Akhirnya ketemu juga.

Gini pembaca, saya kebetulan perlu melakukan sedikit modifikasi pada salah satu modul kernel linux. Saya tahu persis bagian mana yang harus saya edit. Nah, setelah ngedit, muncul pertanyaan besar. Gimana cara compile-nya ya? Apakah saya harus meng-compile seluruh kernel? Atau, bisakah saya cukup meng-compile modul yang saya edit aja?

Selidik punya selidik, ternyata di linux-source ada parameter M. Jadi, ketika itu saya hendak mengcompile module usbserial doang, perintahnya adalah:

$ sudo make M=drivers/usb/serial

Nah, perintah di atas akan membuat file modul baru. Sekarang, kita hanya perlu mereplace modul yang ada di /lib/modules/nama_versi_kernel_linux/

Tinggal copy aja, beres!

HELLO WORLD JNI DI LINUX

Posted in coding with tags , , on April 17, 2008 by ag2uki

Saya yakin, yang kesulitan menggunakan JNI bukanlah saya seorang. JNI teh naon nya? Bagi anda yang belum tahu teori apa itu JNI, silakan browsing-browsing dulu. Bila anda sudah tahu teorinya, dan udah gak sabar pengen nyoba di linux, semoga tulisan ini bisa jadi panduan. :D

Oke, sebelum mulai, pastikan sesajen berikut ini sudah terinstall di linux anda:
1. JDK, untuk compile kode java anda
2. gcc, beserta libc6 untuk compile kode C anda
3. Eclipse (optional), sebagai editor
Yak, cukup itu sajen yang diperlukan dalam ritual ini. Sebagain informasi saja, sajen yang terakhir sifatnya sunah. Anda boleh menggunakan editor lainnya.

Untuk mulai mencoba JNI, buat dulu source java anda sebagai berikut (file: NevNat.java):

package com.uki.coba;

public class NevNat {
static {
System.loadLibrary(“nevnative”);
}
public native void display() ;

public static void main(String[] args) {
NevNat nat = new NevNat();
nat.display();
}

}

Setelah jadi, simpan dan compile source java tersebut.

gue@linux:~$ javac com/uki/coba/NevNat.java

Hasil komipilasi file tersebut menghasilkan file NevNat.class. Abis itu, dari file NevNat.class dibikin file C headernya, caranya:

gue@linux:~$ javah com.uki.coba.NevNat

Hasilnya adalah file com_uki_coba_NevNat.h. Isinya:

/* DO NOT EDIT THIS FILE - it is machine generated */
#include <jni.h>
/* Header for class com_uki_coba_NevNat */

#ifndef _Included_com_uki_coba_NevNat
#define _Included_com_uki_coba_NevNat
#ifdef __cplusplus
extern “C” {
#endif
/*
* Class: com_uki_coba_NevNat
* Method: display
* Signature: ()V
*/
JNIEXPORT void JNICALL Java_com_uki_coba_NevNat_display
(JNIEnv *, jobject);

#ifdef __cplusplus
}
#endif
#endif

Nah, langkah selanjutnya adalah membuat source C yang mengimplementasi header tersebut.
Isinya sebagai berikut:
#include <jni.h>
#include "com_uki_coba_NevNat.h"
#include <stdio.h>

JNIEXPORT void JNICALL Java_com_uki_coba_NevNat_display
(JNIEnv *env, jobject obj) {
printf(“Hello dab!\n”);
return;
}

Kalo udah dibuat, tinggal compile

gcc -shared -I $JAVA_HOME/include/ -I $JAVA_HOME/include/linux/ NevNatImpl.c -o libnevnative.so

Trus, kalo udah kelas java tadi dijalankan aja

export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:.
gue@linux:~$ java com/uki/coba/NevNat

Hasilnya:
Hello dab!

http://www.devarticles.com/c/a/Java/Interacting-With-C-From-Java-With-JNI-Part-1/1/