linux双内核怎么替换,Linux内核:如何捕获按键并用另一个键替换它?

考虑下一个简单的内核模块

#include

这是最简单和最原始的key-logger.它可以很容易地重新替换scan code.

免责声明

>此模块不是跨平台的(仅适用于x86架构,因为它使用的是inb()函数)

>我相信它只适用于PS / 2键盘(不适用于USB键盘)

>它在硬件IRQ处理程序中执行缓慢的I / O操作(我的意思是pr_info()),应该避免(理想情况下应该使用threaded IRQs)).

但我认为这对教育目的有好处 – 它非常小并且很好地展示了这个想法(没有搞乱像input_dev,input_register_device(),serio_write(),input_event(),input_report_key()等API).

细节

真正的中断处理程序(在keyboard driver中)作为共享中断请求,这允许我们也请求中断,从而在我们的ISR中处理它(除了原始键盘驱动程序中的ISR).中断请求在kbd2_init()中完成.

该模块的工作原理如下:

>捕获按键事件(为每个按键事件调用硬件中断处理程序kbd2_isr())

>读取按键的扫描码(通过inb()功能)

>并通过pr_info()打印

现在,您想要替换该扫描代码.我相信你可以使用outb()函数(在x86上).所以我留给你.

#else

# define I8042_KBD_IRQ 1

error = request_irq(I8042_KBD_IRQ,i8042_interrupt,"i8042",i8042_platform_device);

有用的常数

要避免使用magic numbers,您可以使用下一个定义.

/*

* Register numbers.

*/

#define I8042_COMMAND_REG 0x64

#define I8042_STATUS_REG 0x64

#define I8042_DATA_REG 0x60

/*

* Status register bits.

*/

#define I8042_STR_PARITY 0x80

#define I8042_STR_TIMEOUT 0x40

#define I8042_STR_AUXDATA 0x20

#define I8042_STR_KEYLOCK 0x10

#define I8042_STR_CMDDAT 0x08

#define I8042_STR_MUXERR 0x04

#define I8042_STR_IBF 0x02

#define I8042_STR_OBF 0x01

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值