linux usb键盘驱动分析_linux键盘驱动程序

       大家好,今天我来为大家揭开“linux usb键盘驱动分析”的神秘面纱。为了让大家更好地理解这个问题,我将相关资料进行了整合,现在就让我们一起来探索吧。

1.请教linux兼容机械键盘的问题

2.Linux系统移植的目录

3.如何解决Linux下USB设备节点名不固定问题

4.linux操作系统下,鼠标键盘能不能用?

5.linux系统中没有USB驱动怎么办?

6.树莓派openwrt不能使用无线键盘

linux usb键盘驱动分析_linux键盘驱动程序

请教linux兼容机械键盘的问题

       有部分机械键盘确实有部分键位不能用但不是完全不能用 像我PLU的机械在ubuntu上面有部分键位出错但cherry的就不会 而在redhat上面两个键盘都能完美使用 我装redhat时键盘驱动是自动识别的没有改 你是不是安装linux时将键盘驱动装错了 你用redhat试试看

Linux系统移植的目录

       可以讲字符设备和块设备归为一类,它们都是可以顺序/随机地进行读取和存储的单元,二者驱动主要在于块设备需要具体的burst实现,对访问也有一定的边界要求。其他的没有什么不同。

       网络设备是特殊设备的驱动,它负责接收和发送帧数据,可能是物理帧,也可能是ip数据包,这些特性都有网络驱动决定。它并不存在于/dev下面,所以与一般的设备不同。网络设备是一个net_device结构,并通过register_netdev注册到系统里,最后通过ifconfig -a的命令就能看到。

       不论是什么设备,设备级的数据传输都是基本类似的,内核里的数据表示只是一部分,更重要的是总线的访问,例如串行spi,i2c,并行dma等。

如何解决Linux下USB设备节点名不固定问题

       第1篇 系统移植基础篇

       第1章 linux内核介绍 2

       1.1 系统调用接口 2

       1.1.1 linux系统调用 2

       1.1.2 用户编程接口 2

       1.1.3 系统调用与服务例程的对应关系 3

       1.1.4 系统调用过程 3

       1.1.5 系统调用传递的参数 4

       1.2 进程管理 4

       1.2.1 进程 4

       1.2.2 进程描述符 5

       1.2.3 进程状态 6

       1.2.4 进程调度 6

       1.2.5 进程地址空间 8

       1.3 内存管理 10

       1.3.1 内存管理技术 10

       1.3.2 内存区管理 12

       1.3.3 内核中获取内存的几种方式 13

       1.4 虚拟文件系统 14

       1.4.1 虚拟文件系统作用 14

       .1.4.2 文件系统的注册 15

       1.4.3 文件系统的安装和卸载 15

       1.5 设备驱动程序 17

       1.5.1 字符设备驱动程序 17

       1.5.2 块设备驱动程序 18

       1.5.3 网络设备驱动程序 21

       1.5.4 内存与i/o操作 22

       1.6 小结 23

       第2章 嵌入式linux开发环境搭建 24

       2.1 虚拟机及linux安装 24

       2.1.1 虚拟机的安装 24

       2.1.2 单独分区安装系统 30

       2.1.3 虚拟机和主机通信设置 31

       2.1.4 vmware tools工具安装 33

       2.1.5 虚拟机与主机共享文件 35

       2.1.6 虚拟机与主机文件传输 36

       2.2 交叉编译工具 38

       2.2.1 交叉编译工具安装 38

       2.2.2 交叉编译器测试 43

       2.3 超级终端和minicom 44

       2.3.1 超级终端软件的安装 44

       2.3.2 minicom使用 45

       2.3.3 securecrt使用 48

       2.4 内核、文件系统加载工具 48

       2.4.1 烧写bootloader 48

       2.4.2 内核和文件系统下载 52

       2.4.3 应用程序和文件传输 54

       2.5 在开发中使用网络文件系统(nfs) 56

       2.5.1 虚拟机设置 56

       2.5.2 虚拟机的ip地址设置 56

       2.5.3 验证网络连接 59

       2.5.4 设置共享目录 59

       2.5.5 启动nfs服务 60

       2.5.6 修改共享配置后 61

       2.5.7 挂载nfs 61

       2.5.8 双网卡挂载nfs 61

       2.6 小结 62

       第2篇 系统移植技术篇

       第3章 bootloader移植 64

       3.1 bootloader介绍 64

       3.1.1 bootloader与嵌入式linux系统的关系 64

       3.1.2 bootloader基本概念 64

       3.1.3 bootloader启动过程 66

       3.2 bootloader之u-boot 67

       3.2.1 u-boot优点 67

       3.2.2 u-boot的主要功能 68

       3.2.3 u-boot目录结构 68

       3.3 u-boot移植过程 69

       3.3.1 环境配置 69

       3.3.2 修改cpu/arm920t/start.s 70

       3.3.4 具体平台相关修改 79

       3.3.5 其他部分修改 81

       3.3.6 u-boot的编译 84

       3.4 bootloader之vivi 85

       3.4.1 vivi简介 85

       3.4.2 vivi配置与编译 85

       3.4.3 代码分析 88

       3.5 vivi的运行 88

       3.5.1 bootloader启动的阶段一 89

       3.5.2 bootloader启动的阶段二 95

       3.6 小结 95

       第4章 linux内核裁剪与移植 96

       4.1 linux内核结构 96

       4.1.1 内核的主要组成部分 96

       4.1.2 内核源码目录介绍 97

       4.2 内核配置选项 99

       4.2.1 一般选项 99

       4.2.2 内核模块加载方式支持选项 100

       4.2.3 系统调用、类型、特性、启动相关选项 101

       4.2.4 网络协议支持相关选项 102

       4.2.5 设备驱动支持相关选项 102

       4.2.6 文件系统类型支持相关选项 103

       4.2.7 安全相关选项 104

       4.2.8 其他选项 104

       4.3 内核裁剪及编译 105

       4.3.1 安装内核源代码 105

       4.3.2 检查编译环境设置 105

       4.3.3 配置内核 106

       4.3.4 编译内核 115

       4.4 内核映像文件移植到arm板 116

       4.4.1 移植准备 116

       4.4.2 烧写系统 118

       4.5 内核升级 121

       4.5.1 准备升级内核文件 121

       4.5.2 移植过程 122

       4.6 小结 125

       第5章 嵌入式文件系统制作 126

       5.1 文件系统选择 126

       5.1.1 flash硬件方案比较 126

       5.1.2 嵌入式文件系统的分层结构 127

       5.2 基于flash的文件系统 127

       5.2.1 jffs文件系统(journalling flash filesystem) 128

       5.2.2 yaffs文件系统(yet another flash file system) 130

       5.2.3 cramfs文件系统(compressed rom file system) 133

       5.2.4 romfs文件系统(rom file system) 134

       5.3 基于ram的文件系统 135

       5.4 文件系统的制作 135

       5.4.1 制作ramdisk文件系统 136

       5.4.2 制作yaffs2文件系统 144

       5.4.3 制作jffs2文件系统 150

       5.4.4 其他文件系统制作 152

       5.5 小结 153

       第3篇 系统移植与驱动篇

       第6章 lcd驱动移植 156

       6.1 认识lcd相关硬件原理 156

       6.1.1 lcd概述 156

       6.1.2 lcd控制器 157

       6.1.3 lcd控制器方块图 157

       6.1.4 lcd控制器操作 158

       6.1.5 lcd控制寄存器 163

       6.2 lcd参数设置 166

       6.3 内核lcd驱动机制 167

       6.3.1 framebuffer概述 167

       6.3.2 framebuffer 设备驱动的结构 167

       6.4 linux 2.6.25的lcd驱动源码分析 171

       6.4.1 lcd驱动开发的主要工作 171

       6.4.2 s3c2410fb_init()函数分析 172

       6.4.3 s3c2410fb_probe()函数分析 173

       6.4.4 s3c2410fb_remove()函数分析 178

       6.5 移植内核中的lcd驱动 179

       6.5.1 lcd硬件电路图 179

       6.5.2 修改lcd源码 179

       6.5.3 配置内核 184

       6.6 小结 187

       第7章 触摸屏驱动移植 188

       7.1 触摸屏概述 188

       7.1.1 触摸屏工作原理 188

       7.1.2 触摸屏的主要类型 188

       7.2 s3c2440 adc接口使用 191

       7.2.1 s3c2440触摸屏接口概述 191

       7.2.2 s3c2440触摸屏接口操作 192

       7.3 2.6内核触摸屏驱动源码分析(s3c2410_ts.c源码分析) 196

       7.4 linux内核输入子系统介绍 201

       7.4.1 input子系统概述 202

       7.4.2 输入设备结构体 202

       7.4.3 输入链路的创建过程 205

       7.4.4 使用input子系统 206

       7.4.5 编写输入设备驱动需要完成的工作 208

       7.5 触摸屏驱动移植和内核编译 209

       7.5.1 修改初始化源码 209

       7.5.2 修改硬件驱动源码s3c2440_ts.c 211

       7.5.3 修改kconfig和makefile 213

       7.5.4 配置编译内核 214

       7.5.5 触摸屏测试程序设计 215

       7.6 小结 216

       第8章 usb设备驱动移植 217

       8.1 usb协议 217

       8.1.1 usb协议的系统主要组成部分 217

       8.1.2 总线物理拓扑结构 219

       8.1.3 usb设备、配置、接口、端点 219

       8.1.4 usb设备状态 222

       8.1.5 usb枚举过程 223

       8.1.6 usb请求块(urb) 226

       8.2 usb主机驱动 230

       8.2.1 usb主机驱动结构和功能 230

       8.2.2 主机控制器驱动(usb_hcd) 231

       8.2.3 ohci主机控制器驱动 233

       8.2.4 s3c24xx ohci主机控制器驱动实例 234

       8.3 usb设备驱动 237

       8.3.1 usb骨架程序分析 237

       8.3.2 usb驱动移植的时钟设置 241

       8.4 usb鼠标键盘驱动 242

       8.4.1 usb鼠标驱动代码分析 242

       8.4.2 usb键盘驱动代码分析 245

       8.4.3 内核中添加usb鼠标键盘驱动 248

       8.5 u盘驱动 249

       8.5.1 内核配置 249

       8.5.2 移植和测试 250

       8.6 小结 252

       第9章 网卡驱动程序移植 253

       9.1 以太网概述 253

       9.1.1 以太网连接 253

       9.1.2 以太网技术概述 254

       9.1.3 以太网的帧结构 256

       9.2 网络设备驱动程序体系结构 258

       9.2.1 嵌入式linux网络驱动程序介绍 258

       9.2.2 linux网络设备驱动的体系结构 259

       9.2.3 网络设备驱动程序编写方法 259

       9.2.4 网络设备驱动程序应用实例 261

       9.3 net_device 数据结构 262

       9.3.1 全局信息 262

       9.3.2 硬件信息 263

       9.3.3 接口信息 263

       9.3.4 设备方法 266

       9.3.5 公用成员 268

       9.4 dm9000网卡概述 268

       9.4.1 dm9000网卡总体介绍 269

       9.4.2 dm9000网卡的特点 269

       9.4.3 内部寄存器 270

       9.4.4 功能描述 274

       9.5 dm9000网卡驱动程序移植 275

       9.5.1 dm9000网卡连接 275

       9.5.2 驱动分析——硬件的数据结构 276

       9.5.3 驱动分析——数据读写函数 277

       9.5.4 驱动分析——重置网卡 277

       9.5.5 驱动分析——初始化网卡 277

       9.5.6 驱动分析——打开和关闭网卡 282

       9.5.7 驱动分析——数据包的发送与接收 283

       9.5.8 dm9000网卡驱动程序移植 285

       9.6 小结 288

       第10章 音频设备驱动程序移植 289

       10.1 音频设备接口 289

       10.1.1 pcm(脉冲编码调制)接口 289

       10.1.2 iis(inter-ic sound)接口 289

       10.1.3 ac97(audio codec 1997)接口 289

       10.1.4 linux音频设备驱动框架 290

       10.2 linux音频设备驱动——oss驱动框架 291

       10.2.1 oss驱动架构硬件 291

       10.2.2 oss驱动架构代码 291

       10.2.3 oss初始化函数oss_init() 293

       10.2.4 oss释放函数oss_cleanup() 294

       10.2.5 打开设备文件函数sound_open() 295

       10.2.6 录音函数sound_read() 296

       10.2.7 播放函数sound_write() 297

       10.2.8 控制函数sound_ioctl() 297

       10.3 linux音频设备驱动——alsa驱动框架 298

       10.3.1 card和组件 299

       10.3.2 pcm设备 303

       10.3.3 控制接口 306

       10.3.4 ac97 api音频接口 308

       10.4 音频设备应用程序编写 312

       10.4.1 dsp接口编程 312

       10.4.2 mixer接口编程 315

       10.4.3 alsa应用程序编程 316

       10.5 音频设备驱动移植 318

       10.5.1 添加uda1341结构体 318

       10.5.2 修改录音通道 319

       10.5.3 内核中添加uda1341驱动支持 320

       10.5.4 移植新内核并进行测试 321

       10.6 音频播放程序madplay的移植 322

       10.6.1 准备移植需要的源文件 322

       10.6.2 交叉编译 322

       10.6.3 移植和测试 323

       10.6.4 编译中可能遇到的问题 324

       10.7 小结 324

       第11章 sd卡驱动移植 325

       11.1 sd卡简介 325

       11.1.1 sd卡系统概念 325

       11.1.2 sd卡寄存器 325

       11.1.3 sd功能描述 326

       11.2 sd卡驱动程序分析 329

       11.2.1 host驱动部分 330

       11.2.2 core驱动部分 333

       11.2.3 card驱动部分 337

       11.3 sd卡移植步骤 339

       11.3.1 添加延时和中断 339

       11.3.2 配置内核 340

       11.3.3 烧写新内核 341

       11.4 小结 342

       第12章 nandflash驱动移植 343

       12.1 nandflash介绍 343

       12.1.1 nandflash命令介绍 343

       12.1.2 nandflash控制器 344

       12.2 nandflash驱动介绍 345

       12.2.1 nand芯片结构 345

       12.2.2 nandflash驱动分析 346

       12.3 nandflash驱动移植 351

       12.3.1 内核的修改 351

       12.3.2 内核的配置和编译 353

       12.4 小结 353

       第4篇 系统移植高级篇

       第13章 minigui与移植 356

       13.1 minigui在上位机中的安装 356

       13.1.1 安装需要的安装文件 356

       13.1.2 minigui的运行模式 357

       13.1.3 编译并安装minigui 357

       13.1.4 编译安装minigui需要的支持库 360

       13.1.5 编译minigui应用程序例子 360

       13.2 eclipse开发minigui程序 361

       13.2.1 linux下安装eclipse介绍 361

       13.2.2 使用eclipse编译minigui程序 363

       13.2.3 设置外部工具 367

       13.2.4 运行程序 368

       13.3 vc++6.0开发minigui程序 368

       13.3.1 安装windows开发库 368

       13.3.2 建立新工程 369

       13.3.3 添加文件和设置工程 370

       13.3.4 编译和运行程序 371

       13.3.5 minigui程序编程风格举例 372

       13.4 minigui的交叉编译和移植 374

       13.4.1 交叉编译minigui 375

       13.4.2 移植minigui程序 376

       13.5 小结 378

       第14章 qt开发与qtopia移植 379

       14.1 qt安装与编程 379

       14.1.1 下载安装qt 379

       14.1.2 qt编程 380

       14.1.3 使用qmake生成makefile 382

       14.2 qtopia core在x86平台上的安装和应用 383

       14.2.1 qtopia core安装准备 383

       14.2.2 编译qtopia core 384

       14.2.3 qtopia在x86平台上的应用开发 385

       14.3 qtopia core在嵌入式linux上的移植 388

       14.3.1 qtopia core移植准备 389

       14.3.2 交叉编译qtopia core 389

       14.3.3 编译内核 392

       14.3.4 应用程序开发 392

       14.3.5 应用程序移植 395

       14.4 小结 395

       第15章 嵌入式数据库berkeley db移植 396

       15.1 数据库的基本概念 396

       15.1.1 利用文档和源代码 396

       15.1.2 创建环境句柄 396

       15.1.3 创建数据库句柄 397

       15.1.4 打开数据库 398

       15.1.5 dbt结构 398

       15.1.6 存取数据 399

       15.1.7 关闭数据库 400

       15.2 berkeley db数据库安装 400

       15.2.1 安装成c库 400

       15.2.2 安装成c++库 401

       15.2.3 交叉编译安装berkeley db 401

       15.3 使用berkeley db数据库 403

       15.3.1 代码分析 403

       15.3.2 编译运行程序 406

       15.4 移植berkeley db数据库 407

       15.4.1 数据库设计 407

       15.4.2 编写应用程序 407

       15.4.3 调试和交叉编译应用程序 409

       15.4.4 数据库的移植和测试 410

       15.5 小结 410

       第16章 嵌入式数据库sqlite移植 411

       16.1 sqlite支持的sql语句 411

       16.1.1 数据定义语句 411

       16.1.2 数据操作语句 412

       16.2 sqlite数据库编译、安装和使用 412

       16.2.1 安装sqlite 413

       16.2.2 利用sql语句操作sqlite数据库 413

       16.2.3 利用c接口访问sqlite数据库 414

       16.3 移植sqlite 417

       16.3.1 交叉编译sqlite 417

       16.3.2 交叉编译应用程序 418

       16.4 移植sqlite数据库 418

       16.4.1 文件移植 419

       16.4.2 运行应用程序 419

       16.4.3 测试sqlite3 419

       16.5 小结 421

       第17章 嵌入式web服务器boa移植 422

       17.1 boa介绍 422

       17.1.1 boa的功能 422

       17.1.2 boa流程分析 423

       17.1.3 boa配置信息 426

       17.2 boa编译和html页面测试 428

       17.2.1 编译boa源代码 428

       17.2.2 设置boa配置信息 429

       17.2.3 测试boa 429

       17.3 cgi脚本测试 431

       17.3.1 编写测试代码 431

       17.3.2 编译测试程序 431

       17.3.3 测试cgi脚本 431

       17.4 boa交叉编译与移植 431

       17.4.1 交叉编译boa 432

       17.4.2 准备测试程序 432

       17.4.3 配置boa 432

       17.4.4 测试 433

       17.5 boa与sqlite结合 433

       17.5.1 通过cgi程序访问sqlite 434

       17.5.2 编译和测试 436

       17.6 小结 437

       第18章 嵌入式web服务器ting) transaction)状态机 499

       20.3.4 nist(non-invite server (incoming) transaction)状态机 500

       20.4 osip解析器 500

       20.4.1 初始化解析类型函数osip_body_init() 500

       20.4.2 释放函数osip_body_free() 501

       20.4.3 字符串到body类型转换函数osip_body_parse() 501

       20.4.4 body类型到字符串类型转换函数osip_body_to_str() 502

       20.4.5 克隆函数osip_body_clone() 504

       20.4.6 osip解析器分类 505

       20.5 osip事务层 506

       20.6 sip建立会话的过程 508

       20.7 rtp协议 510

       20.7.1 rtp基本概念 510

       20.7.2 发送rtp 511

       20.7.3 接收rtp 513

       20.8 linphone编译与测试 515

       20.8.1 编译linphone需要的软件包 516

       20.8.2 x86平台上编译和安装 516

       20.8.3 linphone测试 519

       20.8.4 进一步的测试和开发 523

       20.9 linphone交叉编译 523

       20.9.1 linphone的交叉编译 523

       20.9.2 linphone的测试 526

       20.10 小结 527

linux操作系统下,鼠标键盘能不能用?

       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.

linux系统中没有USB驱动怎么办?

       一般的安装好的linux系统都能用鼠标和键盘,也能读取移动硬盘中的文件。

       能用鼠标和键盘是内核和系统实现了对鼠标键盘的驱动。

       只要挂载上了移动硬盘就能读取其中的数据,并且对其操作。

       先看硬盘是那个盘符,注意要root权限

       # fdisk -l

       如果你的盘符是sdb1,想把sdb1挂载到 /mnt下,挂载就相当于本地硬盘了,就可以对它进行操作

       # mount /dev/sdb /mnt

       #cd /mnt

       这样就能看到你移动硬盘中的数据了

       复制命令:cp

       解压 : tar 、gzip 、 bzip2、 bunzip2、 upzip、 uncompress ……

树莓派openwrt不能使用无线键盘

       要启用 Linux USB 支持,首先进入"USB support"节并启用"Support for USB"选项(对应模块为usbcore.o)。尽管这个步骤相当直观明了,但接下来的 Linux USB 设置步骤则会让人感到糊涂。特别地,现在需要选择用于系统的正确 USB 主控制器驱动程序。选项是"EHCI" (对应模块为ehci-hcd.o)、"UHCI" (对应模块为usb-uhci.o)、"UHCI (alternate driver)"和"OHCI" (对应模块为usb-ohci.o)。这是许多人对 Linux 的 USB 开始感到困惑的地方。

       要理解"EHCI"及其同类是什么,首先要知道每块支持插入 USB 设备的主板或 PCI 卡都需要有 USB 主控制器芯片组。这个特别的芯片组与插入系统的 USB 设备进行相互操作,并负责处理允许 USB 设备与系统其它部分通信所必需的所有低层次细节。

       Linux USB 驱动程序有三种不同的 USB 主控制器选项是因为在主板和 PCI 卡上有三种不同类型的 USB 芯片。"EHCI"驱动程序设计成为实现新的高速 USB 2.0 协议的芯片提供支持。"OHCI"驱动程序用来为非 PC 系统上的(以及带有 SiS 和 ALi 芯片组的 PC 主板上的)USB 芯片提供支持。"UHCI"驱动程序用来为大多数其它 PC 主板(包括 Intel 和 Via)上的 USB 实现提供支持。只需选择与希望启用的 USB 支持的类型对应的"?HCI"驱动程序即可。如有疑惑,为保险起见,可以启用"EHCI"、"UHCI" (两者中任选一种,它们之间没有明显的区别)和"OHCI"。( 赵明注:根据文档,EHCI已经包含了UHCI和OHCI,但目前就我个人的测试,单独加EHCI是不行的,通常我的做法是根据主板类型加载UHCI或OHCI后,再加载EHCI这样才可以支持USB2.0设备)。

       启用了"USB support"和适当的"?HCI"USB 主控制器驱动程序后,使 USB 启动并运行只需再进行几个步骤。应该启用"Preliminary USB device filesystem",然后确保启用所有特定于将与 Linux 一起使用的实际 USB 外围设备的驱动程序。例如,为了启用对 USB 游戏控制器的支持,我启用了"USB Human Interface Device (full HID) support"。我还启用了主"Input core support" 节下的"Input core support"和"Joystick support"。

       一旦用新的已启用 USB 的内核重新引导后,若/proc/bus/usb下没有相应USB设备信息,应输入以下命令将 USB 设备文件系统手动挂装到 /proc/bus/usb:

       # mount -t usbdevfs none /proc/bus/usb

       为了在系统引导时自动挂装 USB 设备文件系统,请将下面一行添加到 /etc/fstab 中的 /proc 挂装行之后:

       none /proc/bus/usb usbdevfs defaults 0 0

       模块的配置方法.

       在很多时候,我们的USB设备驱动并不包含在内核中。其实我们只要根据它所需要使用的模块,逐一加载。就可以使它启作用。

       首先要确保在内核编译时以模块方式选择了相应支持。这样我们就应该可以在/lib/modules/2.4.XX目录看到相应.o文件。在加载模块时,我们只需要运行modprobe xxx.o就可以了(modprobe主要加载系统已经通过depmod登记过的模块,insmod一般是针对具体.o文件进行加载)

       对应USB设备下面一些模块是关键的。

       usbcore.o要支持usb所需要的最基础模块usb-uhci.o(已经提过)usb-ohci.o(已经提过)uhci.o另一个uhci驱动程序,我也不知道有什么用,一般不要加载,会死机的ehci-hcd.o(已经提过 usb2.0)hid.oUSB人机界面设备,像鼠标呀、键盘呀都需要usb-storage.oUSB存储设备,U盘等用到

       相关模块

       ide-disk.oIDE硬盘ide-scsi.o把IDE设备模拟SCSI接口scsi_mod.oSCSI支持

       注意kernel config其中一项:

        Probe all LUNs on each SCSI device

       最好选上,要不某些同时支持多个口的读卡器只能显示一个。若模块方式就要带参数安装或提前在/etc/modules.conf中加入以下项,来支持多个LUN。

        add options scsi_mod max_scsi_luns=9

       sd_mod.oSCSI硬盘sr_mod.oSCSI光盘sg.oSCSI通用支持(在某些探测U盘、SCSI探测中会用到)

       常见USB设备及其配置

       在Linux 2.4的内核中已经支持不下20种设备。它支持几乎所有的通用设备如键盘、鼠标、modem、打印机等,并不断地添加厂商新的设备象数码相机、MP3、网卡等。下面就是几个最常见设备的介绍和使用方法:

       USB鼠标:

       键盘和鼠标属于低速的输入设备,对于已经为用户认可的PS/2接口,USB键盘和USB鼠标似乎并没有太多更优越的地方。现在的大部分鼠标采用了PS/2接口,不过USB接口的鼠标也越来越多,两者相比,各有优势:一般来说,USB的鼠标接口的带宽大于PS/2鼠标,也就是说在同样的时间内,USB鼠标扫描次数就要多于PS/2鼠标,这样在定位上USB鼠标就更为精确;同时USB接口鼠标的默认采样率也比较高,达到125HZ,而PS/2接口的鼠标仅有40HZ(Windows 9x/Me)或是60HZ(Windows NT/2000)。

       对于USB设备你当然必须先插入相应的USB控制器模块:usb-uhci.o或usb-ohci.o

        modprobe usb-uhci

       USB鼠标为了使其正常工作,您必须先插入模块usbmouse.o和mousedev.o

        modprobe usbmouse

        modprobe mousedev

       若你把HID input layer支持和input core 支持也作为模块方式安装,那么启动hid模块和input模块也是必要的。

        modprobe hid

        modprobe input

       USB键盘:

       一般的,我们现在使用的键盘大多是PS/2的,USB键盘还比较少见,但是下来的发展,键盘将向USB接口靠拢。使用USB键盘基本上没有太多的要求,只需在主板的BIOS设定对USB键盘的支持,就可以在各系统中完全无障碍的使用,而且更可以真正做到在即插即用和热插拔使用,并能提供两个USB连接埠:让您可以轻易地直接将具有USB接头的装置接在您的键盘上,而非计算机的后面。

       同样你当然必须先插入相应的USB控制器模块:usb-uhci.o或usb-ohci.o

        modprobe usb-uhci

       然后您还必须插入键盘模块usbkbd.o,以及keybdev.o,这样usb键盘才能够正常工作。此时,运行的系统命令:

       modprobe usbkbd

       modprobe keybdev

       同样若你把HID input layer支持和input core 支持也作为模块方式安装,那么启动hid模块和input模块也是必要的。

       U盘和USB读卡器:

       数码存储设备现在对我们来说已经是相当普遍的了。CF卡、SD卡、Memory Stick等存储卡已经遍及我们的身边,通常,他们的读卡器都是USB接口的。另外,很多MP3、数码相机也都是USB接口和计算机进行数据传递。更我们的U盘、USB硬盘,作为移动存储设备,已经成为我们的必须装备。

       在Linux下这些设备通常都是以一种叫做usb-storage的方式进行驱动。要使用他们必须加载此模块

        modprobe usb-storage

       当然,usbcore.o 和usb-uhci.o或usb-ohci也肯定是不可缺少的。另外,若你系统中SCSI支持也是模块方式,那么下面的模块也要加载

        modprobe scsi_mod

        modprobe sd_mod

       在加载完这些模块后,我们插入U盘或存储卡,就会发现系统中多了一个SCSI硬盘,通过正确地mount它,就可以使用了(SCSI硬盘一般为/dev/sd?,可参照文章后面的常见问题解答)。

        mount /dev/sda1 /mnt

       Linux支持的其他USB设备。

       MODEM--(比较常见) 网络设备 摄像头--(比较常见)例如ov511.o 联机线--可以让你的两台电脑用USB线实现网络功能。usbnet.o 显示器--(我没见过) 游戏杆 电视盒--(比较常见) 手写板--(比较常见) 扫描仪--(比较常见) 刻录机--(比较常见) 打印机--(比较常见)

       注意:

       上面所说的每个驱动模块,并不是都要手动加载,有很多系统会在启动或你的应用需要时自动加载的,写明这些模块,是便于你在不能够使用USB设备时,可以自行检查。只要用lsmod确保以上模块已经被系统加载,你的设备就应该可以正常工作了。当然注意有些模块已经以内核方式在kernel启动时存在了(这些模块文件在/lib/modules/2.4.XX中是找不到的)。

       输入相关命令

Linux驱动与设备节点简介 & Android内核与Linux内核的区别

       原因:树莓派使用OpenWRT系统时,无线键盘不能正常使用的原因可能是因为OpenWRT系统默认没有安装或者没有正确配置与无线键盘兼容的驱动程序。

       拓展:OpenWRT是一个基于Linux的嵌入式操作系统,其主要用途是用于路由器和嵌入式设备。由于OpenWRT的设计初衷是为了提供稳定、高效的网络路由功能,因此在系统安装和配置上更注重网络性能和安全性,对于其他外设的兼容性可能不够完善。

       要解决无线键盘不能使用的问题,可以尝试以下方法:

       1. 检查驱动程序:确认OpenWRT系统中是否已安装与无线键盘兼容的驱动程序。如果没有安装,可以尝试手动安装相应的驱动程序。

       2. 配置键盘:在OpenWRT系统中,可能需要手动配置无线键盘的参数,例如设置键盘的连接方式、频率等。可以参考OpenWRT的官方文档或社区论坛中的相关讨论,获取详细的配置指南。

       3. 使用有线键盘:如果无线键盘无法正常使用,可以考虑使用有线键盘连接到树莓派的USB接口上。有线键盘通常不会受到兼容性问题的限制。

       需要注意的是,由于OpenWRT系统的配置和使用相对复杂,对于非专业用户来说可能会有一定的学习和操作难度。如果以上方法都无法解决问题,建议咨询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.h文件中,已经在官方注册的主设备号和次设备号在Documentation/devices.txt文件中。

        Android系统最底层是Linux,并且在中间加上了一个Dalvik / ART的Java虚拟机,从表面层看是Android运行库。每个Android应用都运行在自己的进程上,享有Dalvik / ART虚拟机为它分配的专有实例,并支持多个虚拟机在同一设备上高效运行,虚拟机执行的是专有格式的可执行文件(.dex) - 该格式经过优化,以将内存好用降到最低。

        Android内核和Linux内核的差别主要体现在如下11个方面:

       好了,关于“linux usb键盘驱动分析”的话题就讲到这里了。希望大家能够通过我的讲解对“linux usb键盘驱动分析”有更全面、深入的了解,并且能够在今后的工作中更好地运用所学知识。