kernel에서 user level로 uevent 보내는 법 (how to send an uevent to the user space)
/* file operationsfor /dev/usb_accessory */
static const structfile_operations acc_fops = {
.owner = THIS_MODULE,
.read = acc_read,
.write = acc_write,
.unlocked_ioctl = acc_ioctl,
.open = acc_open,
.release = acc_release,
};
static structmiscdevice acc_device = {
.minor = MISC_DYNAMIC_MINOR,
.name = "usb_accessory",
.fops = &acc_fops,
};
static voidacc_start_work(struct work_struct *data)
{
char *envp[2] = { "ACCESSORY=START", NULL };
kobject_uevent_env(&acc_device.this_device->kobj, KOBJ_CHANGE, envp);
}
2. user level (uevent observer 코드)
int main()
{
event_loop();
return 0;
}
static voidevent_loop(void)
{
int len = 0;
static char udata[4096];
memset(udata,0, sizeof(udata));
uevent_init();
while (1) {
len = uevent_next_event(udata, sizeof(udata) - 2); // eventwaitnig (mes is filled in the 'udata')
// "USB_STATE=DISCONNECTED" 등의 string을 받음
handle_uevent(udata);
// 여기서 string을 parsing 한 후 원하는 처리 수행
// Google vocie service 실행intent 발생
}
}
static voidhandle_uevent(const char* udata)
{
...
처리코드 (AndroidIntent 발생 시키는 코드 필요)
인터넷에서 AndroidIntent를 발생시키는 예제 검색해서 참고 (Intent의 대상은 Google의 voice service)
...
}
'Linux' 카테고리의 다른 글
Kinux kernel Bottom half 정리 (softirq, tasklet, workqueue) - part 1 (0) | 2018.03.18 |
---|---|
Kinux kernel Bottom half 정리 (softirq, tasklet, workqueue) - part 2 (0) | 2018.03.18 |
Linux kernel process (0) | 2018.03.18 |
device tree 정리 (0) | 2018.03.18 |
Linux의 kmalloc과 vmalloc에 대해서 (0) | 2018.03.18 |
댓글