定时中断键盘灯闪烁
在学习完《趣味定时器》后,是不是只在dmesg里看到效果很没劲,这次来点更实际的,我们让键盘灯闪起来。 对于定时器,就不多说了,接下来了解下键盘的基本内容。 键盘在Linux里是属于TTY(TeleTYpe)设备,既然我们要用到键盘,那先找其通用驱动代码,在Linux Kernel源码drivers/tty/vt/keyboard.c文件,我们找到需要的LED灯控制函数: void setledstate(struct kbd_struct kbd, unsigned int led) ; 该函数被在同一文件的vt_do_kdskled()函数调用,而这函数又被drivers/tty/vt/vt_ioctl.c文件的vt_ioctl()函数调用,这函数是drivers/tty/vt/vt.c里 struct tty_operations con_ops的ioctl成员,在同一文件vty_init()函数里有如下语句: tty_set_operations(console_driver, &con_ops); 将 console_driver->ops赋值为&con_ops,而console_driver是如下类型: struct tty_driver *console_driver; 该结构体在include/linux/tty_driver.h定义,其被include/linux/tty.h文件中的struct tty_struct结构体包含,其又被同文件的struct tty_port结构体包含。 而我们在 drivers/tty/vt/vt_ioctl.c文件中有看到vt_disallocate_all()函数里有tty_port_destroy(&vc[i]->port); 操作,那么找到vc就可以关联起来,在include/linux/console_struct.h文件中有vc的类型struct vc_data结构体定义,而在drivers/tty/vt/selection.c文件中的set_selection()函数里有struct vc_data *vc = vc_cons[fg_console].d; 赋值操作,那么往下找vc_cons,其在drivers/tty/vt/vt.c文件中定义为stru...