在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鼠标驱动相关推荐

  1. linux模拟usb发包,Linux下USB模拟ps2鼠标驱动

    在linu-kernel/drivers/input/mouse/psmouse-base.c是ps2鼠标驱动的主体,如psmouse_reset.psmouse_connect等函数具体实现在此文件 ...

  2. android自动连接设备驱动,M8_Android下USB连接S3C6410 ADB驱动安装图文教程

    随着M8_Android系统的日渐完善,体验android下丰富的软件资源也是每位刷机玩家内心所渴望的.而目前最大的困扰在于,M8_Android下连接电脑时,系统无法为其自动安装驱动,导致连接不可用 ...

  3. PS2 键盘在win10下开机过程 收发的数据

    键盘向电脑发送数据的时序,理论是这样的 电脑向键盘发送数据,理论是这样的: 我总结了一句话 PS2  设备到主机DtoH:     低脉冲内电平稳定        主机到设备HtoD:     高脉冲 ...

  4. Linux环境下USB的原理、驱动和配置

    什么是USB? USB是英文Universal Serial Bus的缩写,意为通用串行总线.USB最初是为了替代许多不同的低速总线(包括并行.串行和键盘连接)而设计的,它以单一类型的总线连接各种不同 ...

  5. linux下usb驱动配置文件,Linux环境下USB的原理、驱动和配置

    随着生活水平的提高,人们对USB设备的使用也越来越多,鉴于Linux在硬件配置上尚不能全部即插即用,因此关于Linux如何配置和使用,成为困扰我们的一大问题.本文引用地址:http://www.eep ...

  6. linux ps2键盘不能用,解决usb鼠标与ps2键盘合用时开机键盘失效

    昨晚熬夜安装mac os 10.6.3 ,跟着教程一步一步走,终于晚装完毕. 进入mac后发现,ps2接口的键盘无法使用,usb鼠标正常使用. 由于经常捣鼓windows和咱的机箱,下意识想到拔掉键盘 ...

  7. linux usb驱动u盘启动不了,Linux环境下USB的原理、驱动和配置(4)

    在探测函数中会对每一个接口进行一次探测,所以我们在写USB驱动程序的时候,只要做好第一个端点,其它的端点就会自动完成探测.在探测函数中我们要注意的是在内核中用结构体struct usb_host_en ...

  8. 嵌入式linux矩阵键盘,嵌入式linux matrix_keypad矩阵键盘驱动

    ARM:AM3517 linux2.6.37 TI官方开发板AM3517EVM 我想移植一个8*5的GPIO矩阵键盘,在linux源码/drivers/input/目录下有很多种键盘驱动程序,但是 能 ...

  9. linux查看键盘命令,linux下的键盘检测

    话说,仅仅是一个键盘检测就好麻烦.我还是懂的太少了... #include #include #include #include #include #include #include #include ...

最新文章

  1. 关于 智能指针 的线程安全问题
  2. HTML中Css详细介绍
  3. 设计模式学习笔记二:简单工厂模式
  4. Redis进阶-Redis键值设计及BigKey问题
  5. Ubuntu下ICE-3.4.2的安装
  6. [转载] Win7下MATLAB 7.0下载地址和详细安装
  7. java 默认网关,java 获得默认网关 和 子网掩码 本机
  8. 「权威发布」2019年大学生电子设计竞赛题目
  9. SVN之如何解决从一个svn路径下载项目快速提交到其它svn路径
  10. 博客园代码黑色主题高亮设置
  11. 需求分析——使用类图建模
  12. 使用ASP.NET MVC对用户组的自定义授权
  13. (转载)VS2010/MFC编程入门之五十二(Ribbon界面开发:创建Ribbon样式的应用程序框架)...
  14. cass有坐标文件生成里程文件_【视频】南方cass9.0进阶教程74.3生成里程文件3
  15. 电力安全工作规程发电厂和变电站电气部分_全国勘察设计注册电气工程师(发输变电)专业考试标准、规范目录...
  16. 我敲,原来滚动监听可以酱紫写
  17. openjudge 1.13.1 数制转换
  18. 视频编码之I,P,B帧
  19. 问题 D: 上帝视角
  20. 朴素贝叶斯(西瓜数据集分类,社区恶意留言分类,垃圾邮件分类,新浪新闻分类),AODE分类器 代码实现

热门文章

  1. OLE程序开发利用(开发EXCEL) 之 一
  2. linux看不到进程管理,关于Linux下进程的详解【进程查看与管理】
  3. 【敏捷】1.0 待办事项列表
  4. JAVA学习笔记JEECG BOOT介绍
  5. PCB设计中数字地、模拟地、数字电源、模拟电源的处理方式
  6. python:.py文件转.dll文件(.pyd文件)
  7. Latex写文章时插入单栏图片和双栏图片方法
  8. (42)2021-03-01(物体运动、swiper软件、自执行函数)
  9. 交通 流量 时间序列预测,神经网络 机器学习 BPNN
  10. Python与R的区别与联系