linux ps2键盘驱动,Linux下USB模拟ps2鼠标驱动
在linu-kernel/drivers/input/mouse/psmouse-base.c是ps2鼠标驱动的主体,如psmouse_reset、psmouse_connect等函数具体实现在此文件之中。
简单地,拿psmouse_reset为例,调用ps2_command()->ps2_sendbyte()->serio_write()来完成对硬件的操作。而serio_write()在已经指定。
static int __devinit i8042_create_aux_port(void)
{
struct serio *serio;
struct i8042_port *port = &i8042_ports[I8042_AUX_PORT_NO];
serio = kzalloc(sizeof(struct serio), GFP_KERNEL);
if (!serio)
return -ENOMEM;
serio->id.type = SERIO_8042;
serio->write = i8042_aux_write;
serio->open = i8042_open;
serio->close = i8042_close;
serio->start = i8042_start;
serio->stop = i8042_stop;
serio->port_data = port;
serio->dev.parent = &i8042_platform_device->dev;
strlcpy(serio->name, "i8042 Aux Port", sizeof(serio->name));
strlcpy(serio->phys, I8042_AUX_PHYS_DESC, sizeof(serio->phys));
port->serio = serio;
return i8042_port_register(port);
i8042_aux_write()会调用i8042_command()来完成对60/64口的操作。
(注意,操作端口前必须disable_keyboard,完成后enable_keyboard)
截取了鼠标初始化的log如下:
60 -> i8042 (command)
47 -> i8042 (parameter) //配置8042控制器
d4 -> i8042 (command) //针对鼠标操作
f2 -> i8042 (parameter) //getid命令
interrupt: read status (0x3d)
interrupt: read data (0xfa) //ACK应答,如果是FE的话,说明返回错误。
但是在LINUX中若使用PS2鼠标驱动,屏蔽掉USB鼠标驱动的话,在某些平台上会出现返回FE的错误,以至于鼠标驱动加载失败,通过DOS下的ctmouse驱动可以看到,psmouse驱动使用int15/c2xx来完成初始化。所以在linux启动的实模式期间,调用int15来实现鼠标驱动初始化工作。
在/arch/i386/boot/setup.S中添加如下代码:
start_of_setup:
+# Fix ULOS mouse BUG
+ pushw %ax
+ pushw %bx
+ pushw %es
+
+ xorw %bx, %bx
+ movw %cs, %ax
+ movw %ax, %es
+ movw $0x0c207, %ax
+ int $0x15
+
+ movw $0x0c200, %ax
+ movw $0x0100, %bx
+ int $0x15
+
+ movb $0xa7, %al
+ outb %al, $0x64 # disable mouse
+ call delay
+
+ popw %es
+ popw %bx
+ popw %ax
# Bootlin depends on this being done early
movw $0x01500, %ax
movb $0x81, %dl
linux ps2键盘驱动,Linux下USB模拟ps2鼠标驱动相关推荐
- linux模拟usb发包,Linux下USB模拟ps2鼠标驱动
在linu-kernel/drivers/input/mouse/psmouse-base.c是ps2鼠标驱动的主体,如psmouse_reset.psmouse_connect等函数具体实现在此文件 ...
- android自动连接设备驱动,M8_Android下USB连接S3C6410 ADB驱动安装图文教程
随着M8_Android系统的日渐完善,体验android下丰富的软件资源也是每位刷机玩家内心所渴望的.而目前最大的困扰在于,M8_Android下连接电脑时,系统无法为其自动安装驱动,导致连接不可用 ...
- PS2 键盘在win10下开机过程 收发的数据
键盘向电脑发送数据的时序,理论是这样的 电脑向键盘发送数据,理论是这样的: 我总结了一句话 PS2 设备到主机DtoH: 低脉冲内电平稳定 主机到设备HtoD: 高脉冲 ...
- Linux环境下USB的原理、驱动和配置
什么是USB? USB是英文Universal Serial Bus的缩写,意为通用串行总线.USB最初是为了替代许多不同的低速总线(包括并行.串行和键盘连接)而设计的,它以单一类型的总线连接各种不同 ...
- linux下usb驱动配置文件,Linux环境下USB的原理、驱动和配置
随着生活水平的提高,人们对USB设备的使用也越来越多,鉴于Linux在硬件配置上尚不能全部即插即用,因此关于Linux如何配置和使用,成为困扰我们的一大问题.本文引用地址:http://www.eep ...
- linux ps2键盘不能用,解决usb鼠标与ps2键盘合用时开机键盘失效
昨晚熬夜安装mac os 10.6.3 ,跟着教程一步一步走,终于晚装完毕. 进入mac后发现,ps2接口的键盘无法使用,usb鼠标正常使用. 由于经常捣鼓windows和咱的机箱,下意识想到拔掉键盘 ...
- linux usb驱动u盘启动不了,Linux环境下USB的原理、驱动和配置(4)
在探测函数中会对每一个接口进行一次探测,所以我们在写USB驱动程序的时候,只要做好第一个端点,其它的端点就会自动完成探测.在探测函数中我们要注意的是在内核中用结构体struct usb_host_en ...
- 嵌入式linux矩阵键盘,嵌入式linux matrix_keypad矩阵键盘驱动
ARM:AM3517 linux2.6.37 TI官方开发板AM3517EVM 我想移植一个8*5的GPIO矩阵键盘,在linux源码/drivers/input/目录下有很多种键盘驱动程序,但是 能 ...
- linux查看键盘命令,linux下的键盘检测
话说,仅仅是一个键盘检测就好麻烦.我还是懂的太少了... #include #include #include #include #include #include #include #include ...
最新文章
- 关于 智能指针 的线程安全问题
- HTML中Css详细介绍
- 设计模式学习笔记二:简单工厂模式
- Redis进阶-Redis键值设计及BigKey问题
- Ubuntu下ICE-3.4.2的安装
- [转载] Win7下MATLAB 7.0下载地址和详细安装
- java 默认网关,java 获得默认网关 和 子网掩码 本机
- 「权威发布」2019年大学生电子设计竞赛题目
- SVN之如何解决从一个svn路径下载项目快速提交到其它svn路径
- 博客园代码黑色主题高亮设置
- 需求分析——使用类图建模
- 使用ASP.NET MVC对用户组的自定义授权
- (转载)VS2010/MFC编程入门之五十二(Ribbon界面开发:创建Ribbon样式的应用程序框架)...
- cass有坐标文件生成里程文件_【视频】南方cass9.0进阶教程74.3生成里程文件3
- 电力安全工作规程发电厂和变电站电气部分_全国勘察设计注册电气工程师(发输变电)专业考试标准、规范目录...
- 我敲,原来滚动监听可以酱紫写
- openjudge 1.13.1 数制转换
- 视频编码之I,P,B帧
- 问题 D: 上帝视角
- 朴素贝叶斯(西瓜数据集分类,社区恶意留言分类,垃圾邮件分类,新浪新闻分类),AODE分类器 代码实现