{"id":4669,"date":"2021-07-06T00:55:08","date_gmt":"2021-07-05T15:55:08","guid":{"rendered":"https:\/\/now0930.pe.kr\/wordpress\/?p=4669"},"modified":"2021-07-06T21:32:28","modified_gmt":"2021-07-06T12:32:28","slug":"linux-driver-softirq-%ec%8b%a4%ec%8a%b5","status":"publish","type":"post","link":"https:\/\/now0930.pe.kr\/wordpress\/linux-driver-softirq-%ec%8b%a4%ec%8a%b5\/","title":{"rendered":"linux driver, softIrq \uc2e4\uc2b5"},"content":{"rendered":"\n<p>\uc778\ud130\ub7fd\ud2b8 \ud6c4\ubc18\ubd80\ub97c \ucc98\ub9ac\ud558\ub294 soft irq\ub97c \ubc30\uc6e0\ub2e4. \uc790 \uc774\uc81c \uc0ac\uc6a9\ud574 \ubcf4\uc790. \ubd88\ud589\ud788\ub3c4 \uc694\uc998\uc740 \uc77c\ubc18\ud654\ub41c tasklet\uc744 \uc0ac\uc6a9\ud558\uace0 low level\uc778 soft irq\ub97c \uc0ac\uc6a9\ud558\uc9c0 \uc54a\ub294\ub2e4\uace0 \ud55c\ub2e4. \uadf8\ub798\ub3c4 \uc544\ub798 \uc0ac\uc774\ud2b8\uc5d0\uc11c \uac15\uc81c\ub85c?? \uc0ac\uc6a9\ud560 \uc218 \uc788\ub294 \ubc29\ubc95\uc744 \ucc3e\uc558\ub2e4. <s>\uc2e4\uc2b5\ud558\uace0 \uc4f0\uc9c0 \ub9d0\uc544\uc57c \ud55c\ub2e4. \ub4dc\ub77c\uc774\ubc84\ub97c \ub85c\ub529 \ud6c4 \uc5b8\ub85c\ub529\ud558\uba74 \uc2dc\uc2a4\ud15c\uc774 \uc8fd\uc5b4\ubc84\ub9b0\ub2e4.<\/s><\/p>\n\n\n\n<p><a href=\"https:\/\/embetronicx.com\/tutorials\/linux\/device-drivers\/softirq-in-linux-kernel\/\">https:\/\/embetronicx.com\/tutorials\/linux\/device-drivers\/softirq-in-linux-kernel\/<\/a><\/p>\n\n\n\n<p>\uc694\uc810\uc740 kernel\uc5d0\uc11c export_symbol\ub85c raise_softirq, open_softiq \ub4f1 3\uac1c \ud568\uc218\ub97c \ub0b4\ubcf4\ub0b4 \uc0ac\uc6a9\ud560 \uc218 \uc788\uac8c\ud55c\ub2e4. interrrupt.h\uc5d0 \uc0ac\uc6a9\uc790 \uc815\uc758 softirq\ub97c \uc124\uc815\ud574\uc57c \ud55c\ub2e4. \uae30\uc874 \ub4f1\ub85d\ub41c \uc774\ubca4\ub97c \uc0ac\uc6a9\ud558\uba74 \uc2dc\uc2a4\ud15c\uc774 \uc8fd\ub294\ub2e4.<\/p>\n\n\n\n<p><a href=\"https:\/\/stackoverflow.com\/questions\/39691131\/undefined-functions-while-compiling-linux-kernel-module\">https:\/\/stackoverflow.com\/questions\/39691131\/undefined-functions-while-compiling-linux-kernel-module<\/a><\/p>\n\n\n\n<p>\ud29c\ud1a0\ub9ac\uc5bc\uc774 \uc2dc\uc2a4\ud15c\uc5d0 \uc7a5\uce58\ub97c \uc124\uce58\ud558\uc5ec \uc778\ud130\ub7fd\ud2b8\ub97c \ud558\ub294 \ubc29\ubc95\uc73c\ub85c \ud588\ub2e4. \ub531\ud788 \uc7a5\uce58\ub97c \ucd94\uac00\ud560 \uc774\uc720\uac00 \uc5c6\ub294\ub370 \uc65c \ud588\ub294\uc9c0 \ubaa8\ub974\uaca0\uc73c\ub098, \uc544\ub798 \uc0ac\uc774\ud2b8\uc5d0\uc11c \uac04\ub7b5\ud55c \uaddc\uce59\uc744 \ucc3e\uc558\ub2e4.<\/p>\n\n\n\n<p><a href=\"https:\/\/temp123.tistory.com\/16?category=877924\">https:\/\/temp123.tistory.com\/16?category=877924<\/a><\/p>\n\n\n\n<p><a href=\"https:\/\/hyeyoo.com\/85\">https:\/\/hyeyoo.com\/85<\/a><\/p>\n\n\n\n<p>\uc778\ud130\ub7fd\ud2b8\ub97c \ub9cc\ub4e4\uc5b4\uc57c \ud655\uc778\ud560 \uc218 \uc788\ub2e4.  \ub9ac\ub205\uc2a4\uac00 \uc81c\uacf5\ud558\ub294 \uba85\ub839\uc5b4\ub85c gpio\ub97c \uc27d\uac8c \ucee8\ud2b8\ub864 \ud560 \uc218 \uc788\ub2e4. \ub2f9\uc5f0\ud558\uac8c\ub3c4 \ucd9c\ub825\uc73c\ub85c \uc124\uc815\ud558\uace0 \uac12\uc744 \uc368\uc57c\ud55c\ub2e4.<\/p>\n\n\n\n<p><a href=\"https:\/\/infoarts.tistory.com\/21\">https:\/\/infoarts.tistory.com\/21<\/a><\/p>\n\n\n\n<p>\ub3cc\uace0 \ub3cc\uc544 \uc7a5\uce58\ub97c \ucd94\uac00\ud558\uace0, \uc778\ud130\ub7fd\ud2b8\ub97c \ub9cc\ub4e4\uc5b4 softirq\ub97c \uc2e4\ud589\ud588\ub2e4. tutorial site\uc5d0 \uc798 \uc124\uba85\ub418\uc5b4 \uc788\ub2e4. \ub098\uc911\uc5d0 \ub514\ubc14\uc774\uc2a4 read, write\ub97c \uc778\ud130\ub7fd\ud2b8\ub85c \uc124\uc815\ud560 \uc218\ub3c4 \uc788\uc744 \ub4ef \ud558\ub2e4.<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">i@raspberrypi:~\/RaspberryDebug\/my_driver $ cat Makefile\nobj-m := my_driver.o\n#obj-m := sample_driver.o\nall:\n\tmake -C \/lib\/modules\/`uname -r`\/build M=`pwd` modules\nclean:\n\trm *.o *.ko *.mod  *.mod.c *.mod.o\n<\/pre>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"c\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">#include &lt;linux\/module.h>\n#include &lt;linux\/kernel.h>\n#include &lt;linux\/init.h>\n#include &lt;linux\/irq.h>\n#include &lt;linux\/interrupt.h>\n#include &lt;linux\/gpio.h>     \/\/GPIO\n\n#include &lt;linux\/fs.h>\n#include &lt;linux\/cdev.h>\n#include &lt;linux\/device.h>\n\n#define GPIO_10_OUT (10)\nunsigned int GPIO_irqNumber;\n\n\/\/softirq handler\nstatic void pesudo_interrupt_softirq_handler(struct softirq_action *action)\n{\n\tpr_info(\"pesudo interreupt occured\\n\");\n}\n\n\nstatic irqreturn_t gpio_irq_handler(int irq, void *dev_id)\n{\n\t\/* Raise the softirq *\/\n\traise_softirq(TEST_SOFT_IRQ);\n\treturn IRQ_HANDLED;\n\n}\n\n\n\/\/device driver \\uc791\\uc131 \\ubd80\\ubd84.\n\/*************\\ub4dc\\ub77c\\uc774\\ubc84 \\ud568\\uc218 ******************\/\nstatic int mydriver_open(struct inode *inode, struct file *file);\nstatic int mydriver_release(struct inode *inode, struct file *file);\nstatic ssize_t mydriver_read(struct file *flip,\n\t\tchar *buf, size_t len, loff_t *off);\nstatic ssize_t mydriver_write(struct file *flip,\n\t\tconst char *buf, size_t len, loff_t *off);\n\/********************************************\/\n\n\n\/\/file operation structure\n\nstatic struct file_operations fops = \n{\n\t.owner = THIS_MODULE,\n\t.read = mydriver_read,\n\t.write = mydriver_write,\n\t.open = mydriver_open,\n\t.release = mydriver_release,\n};\n\nstatic int mydriver_open(struct inode *inode, struct file *file)\n{\n\tpr_info(\"Deviced file was opend.\\n\");\n\treturn 0;\n\n}\n\nstatic int mydriver_release(struct inode *inode, struct file *file)\n{\n\treturn 0;\n}\n\n\nstatic int mydriver_read(struct file *flip,\n\t\tchar *buf, size_t len, loff_t *off)\n{\n\n\treturn 0;\n}\n\nstatic int mydriver_write(struct file *flip,\n\t\tconst char *buf, size_t len, loff_t *off)\n{\n\treturn 0;\n\n}\n\ndev_t dev = 0;\nstatic struct cdev my_cdev;\nstatic struct class *dev_class;\n\nstatic int __init init_hw(void)\n{\n\t\/\/\\ub514\\ubc14\\uc774\\uc2a4 \\ub4f1\\ub85d\n\tif(( alloc_chrdev_region(&amp;dev, 0, 1, \"test_device\") &lt; 0))\n\t{\n\t\tpr_err(\"[!]character device was not allocated\\n\");\n\t\tgoto r_unreg;\n\n\t}\n\tpr_info(\"[=]%d-%d, was allocated\\n\", MAJOR(dev), MINOR(dev));\n\n\n\t\/\/\\ucd08\\uae30\\ud654\n\tcdev_init(&amp;my_cdev, &amp;fops);\n\tpr_info(\"[=]driver was initialized\\n\");\n\t\n\n\t\/\/\\uc2dc\\uc2a4\\ud15c\\uc5d0 \\ucd94\\uac00\n\tif((cdev_add(&amp;my_cdev, dev, 1)) &lt; 0)\n\t{\n\t\tpr_err(\"[!]cannot add device to kernel\\n\");\n\t\tgoto r_del;\n\n\t}\n\n\n\t\/\/class \\ub9cc\\ub4e6.\n\tif((dev_class=class_create(THIS_MODULE, \"my_class\")) == NULL)\n\t{\n\t\tpr_err(\"[!]cannot add class\\n\");\n\t\tgoto r_class;\n\t}\n\n\n\tif((device_create(dev_class, NULL, dev, NULL, \"my_device\")) == NULL)\n\t{\n\n\t\tpr_err(\"[!]cannot create device\\n\");\n\t\tgoto r_device;\n\t}\n\t\n\t\/\/gpio 10\\ubc88\\uc744 \\uc0ac\\uc6a9.\n\t\/\/export\\ud558\\uc5ec \\uac04\\ub2e8\\ud788 \\uc0ac\\uc6a9.\n\t\/\/\\uc785\\ub825\\uc740 \\uac12\\uc744 \\uc368 \\ub123\\uc744 \\uc218 \\uc5c6\\uc74c. \\ucd9c\\ub825\\uc73c\\ub85c \\uc124\\uc815.\n\tGPIO_irqNumber = gpio_to_irq(GPIO_10_OUT);\n\tpr_info(\"[=]irq %d was assinged\\n\",GPIO_irqNumber);\n\t\n\t\/\/interrupt \\ub4f1\\ub85d \\ud544\\uc694\n\tif (request_irq(GPIO_irqNumber,\n\t\t\t\t(void*)gpio_irq_handler,\n\t\t\t\tIRQF_TRIGGER_RISING,\n\t\t\t\t\"my_device\",\n\t\t\t\tNULL))\n\t{\n\t\tpr_err(\"[!]my_device: cannot register IRQ\\n\");\n\t\tgoto r_gpio;\n\t}\n\t\n\topen_softirq(TEST_SOFT_IRQ, pesudo_interrupt_softirq_handler);\n\tpr_info(\"[=]module was installed\\n\");\n\treturn 0;\nr_gpio:\n\tgpio_free(GPIO_10_OUT);\nr_device:\n\tdevice_destroy(dev_class,dev);\n\nr_class:\n\tclass_destroy(dev_class);\nr_del:\n\tcdev_del(&amp;my_cdev);\nr_unreg:\n\tunregister_chrdev_region(dev,1);\n\nreturn -1;\n}\n\nstatic void __exit exit_hw(void) {\n\tdevice_destroy(dev_class,dev);\n\tclass_destroy(dev_class);\n\tcdev_del(&amp;my_cdev);\n\tunregister_chrdev_region(dev,1);\n\tprintk(KERN_INFO \"module was removed\\n\");\n}\n\n\nmodule_init(init_hw);\nmodule_exit(exit_hw);\nMODULE_LICENSE(\"GPL\");\nMODULE_AUTHOR(\"Eunseong Park (esp-ark.com)\");\nMODULE_DESCRIPTION(\"Hello, world!\");\n<\/pre>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">pi@raspberrypi:~\/RaspberryDebug\/my_driver $ echo \"10\" > \/sys\/class\/gpio\/export\npi@raspberrypi:~\/RaspberryDebug\/my_driver $ echo \"out\" > \/sys\/class\/gpio\/gpio10\/direction \npi@raspberrypi:~\/RaspberryDebug\/my_driver $ gpio read 10\n1\npi@raspberrypi:~\/RaspberryDebug\/my_driver $ echo 0 > \/sys\/class\/gpio\/gpio10\/value ; echo 1 > \/sys\/class\/gpio\/gpio10\/value;\npi@raspberrypi:~\/RaspberryDebug\/my_driver $ echo 0 > \/sys\/class\/gpio\/gpio10\/value ; echo 1 > \/sys\/class\/gpio\/gpio10\/value;\npi@raspberrypi:~\/RaspberryDebug\/my_driver $ echo 0 > \/sys\/class\/gpio\/gpio10\/value ; echo 1 > \/sys\/class\/gpio\/gpio10\/value;\n<\/pre>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">[  281.496011] my_driver: loading out-of-tree module taints kernel.\n[  281.496218] my_driver: no symbol version for raise_softirq\n[  281.496487] [=]236-0, was allocated\n[  281.496492] [=]driver was initialized\n[  281.496679] [=]irq 54 was assinged\n[  281.496713] [=]module was installed\n[  439.643072] pesudo interreupt occured\npi@raspberrypi:\/sys\/class\/gpio $ dmesg | tail -10;cat \/proc\/softirqs \n[   21.513881] input: Keyboard K480 Consumer Control as \/devices\/platform\/soc\/fe201000.serial\/tty\/ttyAMA0\/hci0\/hci0:11\/0005:046D:B33C.0003\/input\/input5\n[   21.514017] input: Keyboard K480 System Control as \/devices\/platform\/soc\/fe201000.serial\/tty\/ttyAMA0\/hci0\/hci0:11\/0005:046D:B33C.0003\/input\/input6\n[   21.514160] hid-generic 0005:046D:B33C.0003: input,hidraw2: BLUETOOTH HID v28.02 Keyboard [Keyboard K480] on e4:5f:01:06:e9:01\n[  281.496011] my_driver: loading out-of-tree module taints kernel.\n[  281.496218] my_driver: no symbol version for raise_softirq\n[  281.496487] [=]236-0, was allocated\n[  281.496492] [=]driver was initialized\n[  281.496679] [=]irq 54 was assinged\n[  281.496713] [=]module was installed\n[  439.643072] pesudo interreupt occured\n                    CPU0       CPU1       CPU2       CPU3       \n          HI:          1          0          0          0\n       TIMER:      18713      21705      20854      19911\n      NET_TX:         95         49        315         19\n      NET_RX:       1125        324       1051        398\n       BLOCK:          0          0          0          0\n    IRQ_POLL:          0          0          0          0\n     TASKLET:      44263        453        587        288\n       SCHED:      17064      20646      19843      18418\n     HRTIMER:          0          0          0          0\n         RCU:      19242      23191      20816      20212\n      (null):          1          0          0          0\npi@raspberrypi:\/sys\/class\/gpio $ dmesg | tail -10;cat \/proc\/softirqs \n[   21.514017] input: Keyboard K480 System Control as \/devices\/platform\/soc\/fe201000.serial\/tty\/ttyAMA0\/hci0\/hci0:11\/0005:046D:B33C.0003\/input\/input6\n[   21.514160] hid-generic 0005:046D:B33C.0003: input,hidraw2: BLUETOOTH HID v28.02 Keyboard [Keyboard K480] on e4:5f:01:06:e9:01\n[  281.496011] my_driver: loading out-of-tree module taints kernel.\n[  281.496218] my_driver: no symbol version for raise_softirq\n[  281.496487] [=]236-0, was allocated\n[  281.496492] [=]driver was initialized\n[  281.496679] [=]irq 54 was assinged\n[  281.496713] [=]module was installed\n[  439.643072] pesudo interreupt occured\n[  471.316929] pesudo interreupt occured\n                    CPU0       CPU1       CPU2       CPU3       \n          HI:          1          0          0          0\n       TIMER:      18828      21849      21047      20104\n      NET_TX:         95         49        321         19\n      NET_RX:       1125        324       1063        398\n       BLOCK:          0          0          0          0\n    IRQ_POLL:          0          0          0          0\n     TASKLET:      44459        453        609        288\n       SCHED:      17173      20815      20069      18623\n     HRTIMER:          0          0          0          0\n         RCU:      19350      23343      20917      20386\n      (null):          2          0          0          0\npi@raspberrypi:\/sys\/class\/gpio $ dmesg | tail -10;cat \/proc\/softirqs \n[   21.514160] hid-generic 0005:046D:B33C.0003: input,hidraw2: BLUETOOTH HID v28.02 Keyboard [Keyboard K480] on e4:5f:01:06:e9:01\n[  281.496011] my_driver: loading out-of-tree module taints kernel.\n[  281.496218] my_driver: no symbol version for raise_softirq\n[  281.496487] [=]236-0, was allocated\n[  281.496492] [=]driver was initialized\n[  281.496679] [=]irq 54 was assinged\n[  281.496713] [=]module was installed\n[  439.643072] pesudo interreupt occured\n[  471.316929] pesudo interreupt occured\n[  477.954727] pesudo interreupt occured\n                    CPU0       CPU1       CPU2       CPU3       \n          HI:          1          0          0          0\n       TIMER:      18963      22041      21297      20379\n      NET_TX:         95         50        325         19\n      NET_RX:       1128        326       1068        409\n       BLOCK:          0          0          0          0\n    IRQ_POLL:          0          0          0          0\n     TASKLET:      44749        453        647        288\n       SCHED:      17324      21034      20344      18910\n     HRTIMER:          0          0          0          0\n         RCU:      19496      23548      21158      20547\n      (null):          3          0          0          0\npi@raspberrypi:\/sys\/class\/gpio $ sudo rmmod my_driver \npi@raspberrypi:\/sys\/class\/gpio $ dmesg | tail -10;cat \/proc\/softirqs \n[  281.496011] my_driver: loading out-of-tree module taints kernel.\n[  281.496218] my_driver: no symbol version for raise_softirq\n[  281.496487] [=]236-0, was allocated\n[  281.496492] [=]driver was initialized\n[  281.496679] [=]irq 54 was assinged\n[  281.496713] [=]module was installed\n[  439.643072] pesudo interreupt occured\n[  471.316929] pesudo interreupt occured\n[  477.954727] pesudo interreupt occured\n[  497.174610] module was removed\n                    CPU0       CPU1       CPU2       CPU3       \n          HI:          1          0          0          0\n       TIMER:      19416      22394      21661      20809\n      NET_TX:         95         50        335         19\n      NET_RX:       1141        331       1087        409\n       BLOCK:          0          0          0          0\n    IRQ_POLL:          0          0          0          0\n     TASKLET:      45416        479        678        288\n       SCHED:      17800      21462      20753      19347\n     HRTIMER:          0          0          0          0\n         RCU:      19908      23925      21541      20832\n      (null):          3          0          0          0<\/pre>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">pi@raspberrypi:\/sys\/class\/gpio $ cat \/proc\/interrupts \n           CPU0       CPU1       CPU2       CPU3       \n 17:          0          0          0          0     GICv2  29 Level     arch_timer\n 18:      13237       9026       7126      13623     GICv2  30 Level     arch_timer\n 23:        352          0          0          0     GICv2 114 Level     DMA IRQ\n 31:       3111          0          0          0     GICv2  65 Level     fe00b880.mailbox\n 34:       8655          0          0          0     GICv2 153 Level     uart-pl011\n 35:          0          0          0          0     GICv2 169 Level     brcmstb_thermal\n 36:      33671          0          0          0     GICv2 158 Level     mmc1, mmc0\n 37:      17923          0          0          0     GICv2 144 Level     vc4 firmware kms\n 38:          0          0          0          0     GICv2  48 Level     arm-pmu\n 39:          0          0          0          0     GICv2  49 Level     arm-pmu\n 40:          0          0          0          0     GICv2  50 Level     arm-pmu\n 41:          0          0          0          0     GICv2  51 Level     arm-pmu\n 42:       8559          0          0          0     GICv2 106 Level     v3d\n 44:       1557          0          0          0     GICv2 189 Level     eth0\n 45:         52          0          0          0     GICv2 190 Level     eth0\n 51:        707          0          0          0     GICv2  66 Level     VCHIQ doorbell\n 52:          0          0          0          0     GICv2 175 Level     PCIe PME, aerdrv\n 53:       1053          0          0          0  Brcm_MSI 524288 Edge      xhci_hcd\n 54:          2          0          0          0  pinctrl-bcm2835  10 Edge      my_device\nIPI0:          0          0          0          0  CPU wakeup interrupts\nIPI1:          0          0          0          0  Timer broadcast interrupts\nIPI2:      12130      21051      27290      15651  Rescheduling interrupts\nIPI3:        785       1597       1554       1937  Function call interrupts\nIPI4:          0          0          0          0  CPU stop interrupts\nIPI5:        793        414        433        246  IRQ work interrupts\nIPI6:          0          0          0          0  completion interrupts\nErr:          0\n<\/pre>\n\n\n\n<p>\uc790 \uc774\uc81c \ucee4\ub110\uc744 \ub2e4\uc2dc \ub3cc\ub9ac\uace0 tasklet\uc73c\ub85c \uac00\uc790. <s>\ub4dc\ub77c\uc774\ubc84\ub97c \uc5b8\ub85c\ub529\ud558\uace0 cat \/proc\/interrupt\ub97c \ud558\uba74 \uc2dc\uc2a4\ud15c\uc774 \uc5b4\uca43\ub4e0 \uc8fd\ub294\ub2e4.<\/s> softirq \ubb38\uc81c\uac00 \uc544\ub2c8\ub77c, \uc778\ud130\ub7fd\ud2b8 \ud578\ub4e4\ub7ec\ub97c \ud574\uc81c\ud558\uc9c0 \uc54a\uc544\uc11c \uc8fd\uc5c8\ub2e4.<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">pi@raspberrypi:~\/RaspberryDebug\/my_driver $ diff my_driver.c my_driver.c.bak\n164d163\n&lt; \tfree_irq(GPIO_irqNumber, NULL);\n<\/pre>\n","protected":false},"excerpt":{"rendered":"<p>\uc778\ud130\ub7fd\ud2b8 \ud6c4\ubc18\ubd80\ub97c \ucc98\ub9ac\ud558\ub294 soft irq\ub97c \ubc30\uc6e0\ub2e4. \uc790 \uc774\uc81c \uc0ac\uc6a9\ud574 \ubcf4\uc790. \ubd88\ud589\ud788\ub3c4 \uc694\uc998\uc740 \uc77c\ubc18\ud654\ub41c tasklet\uc744 \uc0ac\uc6a9\ud558\uace0 low level\uc778 soft irq\ub97c \uc0ac\uc6a9\ud558\uc9c0 [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":4676,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"site-sidebar-layout":"default","site-content-layout":"","ast-site-content-layout":"default","site-content-style":"default","site-sidebar-style":"default","ast-global-header-display":"","ast-banner-title-visibility":"","ast-main-header-display":"","ast-hfb-above-header-display":"","ast-hfb-below-header-display":"","ast-hfb-mobile-header-display":"","site-post-title":"","ast-breadcrumbs-content":"","ast-featured-img":"","footer-sml-layout":"","ast-disable-related-posts":"","theme-transparent-header-meta":"","adv-header-id-meta":"","stick-header-meta":"","header-above-stick-meta":"","header-main-stick-meta":"","header-below-stick-meta":"","astra-migrate-meta-layouts":"default","ast-page-background-enabled":"default","ast-page-background-meta":{"desktop":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"tablet":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"mobile":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""}},"ast-content-background-meta":{"desktop":{"background-color":"var(--ast-global-color-4)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"tablet":{"background-color":"var(--ast-global-color-4)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"mobile":{"background-color":"var(--ast-global-color-4)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""}},"jetpack_post_was_ever_published":false,"_jetpack_newsletter_access":"","_jetpack_dont_email_post_to_subs":false,"_jetpack_newsletter_tier_id":0,"_jetpack_memberships_contains_paywalled_content":false,"_jetpack_memberships_contains_paid_content":false,"footnotes":""},"categories":[12],"tags":[53,798,932,912],"class_list":["post-4669","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-12","tag-linux","tag-raspberry","tag-softirq","tag-912"],"jetpack_featured_media_url":"https:\/\/now0930.pe.kr\/wordpress\/wp-content\/uploads\/2021\/07\/softirq-e1625500971727.jpg","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/now0930.pe.kr\/wordpress\/wp-json\/wp\/v2\/posts\/4669","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/now0930.pe.kr\/wordpress\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/now0930.pe.kr\/wordpress\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/now0930.pe.kr\/wordpress\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/now0930.pe.kr\/wordpress\/wp-json\/wp\/v2\/comments?post=4669"}],"version-history":[{"count":9,"href":"https:\/\/now0930.pe.kr\/wordpress\/wp-json\/wp\/v2\/posts\/4669\/revisions"}],"predecessor-version":[{"id":4683,"href":"https:\/\/now0930.pe.kr\/wordpress\/wp-json\/wp\/v2\/posts\/4669\/revisions\/4683"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/now0930.pe.kr\/wordpress\/wp-json\/wp\/v2\/media\/4676"}],"wp:attachment":[{"href":"https:\/\/now0930.pe.kr\/wordpress\/wp-json\/wp\/v2\/media?parent=4669"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/now0930.pe.kr\/wordpress\/wp-json\/wp\/v2\/categories?post=4669"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/now0930.pe.kr\/wordpress\/wp-json\/wp\/v2\/tags?post=4669"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}