register_chrdev_region cdev_add maybe one per device - but how to identify them? or misc_register, misc_unregister or register_blkdev #include #include #include #include #include netdev_dbg netdev_err _probe _remove static const struct net_device_ops tss463aa_netdev_ops = { .ndo_start_xmit = tss463aa_tx, .ndo_change_mtu = tss463aa_change_mtu, }; static struct rtnl_link_ops tss463aa_link_ops __read__mostly = { .kind = "???", .setup = tss463aa_setup, }; rtnl_link_register(&tss463aa_link_ops); // see vcan.c INTERRUPT: static irqreturn_t sample_interrupt(int irq, void* dev_id, struct pt_regs* regs) { } request_irq(NUMBER HERE, sample_interrupt, IRQF_DISABLED | IRQF_TRIGGER_FALLING/*flags*/, "gpio1EINT", dev_id); // set_irq_type(NUMBER HERE, IRQT_FALLING); /* not necessary enable_irq(NUMBER HERE); */ NUMBER HERE = BLAH_GPIO_IRQ(...) OR: /sys/class/gpio/xxx/uevent, edge, active_low, direction OR: poll(2) on "value" file and it will return if the interrupt was triggered. set the events POLLPRI | POLLERR If using select exceptfds then lseek(2) to the beginning of the file. edge: use "falling". Possible: "none", "rising", "falling".