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 😀