_linux usb键盘驱动分析
1.linux如何改键盘
2.Linux-hexdump命令调试event驱动
3.如何在Linux下实现设备的配置
4.日文键盘在linux系统里如何使用
5.如何解决Linux下USB设备节点名不固定问题
6.树莓派openwrt不能使用无线键盘
驱动是内核的一部分,作为直接访问物理硬件的一个软件层,用于应用程序与物理硬件设备通信。内核包含多种驱动,如WIFI、USB、Audio、蓝牙、相机、显示驱动。
(1)设备驱动程序三类:字符设备驱动程序、块设备驱动程序、网络设备驱动程序;
(2)对应Linux三类设备:字符设备、块设备、网络设备;
(3)常见字符设备:鼠标、键盘、串口、控制台等;
(4)常见块设备:各种硬盘、flash磁盘、RAM磁盘等;
(5)网络设备(网络接口):eth0、eth1,注:网络设备没有设备节点,应用程序通过Socket访问网络设备。由于网络设备面向报文,较难实现相关read、write等文件读写函数,所以驱动的实现也与字符设备和块设备不同。
Linux使用对文件一样的管理方式来管理设备,所有设备都以文件的形式存放在/dev目录下,系统中的每个字符设备或者块设备都必须为其创建一个设备文件,它包含了该设备的设备类型(块设备或字符设备)、设备号(主设备号和次设备号)以及设备访问控制属性等。设备节点通过 mknod 命令创建,也可以由Udev用户工具软件在系统启动后根据/sys目录下每个设备的实际信息创建,使用后一种方式可以为每个设备动态分配设备号。
Linux中设备节点通过“mknod”命令创建,创建时需要指定主设备号和次设备号,即指定对应的驱动程序和对应的物理设备(访问设备节点时就相当于通过其设备号访问驱动程序进而间接访问到物理设备)。主设备号用来区分不同种类的设备,而次设备号用来区分同一类型的多个设备。对于常用设备,Linux有约定俗成的编号,如硬盘的主设备号是3
理解:应用程序通过访问设备节点读取主设备号和次设备号,通过主设备号找对应的驱动,通过次设备号对应到具体物理设备。注:1个驱动对应一类设备,并用唯一主设备号标识。
Linux支持的各种设备的主设备号定义在include/linux/major.件中,已经在官方注册的主设备号和次设备号在Documentation/devices.txt文件中。
Android系统最底层是Linux,并且在中间加上了一个Dalvik / ART的Ja虚拟机,从表面层看是Android运行库。每个Android应用都运行在自己的进程上,享有Dalvik / ART虚拟机为它分配的专有实例,并支持多个虚拟机在同一设备上高效运行,虚拟机执行的是专有格式的可执行文件(.dex) - 该格式经过优化,以将内存好用降到最低。
Android内核和Linux内核的差别主要体现在如下11个方面:
linux如何改键盘
第1章 嵌入式系统与驱动程序 1
本章目标 1
1.1 嵌入式系统概述 1
1.1.1 嵌入式系统的概念 1
1.1.2 嵌入式系统的特点 2
1.1.3 嵌入式系统的体系结构 2
1.2 嵌入式处理器介绍 4
1.2.1 嵌入式处理器分类 4
1.2.2 ARM概述 5
1.2.3 ARM系列芯片简介 5
1.3 嵌入式操作系统介绍 7
1.3.1 主流嵌入式操作系统 7
1.3.2 嵌入式系统的发展状况 8
1.3.3 嵌入式Linux介绍 8
1.3.4 嵌入式系统开发环境的建立 9
1.3.5 嵌入式软件开发 10
1.4 嵌入式Linux驱动程序 12
1.4.1 嵌入式Linux的内核空间和用户空间 12
1.4.2 嵌入式Linux的文件系统 12
1.4.3 嵌入式Linux的设备管理 14
1.4.4 嵌入式Linux的驱动程序 16
1.5 知识索引 20
1.6 思考与练习 21
第2章 简单的字符设备驱动程序 23
本章目标 23
2.1 嵌入式Linux字符设备的驱动程序结构 23
2.1.1 嵌入式Linux驱动程序常用的头文件 24
2.1.2 File_operations结构体 24
2.1.3 字符设备驱动程序的入口 25
2.1.4 驱动程序的设备注册 26
2.2 设备驱动程序中的具体问题 27
2.2.1 I/O端口 28
2.2.2 内存操作 29
2.2.3 中断处理 29
2.3 LED的驱动程序实例及测试 30
2.3.1 LED I/O端口设置 30
2.3.2 LED硬件电路设计 32
2.3.3 LED驱动程序设计 33
2.3.4 LED测试程序设计 36
2.4 嵌入式Linux中断处理驱动程序及测试 37
2.4.1 中断处理过程 37
2.4.2 中断向量表 39
2.4.3 中断的处理模式 39
2.4.4 中断的优先级 40
2.4.5 中断的嵌套 40
2.4.6 中断源的扩展 40
2.4.7 中断控制寄存器的设置 41
2.5 按键中断的驱动程序实例 45
2.5.1 按键中断的电路设计 45
2.5.2 按键中断的驱动程序设计 45
2.6 知识索引 48
2.7 思考与练习 49
第3章 数字显示驱动程序 50
本章目标 50
3.1 数字显示器 50
3.1.1 数码管简介 50
3.1.2 数码管的分类 51
3.1.3 数码管显示原理 51
3.2 数码管显示电路的硬件设计 52
3.2.1 译码器的使用 52
3.2.2 数码管的驱动方式 53
3.2.3 串/并变换的译码设计 55
3.3 数码管驱动程序实例 56
3.3.1 驱动程序的初始化和卸载模块 56
3.3.2 文件操作结构模块 57
3.3.3 数码管的打开模块 57
3.3.4 数码管的读写模块 58
3.3.5 数码管的I/O控制模块 58
3.3.6 数码管的退出模块 58
3.3.7 驱动程序的模块加载和卸载 59
3.4 数码管显示电路测试程序设计 60
3.4.1 数码管测试设计 60
3.4.2 数码管测试程序 60
3.4.3 数码管测试效果 61
3.5 知识索引 61
3.6 思考与练习 62
第4章 键盘驱动程序 63
本章目标 63
4.1 键盘接口概述 63
4.1.1 键盘的分类 63
4.1.2 键盘的防抖 65
4.1.3 键盘的扫描 65
4.1.4 键盘的缓冲算法 67
4.2 键盘的驱动设计实例 67
4.2.1 锁存器和缓冲器扩展键盘 67
4.2.2 锁存器和缓冲器的接口 68
4.2.3 锁存器和缓冲器扩展键盘驱动程序设计 69
4.2.4 锁存器和缓冲器扩展键盘测试程序设计 71
4.3 智能控制芯片HD7279扩展键盘 72
4.3.1 HD7279的电路设计 72
4.3.2 HD7279的指令介绍 73
4.3.3 HD7279的串行接口 74
4.3.4 HD7279的驱动程序设计 75
4.3.5 HD7279的测试程序设计 84
4.4 知识索引 85
4.5 思考与练习 85
第5章 A/D驱动程序 86
本章目标 86
5.1 A/D转换的过程 86
5.1.1 样和保持 86
5.1.2 量化和编码 88
5.1.3 ADC的分类 89
5.2 A/D转换器的基本原理 89
5.2.1 逐次逼近型A/D转换器 89
5.2.2 双积分型A/D转换器 90
5.2.3 V/F和F/V型转换器 93
5.2.4 其他A/D转换器 95
5.3 A/D转换器接口技术
5.3.1 ADC的主要参数及意义
5.3.2 ADC的电路选择方法 98
5.3.3 ADC实际应用中的问题 99
5.4 S3C2410 A/D转换驱动设计实例 99
5.4.1 S3C2410的A/D转换电路 99
5.4.2 S3C2410X的A/D转换控制寄存器 100
5.4.3 S3C2410X的A/D转换数据寄存器 101
5.4.4 S3C2410X中A/D转换驱动程序的设计 102
5.4.5 S3C2410X中A/D转换测试程序的设计 105
5.5 知识索引 106
5.6 思考与练习 107
第6章 D/A驱动程序 108
本章目标 108
6.1 D/A的原理介绍 108
6.1.1 D/A转换的概念及基本原理 108
6.1.2 电子模拟开关 109
6.1.3 D/A转换器的基本结构 110
6.1.4 D/A转换的静态参数 114
6.1.5 D/A转换的动态参数 115
6.2 D/A转换的硬件电路设计 116
6.2.1 D/A转换的接口技术 116
6.2.2 D/A转换芯片介绍 117
6.2.3 D/A转换的电路设计 118
6.3 D/A转换器的驱动程序实例 118
6.3.1 D/A驱动程序中的宏定义 118
6.3.2 D/A的模块加载 118
6.3.3 D/A转换器的文件操作模块 119
6.3.4 D/A转换器的读写控制模块 120
6.3.5 D/A转换器的打开、退出模块 120
6.4 测试程序的设计 120
6.4.1 D/A测试程序中的宏定义 121
6.4.2 D/A测试程序的主函数 121
6.4.3 D/A测试程序中的功能函数 122
6.4.4 D/A测试程序中的功能打印函数 123
6.4.5 D/A测试程序中的波形生成函数 123
6.4.6 D/A测试程序的效果 124
6.5 知识索引 125
6.6 思考与练习 125
第7章 LCD驱动程序 126
本章目标 126
7.1 LCD显示器概述 126
7.1.1 液晶 126
7.1.2 LCD显示屏的背光 127
7.1.3 LCD显示器的分类 127
7.1.4 LCD的显示原理 127
7.1.5 LCD的驱动方式 130
7.1.6 LCD的常用指标 131
7.2 LCD的显示接口 131
7.2.1 灰度STN的时序 132
7.2.2 彩色STN的时序 133
7.2.3 TFT的时序 134
7.3 嵌入式处理器的LCD控制器 136
7.3.1 LCD控制器 136
7.3.2 LCD控制器的设置 137
7.3.3 LCD的字符显示缓存 139
7.4 LCD的驱动程序设计 140
7.4.1 LCD驱动程序相关的宏定义 140
7.4.2 LCD驱动程序的底层操作函数 142
7.4.3 LCD驱动程序提供的API 145
7.4.4 LCD驱动程序的模块化加载 151
7.4.5 LCD的测试程序 152
7.5 基于Framebuffer的LCD驱动程序实例 155
7.5.1 Framebuffer概述 155
7.5.2 LCD的电路连接 155
7.5.3 Framebuffer设备驱动程序的结构 156
7.5.4 Framebuffer设备驱动程序的设计 159
7.5.5 Framebuffer设备测试程序的设计 164
7.5.6 嵌入式Linux常用的GUI 166
7.6 知识索引 166
7.7 思考与练习 167
第8章 触摸屏驱动程序 168
本章目标 168
8.1 触摸屏概述 168
8.2 触摸屏的分类 168
8.2.1 电阻技术触摸屏 168
8.2.2 表面声波技术触摸屏 169
8.2.3 电容电感技术触摸屏 170
8.2.4 红外线技术触摸屏 170
8.3 触摸屏的特性 171
8.3.1 透明度和色彩失真 171
8.3.2 反光性 171
8.3.3 清晰度 171
8.3.4 漂移 172
8.3.5 检测和定位 172
8.4 触摸屏的硬件电路设计 172
8.4.1 电阻式触摸屏的电路原理 172
8.4.2 电阻式触摸屏原点的定位 173
8.4.3 电阻式触摸屏的电路连接 174
8.5 触摸屏的驱动程序实例 176
8.5.1 触摸屏接口的模式 176
8.5.2 A/D转换和触摸屏寄存器的设置 177
8.5.3 触摸屏的坐标 179
8.5.4 触摸屏的电路连接 180
8.5.5 触摸屏的驱动程序接口 181
8.6 测试程序的设计 182
8.6.1 触摸屏的数据定义 183
8.6.2 触摸屏的数据处理 183
8.6.3 触摸屏的运行测试 185
8.7 知识索引 186
8.8 思考与练习 187
第9章 CAN总线驱动程序 188
本章目标 188
9.1 CAN总线接口设计 188
9.1.1 CAN总线概述 188
9.1.2 CAN的工作特点及主要优点 189
9.1.3 CAN总线的电气特征和MAC帧结构 189
9.2 嵌入式处理器上CAN总线接口的扩展 190
9.2.1 SJA1000简介 190
9.2.2 SJA1000扩展 191
9.3 SJA1000扩展CAN总线接口的设计 192
9.3.1 CAN 控制器SJA1000的操作模式 192
9.3.2 CAN控制器SJA1000的特征功能 193
9.3.3 CAN 控制器SJA1000的Basic CAN模式设置 194
9.4 SJA1000扩展CAN总线接口的通信 196
9.4.1 通过CAN总线建立通信的步骤 196
9.4.2 SJA1000的初始化 196
9.4.3 驱动程序的结构设计 198
9.4.4 驱动程序init、exit、open、close函数的实现 200
9.4.5 驱动程序read、write函数的实现 201
9.4.6 驱动程序interrupt、ioctl函数实现 202
9.4.7 测试程序的编写 202
9.5 驱动程序的加载 204
9.6 知识索引 204
9.7 思考与练习 205
第10章 IIC总线驱动程序 206
本章目标 206
10.1 IIC总线概述 206
10.1.1 IIC总线介绍 206
10.1.2 IIC总线引入的原因 206
10.1.3 IIC总线的特点 206
10.1.4 IIC总线的基本结构 207
10.1.5 IIC总线的术语 207
10.1.6 IIC总线的工作 208
10.1.7 IIC总线的竞争仲裁 209
10.1.8 IIC总线的工作流程 210
10.2 嵌入式处理器的IIC接口 211
10.2.1 IIC总线控制寄存器 212
10.2.2 IIC总线控制/状态寄存器 213
10.2.3 IIC总线地址寄存器 214
10.2.4 IIC总线移位数据寄存器 214
10.2.5 S3C2410中与IIC对应的I/O端口 215
10.3 基于IIC的键盘芯片应用 216
10.3.1 ZLG7290的功能 217
10.3.2 ZLG7290的控制方式 218
10.3.3 ZLG7290的寄存器 218
10.3.4 ZLG7290的通信接口 219
10.3.5 ZLG7290的指令介绍 219
10.4 IIC总线驱动程序实例 221
10.4.1 ZLG7290的电路连接 221
10.4.2 ZLG7290的通信流程 223
10.4.3 ZLG7290驱动中变量的定义 225
10.4.4 ZLG7290驱动中实时时钟的改变 226
10.4.5 ZLG7290和IIC寄存器的初始化 227
10.4.6 ZLG7290驱动程序的模块化 228
10.4.7 ZLG7290的文件操作结构 228
10.5 IIC总线的测试程序 230
10.6 知识索引 231
10.7 思考与练习 231
第11章 音频总线驱动程序 232
本章目标 232
11.1 音频总线接口概述 232
11.1.1 音频的样精度 233
11.1.2 音频编码 233
11.2 IIS音频总线接口 233
11.2.1 IIS总线的物理连接 233
11.2.2 IIS的总线协议 234
11.2.3 IIS总线的硬件设计 235
11.2.4 IIS总线的寄存器 236
11.3 AC音频总线接口 239
11.4 IIS总线的驱动程序设计 240
11.4.1 音频设备基础知识 240
11.4.2 音频设备文件 241
11.4.3 WAV声音文件 243
11.4.4 音频设备和驱动程序的通信 243
11.4.5 设备的初始化和加载 244
11.4.6 DMA的操作和宏定义 246
11.4.7 audio设备文件的操作 248
11.4.8 mixer设备文件的操作 260
11.5 音频驱动程序的测试 262
11.6 知识索引 262
11.7 思考与练习 263
第12章 IDE接口驱动程序 264
本章目标 264
12.1 IDE接口概述 264
12.1.1 硬盘知识介绍 264
12.1.2 IDE接口标准 267
12.1.3 IDE接口的传输模式 269
12.1.4 IDE接口寄存器 269
12.2 IDE接口驱动程序的移植 271
12.2.1 嵌入式Linux下IDE驱动程序接口 271
12.2.2 嵌入式Linux下IDE驱动程序 272
12.2.3 IDE硬盘的读/写操作 274
12.3 IDE驱动程序测试 282
12.3.1 磁盘文件系统简介 283
12.3.2 IDE分区测试 283
12.4 知识索引 285
12.5 思考与练习 285
第13章 闪存芯片的驱动程序 286
本章目标 286
13.1 闪存芯片概述 286
13.1.1 闪存芯片的物理特性 286
13.1.2 嵌入式文件系统概述 289
13.1.3 MTD体系介绍 289
13.1.4 Flash专有名词 291
13.2 NAND Flash 291
13.2.1 NAND Flash的结构 291
13.2.2 NAND Flash的操作 292
13.2.3 NAND Flash控制器 294
13.2.4 NAND Flash的时序 296
13.2.5 NAND Flash的驱动程序实例 2
13.3 NOR Flash 301
13.3.1 NOR Flash的结构 301
13.3.2 NOR Flash的操作 302
13.3.3 NOR Flash的驱动程序实例 303
13.4 基于闪存的文件系统 307
13.5 知识索引 309
13.6 思考与练习 310
第14章 USB 设备驱动程序 311
本章目标 311
14.1 USB接口概述 311
14.1.1 USB系统 311
14.1.2 USB的电气特性 312
14.1.3 USB总线的拓扑结构 313
14.1.4 USB的通信协议 313
14.2 嵌入式系统中USB的使用 315
14.2.1 OHCI概述 315
14.2.2 Host接口硬件设计 316
14.3 嵌入式系统中USB设备的驱动程序设计 316
14.3.1
Linux-hexdump命令调试event驱动
日文键盘在linux系统里如何使用
1、首先来看一下日文键盘的分布图:五十音图:五十音(日语:ごじゅうおん,又称五十音图)是日语基本名的表,包括所有清音的名,以及只是作为子音一部分的特殊音ん(ン)。五十音包含平名与片名。
2、点击设置在搜狗输入法个人中心界面中,点击设置。点击多语言键盘在设置界面中,点击多语言键盘。添加日文在多语言键盘界面中,添加日文。点击确定在添加日文弹窗界面中,点击确定。
3、怎么打出日文首先我们打开手机的设置,点击设置,找到系统然后点击系统代开系统界面。在系统的界面我们找到语言和输入法点击语言就会进入设置。
4、首先修改键盘的驱动:通过我的电脑打开系统属性,选择硬件标签:打开设备管理器,我们发现中文XP操作系统下,默认的键盘驱动是“标准101/102键或Microsoft自然PS/2键盘”。
5、如果使用“罗马字录入”方式,罗马字母的键盘位置是和英文一样的。日文键盘上的“符号”的位置和普通键盘的不一样。这一点让初次使用日文键盘的人非常不习惯。
6、进入通用页面,点击键盘一栏。进入键盘页面,点击最下方的添加新键盘可以看到有各种语言的选项,找到日文一项并点击,有名和罗马字两种输入法选项,可以根据自己使用习惯选择,建议初学者选择罗马字。
如何为“Linux命令”设置快捷键?
1、可以使为命令设置别名alias来建立快捷键。
2、删除一个aliasunalias命令,更多技巧来《Linux就该这么学》。
3、依次打开系统设置》键盘》快捷键》自定义快捷键》+;然后在名称输入快捷键名称,在命令行输入要执行的动作。确定之后设置快捷键即可。想了解更多就到linux就该这么学。1、一般设置为英文美式键盘了布局。键盘布局配置文件一般在/etc/sysconfig/keyboard,在终端用vi或者vim打开它。
2、系统故障。linux系统键盘选择为英文美式键盘布局,也就是DVORAK键盘,如果其中的g打不出来,就是系统故障的原因,需要退出后再重新登录即可。linux是一个操作系统,或者说是一个操作系统最底层的核心。
3、应该是终端键盘布局(keyboardlayout)设置不当吧。因为我们通常用的键盘都是us104兼容的,所以很少需要手动设置。补充:我最近遇到一个类似的问题,那些方向键/PageUp/PageDown/NumLock/PrintScreen等不能正常工作。
4、点击‘系统’菜单,进入‘首选项’,选择‘键盘’菜单。在弹出的‘键盘首选项’对话框中选择‘布局’标签。可以在这里更改设定。
5、debian配置键盘布局DebianLinux系统配置键盘布局非常简单,只需要以下步骤:首先打开终端,输入:sudodpkg-reconfigurekeyboard-configuration接下来,选择你的键盘类型并确认。最后,重新启动系统。
更改linux系统中键盘设置
点击‘系统’菜单,进入‘首选项’,选择‘键盘’菜单。在弹出的‘键盘首选项’对话框中选择‘布局’标签。可以在这里更改设定。
可通过xev得到所按键的键名/键值,再通过xmodmap可设置直接运行xev(linux下抓取按键键值的小工具),按一下所经修改的按键,在输出的信息中找到类似(keysym0xff22,Muhenkan)的内容,其中0xff22为键值,Muhenkan是键名。
应该是终端键盘布局(keyboardlayout)设置不当吧。因为我们通常用的键盘都是us104兼容的,所以很少需要手动设置。补充:我最近遇到一个类似的问题,那些方向键/PageUp/PageDown/NumLock/PrintScreen等不能正常工作。
鼠标移动到屏幕的右上角,选择“设置”;在打开的界面,选择“更改电脑设置”;打开设置后,选择“电脑和设置”;在里边找到“输入”,然后在触摸键盘下,开启或关闭“在我输入内容时播放按键声音”。
linux系统键盘不能输入的问题解决
查看是否是键盘接口方面松动了,接触不良的情况,如果用户懂的用万用表的话,可以使用万用表来检测电脑键盘是否损坏了。键盘正常的话,那说明是电脑系统问题,我们常说进入到安装模式修复下系统。
从你的看vm启动正常,rh也正常出现登录窗口。怀疑是的键盘被卡住,换个外接键盘试试。鼠标是否也被锁住?如果锁住可能是启动RH不对。
安装在Vmware7下的最新Ubuntu04LTS镜像会出现无法识别键盘输入的问题。在登录画面时,不能输入密码,无法正常进入系统。
Linux下如何改键值
修改键盘映射用xmodmap就okay了,配置文件如下:保存为.Xmodmap,使用的话直接终端下输入xmodmap.Xmodmap就万事大吉了。
首先,下载一个键盘映射工具。软件无需安装,打开即用。点击当前用户→增加。
可以直接输入命令regedit打开注册表。打开之后找到计算机的属性。找到之后展开这个键值,弹出下拉的菜单。选择要删除或者修改的文件夹。
上Google、百度等查出要修改的具体项或键的位置,键的键值。备份注册表。打开注册表编辑器。开始——→运行——→regedit,即打开了!查找并编辑相关项和键值。
第一步:指定主时间服务器。在CMD下输入“nettime/setsntp:pool.ntp.org”,这里我们指定pool.ntp.org是主时间服务器,也可以是其它地址。第二步:开始与主时间服务器同步。先关闭windowstime服务,再开启该服务。
如何在Linux下实现设备的配置
hexdump: 查看文件的内容,比如二进制文件中包含的某些字符串,通常用来调试驱动用
描述
我们以event1为例,当我们insmod挂载了键盘驱动后,出现一个event1设备,
此时没有按键按下,所以event1里面的数据是没有的,那么数据又是从来哪里来?
通过键盘驱动的read函数,若有按键按下,就会上传按键数据给用户层hexdump
因为键盘驱动的input_handler 是:evdev_handler
所以键盘驱动的read函数是: evdev_handler->evdev_fops->evdev_read
进入evdev_read()函数,如下图所示:
evdev_event_to_user()这个函数从字面上来看,显然就是用来上传给用户层的函数,其中buffer是函数参数,指向用户层,所以数据就是event.
我们来看看event的结构体:input_event
把 time里的成员展开如下:
所以我们hexdump调试任何输入子系统event XX驱动时,有信息就会打印上面数据
1.调试键盘驱动
以按开发板的按键 KEY_L,为例(因为数据是从低到高打印的,所以数据是反的):
日文键盘在linux系统里如何使用
现在的Linux内核中使用kmod来完成设备模块的自动加载,它的一般工作机制是:在第一次引用设备模块时,内核使用系统命令/sbin/modprobe加载这个设备模块。为了使这种机制正常工作,您首先需要使用depmod -a建立表述模块之间依赖关系的文件modules.dep,然后在/etc/modules.conf中设置正确的设备别名,如果还需要设置设备对应的参数。举例来说,在设置网卡时网卡的驱动程序是ne2k-pci,网卡的设备别名是eth0,则在文件/etc/modules.conf中加入别名alias eth0 ne2k-pci,就设置了ne2000兼容的PCI网卡,这样当有程序要尝试访问网络时,内核会自动加载网卡驱动程序ne2k-pci。
其二是需要根据设备的类型,以及安装的Linux系统版本(不同的Linux发行版对于同一设备的配置脚本文件存在差异),设置设备对应的配置脚本文件。
1 配置键盘
1.1 配置键盘的设备模块
对于我们常见的键盘一般有三种类型,其一为老式的五针键盘,其二为ps/2键盘,其三是usb鼠标。对于前两种键盘,一般现在的Linux发行版都把它们需要的设备模块打包入内核,所以无需进行附加的模块插入操作,键盘就能够正常工作。而对于usb类型的键盘,一般而言,要使它正常工作必须先插入对应的设备模块。
对于usb类型的键盘,您若是要通过手动加载模块的方式使其工作,必须首先插入usb桥接器模块,然后您还必须插入键盘模块usbkbd.o,以及keybdev.o,这样usb键盘才能够正常工作。此时,运行的系统命令:
/sbin/modprobe usbkbd
/sbin/modprobe keybdev
对于2.2.x系列的内核若要内核的kmod在需要时自动加载则必须在/etc/modules.conf文件中设置别名usb-interface,它对应您所使用的桥接器模块。例如,当桥接器的类型为UHCI时,在/etc/modules.conf中加入设备别名:
alias usb-interface usb-uhci
对于2.4.x系列的内核,此设备别名则变为:
alias usb-controller usb-uhci
在设置了此别名之后,系统启动时会自动进行usb设备检测。当检测过程发现连结的设备是系统支持的,那么系统会自动插入所需的模块。
1.2 键盘配置文件
键盘的配置文件/etc/sysconfig/keyboard,它的内容很简单,可选配置项为KEYTABLE(随着发行版本的不同这个文件的内容会有所差异,但是这个字段是最重要的)。例如,当设置KEYTABLE = "us"时,表示系统使用美式键盘。
然后,为了正确的使用键盘上的功能键,您还需要调用命令dumpkeys生成文件/etc/sysconfig/console/default.kmap。
/usr/bin/dumpkeys > /etc/sysconfig/console/default.kmap
这个文件描述了键盘的键盘扫描码和加入键盘修饰之后的键盘的相应的键盘扫描码。
同样,为了键盘能在X系统环境下正常工作,您可能也需要在X系统下对键盘进行设置,这时您就必须使用xmodmap来设置正确的键盘映射。例如,
/usr/X11R6/bin/xmodmap /usr/share/xmodmap/xmodmap.fr
设置您的X系统下的键盘为法语键盘。
在正确的配置了/etc/sysconfig/keyboard文件之后,X系统的配置程序会根据此文件的信息配置X中关于键盘配置的小节。当此文件内容不正确或者是此文件不存在时,X系统是无法启动和配置的。
2 配置鼠标
2.1 鼠标的基本信息
Linux支持四种不同的总线鼠标硬件接口:Inport(Microsoft),Logitech,PS/2和ATI-XL。2.4内核也支持IBM PC110数字化板和Apple Desktop鼠标。
Inport mice
Inport mice包含大多数旧类型的微软鼠标。Inport mice通常连接到主板的接口卡上。如鼠标线连接头是圆的,有9针,则可能是Inport mice。
Logitech mice
PS/2 mice
ATI combo video/mice
IBM PC110 palmtop digitizer
Apple Desktop Mouse
Hybrid Mice
对于鼠标协议,大多数总线鼠标使用BusMouse协议,一些古老的Logitech鼠标使用MouseSystems协议,而一些更老的微软鼠标使用Logitech协议。PS/2鼠标总是使用PS/2协议。
不同类型的鼠标对应的设备文件:
接口类型 设备 主设备号 次设备号
Logitech /dev/logibm 10 0
PS/2 /dev/psaux 10 1
Inport /dev/inportbm 10 2
ATI-XL /dev/atibm 10 3
USB mouse /dev/input/mice 13 63
表2-1
创建对应设备的命令:
mknod /dev/logimm c 10 0
mknod /dev/psaux c 10 1
mknod /dev/inportbm c 10 2
mknod /dev/atibm c 10 3
mknod /dev/input/mice c 13 63
在创建了鼠标对应的设备文件之后,因为现在很多程序都使用/dev/mouse作为缺省的鼠标设备文件,所以为了使鼠标正常工作你还要创建一个符号连接/dev/mouse指向真实的鼠标设备文件。例如,对于ps/2鼠标,/dev/mouse指向/dev/psaux,对于usb鼠标,/dev/mouse/指向/dev/input/mice,对于串口鼠标/dev/mouse指向/dev/ttyS0。对于不同的linux发行版本,这些文件可能有所不同,上述介绍主要是基于Redhat发布的配置。
对于现在最常见的三种鼠标:串口鼠标、PS/2鼠标和USB鼠标而言,由于对PS/2鼠标支持一般都打在内核中,所以您也不需要在鼠标工作之前插入设备模块。但对于其他的两种鼠标,插入模块的操作一般是必须的。对于串口鼠标而言,您必须先插入模块serial.o,
/sbin/modprobe serial
成功的插入模块之后,如果串口鼠标支持即插即用的串口协议,您可以从串口(/dev/ttyS*)读到鼠标的类型信息,然后由此信息,完成鼠标的配置文件。对于USB鼠标,为了使其正常工作,您必须先插入模块usbmouse.o和mousedev.o
/sbin/modprobe usbmouse
/sbin/modprobe mousedev
同样,为了使鼠标驱动程序能够自动加载,您也需要在/etc/modules.conf文件中创建usb-interface(usb-controller)别名。
2.2 鼠标配置文件
正确配置鼠标必须生成配置文件/etc/sysconfig/mouse,它包括下列选项:MOUSETYPE、XMOUSETYPE、FULLNAME、XEMU3、DEVICE。该鼠标配置文件也是X配置文件中鼠标配置节的基础。如果没有这个文件,很多X配置程序将无法工作。
MOUSETYPE=
配置鼠标的类型,包括ps/2、Busmouse、imps2、netmouse、Microsoft、Logitech、MouseMan、MMHitTab、MouseSystems、pnp、logim、ms3、MMSeries等。
XMOUSETYPE=
X系统下配置的鼠标的类型,包括MouseMan、IntelliMouse、MMSeries、MMHittab、Logitech、MouseMan、Microsoft、MouseSystems、PS/2、BusMouse等。
FULLNAME=
描述鼠标设备的全名。例如,对于普通PS/2鼠标,其全名为PS/2|Standard。
XEMU3=
是否仿真三键鼠标,可选参数为yes或no。
DEVICE=
描述鼠标对应的设备文件。例如。对于普通PS/2鼠标,设备文件为psaux。
2.3 鼠标的配置技巧
通过gpm能在命令行方式下使用鼠标。这样在控制台方式下,就可以使用鼠标进行剪贴等操作了。例如,对于ps/2鼠标,它的配置方式是:
gpm -t ps/2 -m /dev/psaux
如果不指定-m选项,那么系统会去查找文件/dev/mouse。
鼠标移动不规则可能是因为对鼠标设置了错误的协议。如新的Logitech鼠标不使用Logitech协议,而用微软协议(MouseMan)。如果您的鼠标移动不规则,那您可能首先需要尝试更换一下MouseType(XMouseType)指定的值。
在X系统下,您如果需要更换鼠标的左、右键,那么可以执行xmodmap -e "pointer = 3 2 1"。
如何解决Linux下USB设备节点名不固定问题
1、首先在设备管理器内,更改键盘的驱动,升级驱动程序时选择“从列表或指定位置安装”,单击“下一步”。
2、其次完成驱动程序的修改工作,重新启动系统。
3、最后是日文键盘在linux系统里使用的方法,安全便捷。
树莓派openwrt不能使用无线键盘
Linux下USB设备节点名不固定问题经常会遇到,下面就是解决的方法:
以USB转串口为例,通常设备节点名为ttyUSBx(x为0~n),Linux内核会根据插入设备的先后顺序进行编号的分配,比如第一个插入的设备编号为0,然后依此加1。
如果仅仅以设备节点ttyUSBn来区别具体是哪个设备,因为末位的编号是随时会变的,所以就会造成混乱。无法保证A设备就是0,B设备就是1。其实这个问题在LDD3上已经提到过,目前的内核早已经解决类似的问题,将所以有USB设备都导致到sys文件系统中,其实每个USB端口都有唯一的端口号,相当于每个门店的门牌号。只要我们依据端口号来进行设备的区分,那么问题就迎刃而解了。
比如当前设备插入两个USB转串口设备后,查看ttyUSBn所在端口的端口号:
root@android:/ $ ls -l /sys/class/tty/
...
lrwxrwxrwx root root 2011-01-01 13:40 ttyUSB0 -> ../../devices/ff540000.usb/usb3/3-1/3-1.1/3-1.1:1.0/ttyUSB0/tty/ttyUSB0
lrwxrwxrwx root root 2011-01-01 13:43 ttyUSB1 -> ../../devices/ff540000.usb/usb3/3-1/3-1.2/3-1.2:1.0/ttyUSB1/tty/ttyUSB1
root@android:/ $ 12345
其中ttyUSB0所在的端口号为3-1.1,而ttyUSB1所在的端口号为3-1.2。
其它类型USB设备同理,以上思路清理完毕。
查看系统当前usb设备,下面是对第二列排序的结果。
$ lsusb
Bus 001 Device 001: ID xxx:xxx Linux Foundation 2.0 root hub
Bus 001 Device 002: ID xxx:xxx Intel Corp. Integrated Rate Matching Hub
Bus 001 Device 003: ID xxx:xxx Genesys Logic, Inc. GL827L SD/MMC/MS Flash Card Reader
Bus 001 Device 005: ID xxx:xxx Philips (or NXP)
Bus 002 Device 001: ID xxx:xxx Linux Foundation 2.0 root hub
Bus 002 Device 002: ID xxx:xxx Intel Corp. Integrated Rate Matching Hub
Bus 002 Device 003: ID xxx:xxx Intel Corp.
Bus 003 Device 001: ID xxx:xxx Linux Foundation 2.0 root hub
Bus 004 Device 001: ID xxx:xxx Linux Foundation 3.0 root hub
第二列是usb设备的hub编号。pc中usb设备都是接在hub上的,即使你的主板提供好多usb口,他们实际都是接在hub上的。
第四列是usb设备编号,设备在本机的编号。
所以,上面信息显示一共有4个usb hub(3个usb2.0,一个usb3.0)。如果
黑体字部分是我机器上的三个设备,001.003 是机箱自带读卡器,001.005是无线键盘,002.003是intel无线网卡蓝牙模块(具体怎么知道的往下看)。
usb设备也可以用在内核文件中找到/sys/bus/usb/devices。linux将所有设备驱动映射到了/sys下。
ls -1 /sys/bus/usb/devices/
1-0:1.0
1-1
1-1:1.0
1-1.2
1-1.2:1.0
1-1.4
1-1.4.1
1-1.4:1.0
1-1.4.1:1.0
1-1.4.1:1.1
1-1.4.1:1.2
1-1.5
1-1.5:1.0
1-1.5:1.1
1-1.5:1.2
2-0:1.0
2-1
2-1:1.0
2-1.5
2-1.5:1.0
2-1.5:1.1
3-0:1.0
4-0:1.0
usb1
usb2
usb3
usb4
都是符号连接。也可以用ls -l /sys/bus/usb/devices/ 看具体位置
输出看起来比较乱。用 udevadm工具能比较清楚列出设备信息。命令看起来是这样的:
udevadm info -p /sys/bus/usb/devices/usb1 -q property
那怎么找出是那个usb设备呢?
Bus 002 Device 003: ID xxx:xxx Intel Corp.
第二列,002 就要在所有2开头的文件去找,下面的符合第一规则。
2-0:1.0
2-1
2-1:1.0
2-1.5
2-1.5:1.0
2-1.5:1.1
通常系统的usb hub占据了`-`减号后第一位0。第一个 2-0:1.0,就是usb hub。
2-1.5*文件就是上面的设备。
$ udevadm info -p /sys/bus/usb/devices/2-1.5 -q property
BUSNUM=002
DEVNAME=/dev/bus/usb/002/003
DEVNUM=003
............
ID_MODEL_ID=xxx
............
ID_VENDOR=xxx
............
ID_VENDOR_FROM_DATABASE=Intel Corp.
............
002和003 就是lsusb 的第2/4列. 第6列,来自modelID和vender。
lsusb中的的东东就是这么来的。
那问题是怎么知道是蓝牙呢? 答案是继续用udevadm查:
$ udevadm info -p /sys/bus/usb/devices/2-1.5:1.0 -q property
ID_USB_CLASS_FROM_DATABASE=Wireless
ID_USB_PROTOCOL_FROM_DATABASE=Bluetooth
ID_USB_SUBCLASS_FROM_DATABASE=Radio Frequency
ID_VENDOR_FROM_DATABASE=Intel Corp.
原因:树莓派使用OpenWRT系统时,无线键盘不能正常使用的原因可能是因为OpenWRT系统默认没有安装或者没有正确配置与无线键盘兼容的驱动程序。
拓展:OpenWRT是一个基于Linux的嵌入式操作系统,其主要用途是用于路由器和嵌入式设备。由于OpenWRT的设计初衷是为了提供稳定、高效的网络路由功能,因此在系统安装和配置上更注重网络性能和安全性,对于其他外设的兼容性可能不够完善。
要解决无线键盘不能使用的问题,可以尝试以下方法:
1. 检查驱动程序:确认OpenWRT系统中是否已安装与无线键盘兼容的驱动程序。如果没有安装,可以尝试手动安装相应的驱动程序。
2. 配置键盘:在OpenWRT系统中,可能需要手动配置无线键盘的参数,例如设置键盘的连接方式、频率等。可以参考OpenWRT的官方文档或社区论坛中的相关讨论,获取详细的配置指南。
3. 使用有线键盘:如果无线键盘无法正常使用,可以考虑使用有线键盘连接到树莓派的USB接口上。有线键盘通常不会受到兼容性问题的限制。
需要注意的是,由于OpenWRT系统的配置和使用相对复杂,对于非专业用户来说可能会有一定的学习和操作难度。如果以上方法都无法解决问题,建议咨询OpenWRT的相关技术支持或向社区寻求帮助,以获取更专业的指导和支持。
声明:本站所有文章资源内容,如无特殊说明或标注,均为采集网络资源。如若本站内容侵犯了原著者的合法权益,可联系本站删除。