Sistem Monitoring Suhu (Part II)

Hallo kembali…

Kembali membahas tentang proyek yang sebelumnya telah di bahas pada https://sonyfernando.wordpress.com/2009/09/01/sistem-monitoring-suhu/, berikut ini adalah pembahasan solusi untuk masalah tersebut.

Sebelumnya, berikut ini adalah spesifikasi developtment board yang digunakan:

  • Support linux operating system
  • Memiliki ethernet port
  • Memiliki serial port
  • Mendukung web service

Dari kebutuhan tersebut, Berikut ini adalah Perangkat yang digunakan:

  • SBC yang digunakan adalah ATNGW100
  • Menggunakan sensor suhu LM35
  • Menggunakan microcontroller ADC (10 bit, terconfigurasi 8bit sebagai output)
  • Sistem operasi linux dengan kernel versi 2.6.27
atngw100

 

adc modul

 

Berikut adalah pembahasan mengenai implementasi sistem monitoring suhu:

Continue reading Sistem Monitoring Suhu (Part II)

Sistem Monitoring Suhu

Hai smuanya…

Ni gw lagi pengen buat sistem monitoring suhu berbasis web nih buat embedded system pake linux. Kebayakan sekarang sistem monitoring suhu kan basisnya windows, yang di flash ke microcontroller. Skarang gw pengen yang basisnya linux. Tapi, gw lagi kesulitan nih cari dev kita and board yang gw butuhin. Spesifikasinya sperti ini:

  1. Support linux
  2. Ethernet
  3. Serial (pastinya)
  4. ADC dan sensor suhu
  5. LCD
  6. GSM (optional)

Nah untuk cari single board computer (SBC) yang ngedukung spec itu susah banget…. adanya di luar dan mahal uy.. Adakah diantara temen2 yang tau dimana gw dapetin board itu ?? kalo ada kasih tau ya….penting buat TA nih….

Thanx b4…

Problem with GlassFish v2 – Netbeans

Hai temans, udah lama nih ga nulis – nulis lagi. Btw, gimana kabar para bloggers smuah ??

Oia, gw baru dapet new problem nih judul masalahnya problem with glassfish on netbeans.

waktu gw install netbeans 6.5.1 yang udah di bundle dengan jdk yang baru, gw dapet error message waktu jalanin server glassfish, errornya seperti ini:

Screenshot-Error

Dari error message itu, gw coba liat – liat port (sapa tau konflik), trus liat – liat domain.xml nya (karna menurut forum yang gw temuin ama uncle google, katanya ada pengaruh apa ipv6 nya), dan uninstall – reinstall. Tapi masalah tersebut masih belum solve. Sampai akhirnya gw baca tuh server.log nya (niat banget tuh baca log yang banyak itu).

Eh ternyata ada satu hal yang buat gw penasaran, yaitu hostname. Nama laptop (/etc/hostname) gw ternyata tidak sama dengan nama host yang ada di /etc/hosts. Maksudnya gimana ??

coba ketik hostname di pc / laptop, kemudian coba ping ke situ

sony@fernando:~$ hostname
fernando
sony@fernando:~$ ping fernando
ping: unknown host fernando

error “unknown host fernando” itu menunjukkan kalau hostname yang ada di /etc/hosts.

Gw coba cek file tersebut dan ternyata emang bener ga sama

sony@fernando:~$ cat /etc/hosts
127.0.0.1 localhost
127.0.1.1 sony-laptop

# The following lines are desirable for IPv6 capable hosts
::1 ip6-localhost ip6-loopback
fe00::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
ff02::3 ip6-allhosts

Solusinya gmn ??

Gampangnya, edit file /etc/hosts dan ganti line 2 dengan hostname yang benar, dalam kasus gw, gw ganti jadi seperti ini

127.0.1.1 fernando

Exit console, kemudian coba start ulang glassfish nya….

Dalam kasus gw, it solved 😉

Problem : Argument list too long

hallo hallo lagi…;)
Kmaren – kmaren gw lagi dalam pembuatan device driver (again ??? heheheee), dalam perjalanan pembuatan itu, gw ngalamin permasalahan yang buat gw binggung, googling, dsb deh pokonya.
Masalahnya adalah pada saat gw jalanin perintah cat xxx.txt > /dev/mydev gw dapet error Argument list too long.

Setelah gw googling – googling, gw dapet kata – kata yang hampir sama di setiap page yg gw temuin. Mereka bilang error itu karna limitation kernel, atau karna ARG_MAX yang kurang pendek, dll. Kutipan yang gw dapet seperti ini:

“The shell has a limit to the size of command-line that it can process at one time.” atau seperti ini
“The “Argument list too long” error, which occurs anytime a user feeds too many arguments to a single command, leaves the user to fend for oneself, since all regular system commands (ls *, cp *, rm *, etc…) are subject to the same limitation”

Intinya semu emang pada masalah limitation. Tapi, pada masalah yang gw hadapin, itu hanya masalah pada error code value (return by device driver). Maksudnya gimana, maksudnya sangat sederhana, yaitu device driver yang gw buat itu ngereturn error value -7, dan error value -7 (pada errno-base.h) itu adalah error value yang berarti Argument list too long.

Hahahahaaaaaa jadi singkat ceritanya adalah masalahnya pada error value yang gw punya. Jadi, jika rekan – rekan menemui masalah yang sama (Argument list too long), saran saya, sebelum jauh – jauh mencari – cari, perhatikan dahulu error value yang telah didefinisikan. Saran lain adalah dengan membuat error value yang nilainya berbeda dengan nilai error yang telah ada pada linux (errno.h atau errno-base.h)

Heheeheee masalah sederhana, tapi buat puyeng…stuck,,,n macem – macem deh pokonya….
so…have a nice to be kernel coder 😉
c u. . . .

Device Driver – Membaca dari dan Menulis ke User Space

Hi semua…

Apa kabar nih ??? lama ga nulis – nulis, skarang mau nulis sesuatu tentang linux device driver (masih ??? hehehee). Yupz, ini masih lanjutan dari device driver sebelumnya….Kalau tulisan sebelumnya merupakan template dari sebuah device driver sederhana, kali ini kita coba membaca informasi yang di berikan pada sisi user space, dan menuliskan kembali informasi hasil proses device driver ke user space.

Command yang bisa dipakai untuk read dan write ke user space adalah: copy_from_user() dan copy_to_user() atau bisa juga menggunakan get_user() atau put_user()

Definisi dari fungsi copy_to_user() dan copy_from_user() tersebut adalah sebagai berikut:

unsigned long copy_to_user(void __user *to, const void *from,unsigned long count);
unsigned long copy_from_user(void *to, const void __user *from, unsigned long count);

Sedangkan untuk put_user() dan get_user() adalah sebagai berikut:

int put_user(datum,ptr);
int get_user(local,ptr);

Nah penasaran gimana cara pakai nya ??

Oke, pertama – tama buat dulu kerangka device drivernya, gampangnya..liat aja tulisan sebelumnya linux kernel module, kemudian pada bagian dibawah ini, edit code-nya jadi seperti ini:

static int device_ioctl(struct inode *inode, struct file *filp, unsigned int cmd,
unsigned long arg)
{
int retval = SUCCESS;
unsigned int val = 0;

printk(KERN_INFO “Device ioctl\n”);
switch (cmd) {
case IOCTL_XXX:
printk(KERN_INFO “Copy Dari User Space\n”);
/* copy data dari user space */
if (copy_from_user(&val, (unsigned long*)arg, sizeof(val))) {
retval = -EFAULT;
}
printk(KERN_INFO “data dari user: %d\n”, val);
break;
case IOCTL_YYY:
printk(KERN_INFO “Copy Ke User Space\n”);
val++;
/* copy data (val) ke user space */
if (copy_to_user((int *)arg, &val, sizeof(val))) {
retval = -EFAULT;
}
printk(KERN_INFO “data ke user: %d\n”, val);
break;
default:
printk(KERN_INFO “IOCTL default\n”);
break;
}
return retval;
}

Hahaaa….seperti itu fren….cara copy dari dan ke user space dari device driver 😉
simple n mudah kan ??? silahkan mencoba untuk membuktikannya hehehe….

Oiya, saran dan kritiknya tolong disampaikan 😀