2021. 12. 31. 13:06ㆍLinux
- 목차
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' 카테고리의 다른 글
Linux kernel: kthread & wait_event_interruptible 사용법 (0) | 2021.12.31 |
---|---|
Linux kernel process (0) | 2021.12.31 |
Linux kernel Bottom half 정리 (softirq, tasklet, workqueue) - part 2 (0) | 2021.12.31 |
Linux kernel Bottom half 정리 (softirq, tasklet, workqueue) - part 1 (0) | 2021.12.14 |
virtual address space (0) | 2021.12.13 |