『壹』 USB JOYSTICK 驱动 WIN7 家庭版 32
1.需要该手柄硬仿敬件的驱动,就是一张光盘进行手柄的驱动安装。又有安装的驱动才能让手柄在电脑上正常的运行。如果一些手柄带有内置驱动 就不需要那么麻烦了。直接插上就会提示你安装使用的。
2 手柄必须支持你所玩的游戏。
3 window7 的系统很有可能跟你的手柄硬件不兼容尘闹造成无法使用。
你在朋友或者亲戚家使用XP系统试试是否是系备兄慎统不兼容的问题。
『贰』 USB Joystick是黄色问号,手柄驱动装不起,不能识别硬件
还是驱动的问题,可能之前的驱动没有卸载干净,很有可能是有些注册码残留,用优化大师清理一下,或者360磁盘清理,重新安装,重启,中租清试试卖前看。还型橡有就是USB口肯能算坏,(可能与主板连接松动)导致供电不足(很少出现)。
『叁』 急。关于游戏手柄的驱动问题
他写的是“添加其他设备”,如果要安装的话一般默认的SNOY的手柄就应该可以。
『肆』 linux修改手柄默认名称
linux修改手柄默认名称是掘宏肢腊hostname,此命令的作用是暂时修改linux的主机设备名称,它的存活时间为linux当前的运行时间,即在重启linux之前的运行时间内。一般修改以后就生效,但是不能够永判饥册久修改。PS2模拟器是一款免费、并且源代码开放的软件,发布于在GNU通用公共许可证下,是一款PlayStation 2模拟器软件。PS2模拟器是世上第一个成功模拟PS2商业游戏的PCSX2模拟器。PS2模拟器下载使用C语言编写,可以在32位微软Windows和Linux操作系统下使用。
『伍』 ubuntu怎么用接收器连接手柄
在ubuntu1604/2004环境下实现xbox one无线手柄遥+usb无线适配器控机器人运动。
1. 安装xboxdrv和joystick
sudo apt install xboxdrv
sudo apt install joystick
2. 将usb无线接收器插入,查看设备信息
cat /proc/bus/input/devices
输出如下信息说明枝运系统已经识别到了xbox的接收器
I: Bus=0003 Vendor=045e Proct=0719 Version=0100
N: Name="Xbox 360 Wireless Receiver"
P: Phys=
S: Sysfs=/devices/virtual/input/input28
U: Uniq=
H: Handlers=event28 js3
B: PROP=0
B: EV=b
B: KEY=f 0 0 0 0 0 0 7fdb000000000000 0 0 0 0
B: ABS=1b
登录后复制
3. 编译xow
Xow是一个非官方的Linux版本Xbox one手柄无线适配器驱动,其底层基于libusb进行工作,通过wifi与游戏手柄进行连接,其使用MT76xx的Wifi chip;
3.1 下载xow源码
git clonet https://github.com/mesalix/xow.git
3.2 安装依赖
audo apt install curl libusb-1.0-0-dev cabextract
3.3 编译
cd xow
make BUILD=RELEASE
sudo make install
3.4 Download the firmware for the wireless dongle:
sudo xow-get-firmware.sh
3.5 运行xow
sudo ./xow
[sudo] password for sar:
2022-05-20 11:18:43 INFO - xow v0.5-36-gd335d60 ©Severin v. W.
2022-05-20 11:18:43 INFO - Waiting for device…
2022-05-20 11:18:43 INFO - Wireless address: 62:45:bd:05:8b:85
2022-05-20 11:18:43 INFO - Dongle initialized
2022-05-20 11:18:49 INFO - Controller ‘1’ connected
2022-05-20 11:18:49 INFO - Device announced, proct id: 02d1
2022-05-20 11:18:49 INFO - Battery level: full
2022-05-20 11:28:10 INFO - Controller ‘1’ disconnected
2022-05-20 11:33:12 INFO - Controller ‘1’ connected
2022-05-20 11:33:12 INFO - Device announced, proct id: 02d1
3.6 编译错误解决:
执行make BUILD=RELEASE报错:找不到uinput_setup、uinput_abs_setup的定义
报错原因:linux内核版本太低,xow不支持UINPUT_VERSION 5以下版本;
解决方法:从高版本的ubuntu中拷贝/usr/include/linux/uinput.h替换当前系统下的/usr/include/linux/uinput.h
xow驱动分析可以参考这篇博客:https://blog.csdn.net/YingbinLi/article/details/123268015
4. xbox手柄测试
先运行./xow,在按下xbox one手柄最前端的旦册带x标识的圆形按键,按下按键后按键灯点亮,开始慢闪,配对模搭宏成功后,按键灯常亮;
打开了一个linux终端,运行:
sudo jstest /dev/input/js4
Driver version is 2.1.0.
Joystick (Xbox One Wireless Controller) has 8 axes (X, Y, Z, Rx, Ry, Rz, Hat0X, Hat0Y)
and 11 buttons (BtnA, BtnB, BtnX, BtnY, BtnTL, BtnTR, BtnSelect, BtnStart, BtnMode, BtnThumbL, BtnThumbR).
Testing ... (interrupt to exit)
Axes: 0: 0 1: 0 2:-32767 3: 0 4: 0 5:-32767 6: 0 7: 0 Buttons: 0:off 1:off 2:off 3:off 4:off 5:off 6:off 7:off 8:off 9:off 10:off
登录后复制
注意:在/dev/input下可能会生成js0, js1, js2, js3, js4 5个文件,可以分别使用jstest 测试一下,运行sudo jstest /dev/input/js4 后,操作手柄操作杆查看数据是否有变化。
5. xbox手柄操作数据接收与解析
joystick_xbox.h
#include <linux/input.h>
#include <linux/joystick.h>
#include <string>
class JoystickXBox
{
public:
JoystickXBox(const std::string &dev_name);
~JoystickXBox();
bool Open();
void Close();
bool Read(struct js_event &js);
unsigned char GetAxes()
{
return axes_;
}
unsigned char GetButtons()
{
return buttons_;
}
int GetFd()
{
return fd_;
}
void PrintData();
void ProcessData(const struct js_event &js);
private:
bool debug_ = false;
int fd_ = -1;
std::string dev_name_ = "";
int version_ = 0x000800;
char name_[512] = "Unkown";
unsigned char axes_ = 2;
unsigned char buttons_ = 2;
int *axis_ = nullptr;
char *button_ = nullptr;
};
登录后复制
joystick_xbox.cpp
#include <errno.h>
#include <fcntl.h>
#include <memory>
#include <stdio.h>
#include <string.h>
#include <sys/stat.h>
#include <sys/types.h>
#include <unistd.h>
#include "joystick_xbox.h"
JoystickXBox::JoystickXBox(const std::string &dev_name) : fd_(-1),dev_name_(dev_name)
{
}
JoystickXBox::~JoystickXBox()
{
if (axis_)
{
delete axis_;
axis_ = nullptr;
}
if (button_)
{
delete button_;
button_ = nullptr;
}
}
bool JoystickXBox::Open()
{
int fd = -1;
if (dev_name_.length() == 0)
{
return false;
}
// O_NONBLOCK open
fd = open(dev_name_.c_str(), O_RDONLY | O_NONBLOCK);
if (fd < 0)
{
fd_ = -1;
printf("JoystickXBox open %s error, %d(%s)\n", dev_name_.c_str(), errno, strerror(errno));
return false;
}
ioctl(fd, JSIOCGVERSION, &version_);
ioctl(fd, JSIOCGAXES, &axes_);
ioctl(fd, JSIOCGBUTTONS, &buttons_);
ioctl(fd, JSIOCGNAME(512), name_);
printf("JoystickXBox Driver version is %d.%d.%d.\n", version_ >> 16, (version_ >> 8) & 0xff, version_ & 0xff);
printf("JoystickXBox (%s) has %d axes and %d buttons\n", name_, axes_, buttons_);
fd_ = fd;
axis_ = (int *)calloc(axes_, sizeof(int));
button_ = (char *)calloc(buttons_, sizeof(char));
return true;
}
void JoystickXBox::Close()
{
if (fd_ > 0)
{
close(fd_);
fd_ = -1;
}
}
bool JoystickXBox::Read(struct js_event &js)
{
int len = -1;
if (fd_ < 0)
{
return false;
}
memset(&js, 0, sizeof(js));
len = read(fd_, &js, sizeof(struct js_event));
if (len != sizeof(struct js_event))
{
printf("JoystickXBox: error reading, %d(%s)\n", errno, strerror(errno));
return false;
}
return true;
}
void JoystickXBox::ProcessData(const struct js_event &js)
{
JoystickFrame frame;
int joystick_angular_value = 0;
int joystick_linear_value = 0;
int button_angular_value = 0;
int button_linear_value = 0;
switch (js.type & ~JS_EVENT_INIT)
{
case JS_EVENT_BUTTON:
button_[js.number] = js.value;
break;
case JS_EVENT_AXIS:
axis_[js.number] = js.value;
break;
}
if (debug_)
{
PrintData();
}
}
void JoystickXBox::PrintData()
{
if (axes_ && axis_)
{
printf("Axes: ");
for (int i = 0; i < axes_; i++)
{
printf("%2d:%6d ", i, axis_[i]);
}
}
if (buttons_ && button_)
{
printf("Buttons: ");
for (int i = 0; i < buttons_; i++)
{
printf("%2d:%s ", i, button_[i] ? "on " : "off");
}
}
printf("\n");
fflush(stdout);
}
int main()
{
bool ret = false;
int err_cnt = 0;
fd_set rfds;
timeval timeout;
struct js_event js;
int fd = -1;
std::string dev_name = "/dev/input/js4";
std::unique_ptr<JoystickXBox> joystick_xbox = std::make_unique<JoystickXBox>(dev_name);
ret = joystick_xbox->Open();
if (!ret)
{
return -1;
}
fd = joystick_xbox->GetFd();
while (1)
{
usleep(100);
timeout.tv_sec = 1;
timeout.tv_usec = 0;
FD_ZERO(&rfds);
FD_SET(fd, &rfds);
int ret = select(fd + 1, &rfds, NULL, NULL, &timeout);
if (ret > 0 && FD_ISSET(fd, &rfds))
{
ret = joystick_xbox->Read(js);
if (ret)
{
joystick_xbox->ProcessData(js);
}
}
}
joystick_xbox->Close();
return 0;
}
登录后复制
ubuntu
linux
点赞文章给优秀博主打call~
『陆』 求generic USB Joystick驱动``
http://d82.d.iask.com/fs/800/1//exe/Setup.exe
绿1 红2 蓝3 粉4
WELCOM 上面有圈黑色花纹
是盯册弊这样的凯族话就用这个了姿慎.
『柒』 FIGHT JOYSTICK摇杆驱动
其实用不着人工搜索这么麻烦,建议你用新版的”驱动精灵“帮你找,安做庆装运行后它能在网上搜罗关于你电脑上所有硬件所匹配的所有驱动程序(包括最新的和最旧的)烂盯,你要做的就是一般都是选择最新的那个安装。
给你个华军软件的下饥胡和载地址吧:http://www.onlinedown.net/SOFT/3450.htm
『捌』 如何写一个Android USB接口驱动
说到 android 驱动是离不开 Linux 驱动的。Android 内核采用的是 Linux2.6 内核 (最近Linux 3.3 已经包含了一些 Android 代码)。但 Android 并没有完全照搬 Linux 系统内核,除了对Linux 进行部分修正,还增加了不少内容。android 驱动 主要分两种类型:Android 专用驱动 和 Android 使用的设备驱动(linux)。
Android 专有驱动程序:
1)Android Ashmem 匿名共享内存; 为用户空间程序提供分配内存的机制,为进程间提供大块共享内存,同时为内核提供回收和管理这个内存。
2)Android Logger 轻量级的LOG(日志) 驱动;
3)Android Binder 基于 OpenBinder 框架的一个驱动;
4)Android Power Management 电源管理模块;
5)Low Memory Killer 低内存管理器;
6)Android PMEM 物理内存驱动;
7)USB Gadget USB 驱动(基于 gaeget 框架);
8)Ram Console 用于调试写入日志信息的设备;
9)Time Device 定时控制设备;
10)Android Alarm 硬件时钟;
Android 上的设备驱动:
1)Framebuff 显示驱动;
2)Event 输入设备驱动;
3)ALSA 音频驱动;
4)OSS 音频驱动;
5)v412摄像头:视频驱动;
6)MTD 驱动;
7)蓝牙驱动;
8)WLAN 设备驱动;
Android 专有驱动程序
1.Android Ashmem
为用户空间程序提供分配内存的机制,为进程间提供大块共享内存,同时为内核提供回收和管理这个内存。
设备节点:/dev/ashmen .主设备号 10.
源码位置: include/linux/ashmen.h Kernel /mm/ashmen.c
相比于 malloc 和 anonymous/named mmap 等传统的内存分配机制,其优势是通过内核驱动提供了辅助内核的内存回收算法机制(pin/unoin)
2.Android Logger
无论是底层的源代码还上层的应用,我们都可以使用 logger 这个日志设备看、来进行调试。
设备节点: /dev/log/main /dev/log/event /dev/log/radio
源码位置:include/linux/logger.h include/linux/logger.c
3.Android Binder
IPC Binder 一种进程间通信机制。他的进程能够为其它进程提供服务 ----- 通过标准的 Linux 系统调用 API。
设备节点 :/dev/binder
源码位置:Kernel/include/linux/binder.h Kernel/drivers/misc/binder.c
4.Android Power Management
一个基于标准 linux 电源管理的轻量级 Android 电源管理系统,在 drivers/android/power.c kernel/power/
5.Low Memory Killer
它在用户空间中指定了一组内存临界值,当其中某个值与进程描述中的 oom_adj 值在同一范围时,该进程将被Kill掉(在parameters/adj中指定oome_adj 的最小值)。它与标准的Linux OOM机制类似,只是实现方法不同
源码位置:drivers/misc/lowmemorykiller.c
6.Android PMEM
PMEM 主要作用就是向用户空间提供连续的物理内存区域。
1.让 GPU 或 VPU 缓冲区共享 CPU 核心。
2.用于 Android service 堆。
源码位置:include/linux/android_pmem.h drivers/android/pmem.c
7.USB Gadget
基于标准 Linux USB gaeget 驱动框架的设备驱动。
源码位置:drivers/usb/gadet/
8.Ram Console
为了提供调试功能,android 允许将调试日志信息写入这个设备,它是基于 RAM 的 buffer.
源码位置: drivers/staging/android/ram_console.c
9.Time Device
定时控制,提供了对设备进行定时控制的功能。
源码位置:drivers/staging/android/timed_output.c(timed_gpio.c)
10.Android Alarm
提供一个定时器,用于把设备从睡眠状态唤醒,同时它还提供了一个即使在设备睡眠时也会运行的时钟基准。
设备节点:/dev/alarm
源码位置:drivers/trc/alarm.c
Android 设备驱动
1. Framebuffer 帧缓存设备
Framebuffer 驱动在 Linux 中是标准的显示设备的驱动。对于 PC 系统,它是显卡的驱动 ; 对于嵌入式 SOC 处理器系统,它是 LCD 控制器或者其他显示控制器的驱动。它是一个字符设备,在文件系统中设备节点通常是 /dev/fbx 。 每个系统可以有多个显示设备 , 依次用 /dev/fbO 、 /dev/fb l
等来表示。在 Android 系统中主设备号为 29 ,次设备号递增生成。
Android 对 Framebuffer 驱动的使用方式是标准的 , 在 / dev / graphie / 中的 Framebuffer 设备节点由 init 进程自动创建 , 被 libui 库调用 。 Android 的 GUI 系统中 , 通过调用 Framebuffer 驱动的标准接口,实现显示设备的抽象。
Framebuff的结构框架和实现 :
linux LCD驱动(二)--FrameBuffer
Linux LCD驱动(四)--驱动的实现
2.Event输入设备驱动
Input 驱动程序是 Linux 输入设备的驱动程序 , 分为游戏杆 (joystick) 、 鼠标 (mouse 和 mice)和事件设备 (Event queue)3 种驱动程序。其中事件驱动程序是目前通用的程序,可支持键盘 、 鼠标、触摸屏等多种输入设备。 Input 驱动程序的主设备号是 l3 ,每一种 Input 设备从设备号占 用5 位 , 3 种从设备号分配是 : 游戏杆 0 ~ 61 ; Mouse 鼠标 33 ~ 62 ; Mice 鼠标 63 ; 事件设备 64 ~ 95 ,各个具体的设备在 misc 、 touchscreen 、 keyboard 等目录中。
Event 设备在用户空问使用 read 、 ioctl 、 poll 等文件系统的接口操作, read 用于读取输入信息, ioctl 用于获取和设置信息, poll 用于用户空间的阻塞,当内核有按键等中断时,通过在中断中唤醒内核的 poll 实现。
Event 输入驱动的架构和实现:
Linux设备驱动之——input子系统
3.ALSA音频驱动
高级 Linux 声音体系 ALSA(Advanced Linux Sound Architecture ) 是为音频系统提供驱动 的Linux 内核组件,以替代原先的开发声音系统 OSS 。它是一个完全开放源代码的音频驱动程序集 ,除了像 OSS 那样提供一组内核驱动程序模块之外 , ALSA 还专门为简化应用程序的编写提供相应的函数库,与 OSS 提供的基于 ioctl 等原始编程接口相比, ALSA 函数库使用起来要更加方便一些
利用该函数库,开发人员可以方便、快捷地开发出自己的应用程序,细节则留给函数库进行内部处理 。 所以虽然 ALSA 也提供了类似于 OSS 的系统接口 , 但建议应用程序开发者使用音频函数库,而不是直接调用驱动函数。
ALSA 驱动的主设备号为 116 ,次设备号由各个设备单独定义,主要的设备节点如下:
/ dev / snd / contmlCX —— 主控制 ;
/ dev / snd / pcmXXXc —— PCM 数据通道 ;
/ dev / snd / seq —— 顺序器;
/ dev / snd / timer —— 定义器。
在用户空问中 , ALSA 驱动通常配合 ALsA 库使用 , 库通过 ioctl 等接口调用 ALSA 驱动程序的设备节点。对于 AIJSA 驱动的调用,调用的是用户空间的 ALsA 库的接口,而不是直接调用 ALSA 驱动程序。
ALSA 驱动程序的主要头文件是 include / sound ./ sound . h ,驱动核心数据结构和具体驱动的注册函数是 include / sound / core . h ,驱动程序 的核心实现是 Sound / core / sound . c 文件。
ALSA 驱动程序使用下面的函数注册控制和设备:
int snd _ pcm _ new (struct snd _ card * card , char * id , int device , int playback _ count , int capture _ count , struct snd _ pcm ** rpcm) ;
int snd ctl _ add(struct snd _ card * card , struct snd _ kcontrol * kcontro1) ;
ALSA 音频驱动在内核进行 menuconfig 配置时 , 配置选项为 “ Device Drivers ” > “ Sound c ard support ” 一 > “ Advanced Linux Sound Architecture ” 。子选项包含了 Generic sound devices( 通用声音设备 ) 、 ARM 体系结构支持,以及兼容 OSS 的几个选项。 ALsA 音频驱动配置对应的文件是sound / core / Kconfig 。
Android 没有直接使用 ALSA 驱动,可以基于 A-LSA 驱动和 ALSA 库实现 Android Audio 的硬件抽象层; ALSA 库调用内核的 ALSA 驱动, Audio 的硬件抽象层调用 ALSA 库。
4.OSS音频驱动
OSS(Open Sound System开放声音系统)是 linux 上最早出现的声卡驱动。OSS 由一套完整的内核驱动程序模块组成,可以为绝大多数声卡提供统一的编程接口。
OSS 是字符设备,主设备号14,主要包括下面几种设备文件:
1) /dev/sndstat
它是声卡驱动程序提供的简单接口,它通常是一个只读文件,作用也只限于汇报声卡的当前状态。(用于检测声卡)
2)/dev/dsp
用于数字采样和数字录音的设备文件。对于音频编程很重要。实现模拟信号和数字信号的转换。
3)/dev/audio
类似于/dev/dsp,使用的是 mu-law 编码方式。
4)/dev/mixer
用于多个信号组合或者叠加在一起,对于不同的声卡来说,其混音器的作用可能各不相同。
5)/dev/sequencer
这个设备用来对声卡内建的波表合成器进行操作,或者对 MIDI 总线上的乐器进行控制。
OSS 驱动所涉及的文件主要包括:
kernel/include/linux/soundcard.h
kernel/include/linux/sound.h 定义 OSS 驱动的次设备号和注册函数
kernel/sound_core.c OSS核心实现部分
5.V4l2视频驱动
V4L2是V4L的升级版本,为linux下视频设备程序提供了一套接口规范。包括一套数据结构和底层V4L2驱动接口。V4L2提供了很多访问接口,你可以根据具体需要选择操作方法。需要注意的是,很少有驱动完全实现了所有的接口功能。所以在使用时需要参考驱动源码,或仔细阅读驱动提供者的使用说明。
V4L2的主设备号是81,次设备号:0~255,这些次设备号里也有好几种设备(视频设备、Radio设备、Teletext、VBI)。
V4L2的设备节点: /dev/videoX, /dev/vbiX and /dev/radioX
Android 设备驱动(下)
MTD 驱动
Flash 驱动通常使用 MTD (memory technology device ),内存技术设备。
MTD 的字符设备:
/dev/mtdX
主设备号 90.
MTD 的块设备:
/dev/block/mtdblockX
主设备号 13.
MTD 驱动源码
drivers/mtd/mtdcore.c:MTD核心,定义MTD原始设备
drivers/mtd/mtdchar.c:MTD字符设备
drivers/mtd/mtdblock.c:MTD块设备
MTD 驱动程序是 Linux 下专门为嵌入式环境开发的新一类驱动程序。Linux 下的 MTD 驱动程序接口被划分为用户模块和硬件模块:
用户模块 提供从用户空间直接使用的接口:原始字符访问、原始块访问、FTL (Flash Transition Layer)和JFS(Journaled File System)。
硬件模块 提供内存设备的物理访问,但不直接使用它们,二十通过上述的用户模块来访问。这些模块提供了闪存上读、写和擦除等操作的实现。
蓝牙驱动
在 Linux 中,蓝牙设备驱动是网络设备,使用网络接口。
Android 的蓝牙协议栈使用BlueZ实现来对GAP, SDP以及RFCOMM等应用规范的支持,并获得了SIG认证。由于Bluez使用GPL授权, 所以Android 框架通过D-BUS IPC来与bluez的用户空间代码交互以避免使用未经授权的代码。
蓝牙协议部分头文件:
include/net/bluetooth/hci_core.h
include/net/bluetooth/bluetooth.h
蓝牙协议源代码文件:
net/bluetooth/*
蓝牙驱动程序部分的文件:
drivers/bluetooth/*
蓝牙的驱动程序一般都通过标准的HCI控制实现。但根据硬件接口和初始化流程的不同,又存在一些差别。这类初始化动作一般是一些晶振频率,波特率等基础设置。比如CSR的芯片一般通过BCSP协议完成最初的初始化配置,再激活标准HCI控制流程。对Linux来说,一旦bluez可以使用HCI与芯片建立起通信(一般是hciattach + hciconfig),便可以利用其上的标准协议(SCO, L2CAP等),与蓝牙通信,使其正常工作了。
WLAN 设备驱动(Wi-Fi)(比较复杂我面会专门写个wifi分析)
在linux中,Wlan设备属于网络设备,采用网络接口。
Wlan在用户空间采用标准的socket接口进行控制。
WiFi协议部分头文件:
include/net/wireless.h
WiFi协议部分源文件:
net/wireless/*
WiFi驱动程序部分:
drivers/net/wireless/*
『玖』 谁能指导我一下怎么把Generic USB Joystick驱动卸载掉啊。。。我怎么删都删不掉呢。。
你要删除驱动?那右击我的电脑-管理-设备管理器里删除驱动试试!
『拾』 linux系统中没有USB驱动怎么办
要启用 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/moles/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/moles.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/moles/2.4.XX中是找不到的)。
输入相关命令