Kernel to User

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 :D

Advertisements
Kernel to User

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s