一 休眠唤醒:
- 中断上下文不能够休眠;
进程/线程上下文可以休眠。
所以,一般在进程上下文中调用比较复杂的耗时间的函数和操作(I2C总线传输/SPI总线传输/Uart传输等) - 关于上机试验:
root@ALIENTEK-IMX6U:/mnt/linux-imx-4.1.15-2.1.0/source/02_read_key_irq# insmod gpio_key_drv.ko
/home/book/linux-imx-4.1.15-2.1.0/source/02_read_key_irq/gpio_key_drv.c gpio_key_init line 175
/home/book/linux-imx-4.1.15-2.1.0/source/02_read_key_irq/gpio_key_drv.c gpio_key_probe line 90
root@ALIENTEK-IMX6U:/mnt/linux-imx-4.1.15-2.1.0/source/02_read_key_irq# ls
Makefile Module.symvers button_test button_test.c gpio_key_drv.c gpio_key_drv.ko gpio_key_drv.mod.c gpio_key_drv.mod.o gpio_key_drv.o modules.order
root@ALIENTEK-IMX6U:/mnt/linux-imx-4.1.15-2.1.0/source/02_read_key_irq# ls /dev/100ask_gpio_key
/dev/100ask_gpio_key
root@ALIENTEK-IMX6U:/mnt/linux-imx-4.1.15-2.1.0/source/02_read_key_irq# ./button_test /dev/100ask_gpio_key
key 18 0
get button : 0x1200
key 18 1
get button : 0x1201
key 18 0
get button : 0x1200
key 18 1
get button : 0x1201
root@ALIENTEK-IMX6U:/mnt/linux-imx-4.1.15-2.1.0/source/02_read_key_irq# ps
PID TTY TIME CMD
630 ttymxc0 00:00:00 sh
660 ttymxc0 00:00:00 button_test
662 ttymxc0 00:00:00 ps
root@ALIENTEK-IMX6U:/mnt/linux-imx-4.1.15-2.1.0/source/02_read_key_irq# kill -9 660
root@ALIENTEK-IMX6U:/mnt/linux-imx-4.1.15-2.1.0/source/02_read_key_irq# ps
PID TTY TIME CMD
630 ttymxc0 00:00:00 sh
663 ttymxc0 00:00:00 ps
[1]+ Killed ./button_test /dev/100ask_gpio_key
二 异步通知:发信号
- 关于linux控制台kill命令:杀掉一个进程
kill -9 xxx(进程号)
-9:指代的信号是SIGKILL信号
- 关于linux驱动程序kill_fasync函数:
与1.功能完全一致;
kill_fasync(PID,SIGIO);
三 mmap:MMU和虚拟地址
- MMU:用于把CPU使用的虚拟地址转换为物理地址;
- 虚拟地址例子:
(1)r-xp(私有数据):x表示可执行属性,表示代码区;
(2)rw-p:可读可写,表示数据区;或者heap区;或者stack区