跳转到主要内容

单击提交则表示您同意developerWorks 的条款和条件。 查看条款和条件.

当您初次登录到 developerWorks 时,将会为您创建一份概要信息。您在 developerWorks 概要信息中选择公开的信息将公开显示给其他人,但您可以随时修改这些信息的显示状态。您的姓名(除非选择隐藏)和昵称将和您在 developerWorks 发布的内容一同显示。

所有提交的信息确保安全。

  • 关闭 [x]

当您初次登录到 developerWorks 时,将会为您创建一份概要信息,您需要指定一个昵称。您的昵称将和您在 developerWorks 发布的内容显示在一起。

昵称长度在 3 至 31 个字符之间。 您的昵称在 developerWorks 社区中必须是唯一的,并且出于隐私保护的原因,不能是您的电子邮件地址。

单击提交则表示您同意developerWorks 的条款和条件。 查看条款和条件.

所有提交的信息确保安全。

  • 关闭 [x]

《硬件的自动检测与配置》 FAQ

于 辰涛 (scu_yct@263.net), 软件工程师, 联想(北京)电脑公司
于辰涛,联想(北京)电脑公司软件工程师。目前主要从事 Linux 系统安装程序的开发工作,主要研究兴趣是操作系统的工作机制和开发底层系统程序。您可以通过电子邮件scu_yct@263.net跟他联系。

简介: 在我的关于硬件检测与配置的两篇文章《 如何在 Linux 下实现硬件的检测》和《 如何在 Linux 下实现设备的配置》发表之后,陆续收到了一些读者来信。他们问了很多关于硬件配置方面的问题,现在我把这些最典型的问题加以整理,写成这篇文章。由于我不可能接触到所有的硬件设备,所以对于内置 MODEM 和声卡只能提供一些方法性的指导,而不能提供关于配置过程详细到每一步的一个描述。我希望这篇文章会对大家学习和使用 Linux 有所帮助。

发布日期: 2010 年 9 月 20 日 (最初发布 2001 年 11 月 )
级别: 中级
访问情况 : 2458 次浏览
评论: 


1. 我用 ALSA 成功配置了我的声卡,但每次启动 LINUX 都必须重新用 ALSA 里的 alsaconf-0.4.3b 目录里的命令 alsaconf 配置,这是为什么,极不方便,请问如何设置才能解决此问题?
答:在缺省情况下 ALSA 驱动程序会静音所有的音频输出。为了获得声音,必须解除主音量和 PCM 音量的静音。下面的命令设置音频输出的主音量和编、解码音量,一般而言,打开这两个设置声音输出就可以了。

 amixer -c 0 sset 'Master',0 100%,100% unmute 
 amixer -c 0 sset 'PCM ',0 100% unmute

为了在每次插入声卡驱动模块时,都解除静音,您可以在 /etc/modules.conf(对于老一些 Linux 版本,比如 Redhat 6.2 此文件为 /etc/conf.modules)加入下列语句:

 post-install snd-card-xxxx amixer -c 0 sset 'Master',0 100%, \ 
 100% unmute && amixer -c 0 sset 'PCM ',0 100% unmute


snd-card-xxxx表示声卡对应的 alsa 驱动程序模块。

2. 如何在 LINUX 下改变显示器的刷新率,我的眼睛实在受不了 60HZ 的刷新率了?
答:在 Linux 系统下,要配置 X-Windows 系统一般使用 /usr/X11R6/bin/Xconfigurator 命令进行配置。在配置之前,您最好能先了解显卡的型号、显示器型号等信息,然后再进行刷新频率的配置。

Xconfigurator 程序会先进行显示器类型自检,根据检测到的显示器型号,在配置文件 /etc/X11/XF86Config(对于 XFree86 4.x 版本,配置文件为 /etc/X11/XF86Config-4)中设置显示器支持的场频范围。这样,在 X 系统启动之后,垂直刷新率会自动设置为当前分辨率下支持的最高刷新率。

但是,如果您的显示器没有类型信息或者是 Xconfigurator 不支持的显示器类型,那么您就只能设置显示器为一些通用的显示模式了。这些显示模式中比较高的刷新频率为 1024x768 分辨率下 70Hz 垂直扫描频率的模式。

如果您想设置较高的刷新率(垂直扫描频率 85Hz),就只有手动进行了。每个 Vesa 定义的通用显示模式所对应的刷新频率,您可以在《如何在 Linux 下实现设备的配置》一文中找到。这时您需要修改文件 XF86Config 的 Monitor 节。 Monitor 节主要描述显示器的信息,每个 XF86Config 文件至少包含一个显示器节。在显示器支持 vbe 和 edid 扩展时,它的所有信息包括显示器大小、显示器支持的刷新频率范围、显示器制造商信息等都可以从显示器上读出。此节的一般格式如下:
Section "Monitor"
Identifier
Entries
EndSection

它最关键的描述性信息是:

HorizSync horizsync-range
监视器支持的水平刷新频率范围。单位是 kHz,缺省范围是 28-33kHz 。

VertRefresh vertrefresh-range
监视器支持的垂直刷新频率范围。单位是 Hz,缺省范围是 43-72Hz 。

要设置监视器到更高的刷新率,必须用 vi 修改 /etc/X11/XF86Config 文件下的这两个字段,比如:
HorizSync 28-60
VertRefresh 60-100

上面的设置可以设置显示分辨率为 800x600 下的垂直刷新率为 85Hz,分辨率为 1024x768 下的垂直刷新率为 70Hz 。

注意:如果显示器达不到这么高的水平扫描频率范围,在显示器上会出现黑屏的现象。如果出现黑屏,您可以先使用 Ctrl + Alt + Backspace 杀死当前 X 服务进程,并重新修改 XF86Config 文件,尝试低一些的显示刷新频率即可。

3. 请问一下 , 在 LINUX 下开发工具为什么不能使用 C++ 来开发设备驱动程序 ?我测试了一下使用 g++ 编译通不过,是否为 g++ 编译选项不对,正确的编译选项是什么 ?
答:在 Linux 下,C++ 编译器的实现和 C 编译器是不同的。因为涉及到函数重载和多态等问题,所以 C++ 在编译实现时,使用了虚表的机制。这和 C 语言编译成目标代码的直接访问方式是有很大不同的。由于 Linux 内核大部分使用 C 语言编制,并且 Linux 驱动程序在事先是采用了类似函数调用表的机制,所以开发者使用 gcc 开发驱动程序应该是最直接也是最高效的。

4. 我的是蓝点 1.0 系统,安装的内猫是 Tplink ia5628v 型,它的芯片是 ambient 5628d,无法驱动。我下载了 intel 的 r-335-5 驱动程序,按提示安装不能用。在 Windows ME 下猫用的是 com4 口,我试了 ttys0~ttys3.ttys10 都无反应,请指教。
答:对于内置式 modem,无法正确配置的最大问题是设备没有合适的驱动程序。大部分厂商都不愿意公开产品的内部技术细节,所以网上关于内猫的驱动程序很少,而能够正常工作的驱动程序就更少了。如果要查找内猫的驱动程序,您需要先运行,

 lspci -v

查得内猫详细的设备信息,包括设备标识和制造商标识,然后您再访问站点 www.linmodems.org,获得内猫驱动程序的详细信息。

你的芯片类型是 ambient,那么你最好试试驱动程序 http://linmodems.org/CLModem-0.3.0.tar.gz。下载此驱动之后,您需要手动解开 tar 包,并正确安装此驱动程序。

在成功安装了驱动程序之后,内猫驱动程序一般都要生成一个仿真的串口设备。因为很多程序使用设备文件 /dev/modem 访问 modem,所以为了能够正常使用 modem 设备,您可能还需要手动建立链接文件。比如,你的内猫仿真的设备是 ttyS4,那么执行命令:

 ln -sf /dev/ttyS4 /dev/modem

使用哪个串口设备这主要是看它仿真哪个串口了。在执行上述步骤之后,您可以执行 minicom,然后运行 AT 命令 ATZ 测试 modem 是否正常工作。如果显示 OK 表示 modem 配置成功,否则失败。

5. 在 LINUX 下,我用 DATE 命令设置时间 , 但它没有写入 CMOS, 机器重起后时间没有改变 , 请问如何解决 ?
答:您机器的 bios 恐怕与标准的 bios 不是完全一致(或者出了什么问题),date 命令是调用系统函数 stime,它是 glibc 的函数,它又把控制传给了最底层的 bios 调用,由它们进行时间的设置。如果您的机器的时钟机制不是这样,那么时间设置不会工作。

6. 我想装双操作系统,linux 和 win98 。但是我装坏了,win98 不能看见,一开机就直接进入了 linux 而且是没有图形界面。 Linux 只能输入命令,我装的是 linux radhat7.0 。 机子的内存是 64 兆,cpu 是奔三, 实达品牌机,在还没有安装 linux 前的 win98 系统可能已经被覆盖掉了,或者格式化了,现在的情况是我想重新安装 win98 和 linux,我想让这两个操作系统可以在开机时可以选择进入。
答:设置 Linux 系统的双引导,您必须要在安装 Linux 系统之后,修改 lilo 的配置文件 /etc/lilo.conf 。举一个例子,

 boot=/dev/hda 
 map=/boot/map 
 install=/boot/boot.b 
 vga=normal 
 default=linux 
 image=/boot/vmlinuz 
    label=linux 
    root=/dev/hda2 
 other=/dev/hda1 
    label=win98

这个简单的例子设置一台具有 win98 和 linux 操作系统的机器的双引导,其中 win98 安装在 hda1 分区上,这是第一块硬盘的第一个主分区。 Linux 分区安装在 hda2 分区上。

一般而言,您最好在系统上先安装 Windows 操作系统,为了保险起见,您最好还要定制一张 Windows 系统恢复软盘,然后再安装 Linux 操作系统。在安装 Linux 时,注意要选择和 Windows 分区不同的分区(强烈推荐您在主分区上,也就是在编号为 hda1 到 hda4 的分区安装 Linux 操作系统)进行安装,同时一般也需要您建立 Linux 系统交换分区。在安装 Linux 系统之后,一定要运行 LILO 命令,使得 lilo 能够接管系统引导扇区,并使 /etc/lilo.conf 中的配置生效。

7. 我使用的是联想朝阳笔记本,安装了 Red hat linux7.1,使用的是联想 EASY10M/100M 网卡现在网卡无法识别,不能工作,怎么办? /proc/bus/pccard/drivers 中没有任何信息,PCMCIA 已启动过 。网卡的 ACT LINK 灯是亮的,不知驱动是否已加,测试回路只有 lo 。启动时 eth0 显示 FAILED 。
答:您首先需要安装网卡的设备驱动程序。 PCMCIA 类型的设备驱动程序保存在 pcmcia-cs 包中,您首先需要安装 pcmcia-cs 包。

在笔记本电脑上安装了 pcmcia-cs 包之后,为了实现 PCMCIA 设备的自动检测,您可以先查找系统中是否存在 /proc/bus/pccard 目录,如果不存在此目录则尝试插入 pcmcia_core 。

modprobe pcmcia_core(或者 insmod pcmcia_core)

在成功插入了此模块之后,/proc/bus/pccard 目录就生成了。此后,您就可以通过

 lspci -v

检查 pci 系统设备,找到系统桥接器,根据桥接器类型获得您需要插入的桥接器模块。在 Linux 系统下,适用的桥接器模块一般只有 i82365 或 tcic 两种。若无法获得准确的桥接器驱动程序,您可以尝试着插入两种模块,直到成功时为止。这时执行命令:

modprobe i82365(或者 modprobe tcic)

然后为了能够实时的配置您的 pccard,您需要启动服务 pcmcia,
/etc/rc.d/init.d/pcmcia start

并由此服务启动程序 cardmgr 。 cardmgr 监视 pcmcia 槽上卡的插入和弹出操作。在卡插入之后,cardmgr 查询卡的配置数据库。若发现卡能够被标识,相应的设备驱动程序则会自动加载。在弹出卡之后,卡的驱动程序会自动的关闭并卸载。当卡插入之后,每个槽上的卡信息和设备信息都被记录在 /var/lib/pcmcia/stab 文件中。

您购买的这款网卡 Linux 支持的不好,您可以换一种其它型号的网卡试试。更换网卡之后,您可以再用上面的方法试试。

8. 我的猫是实达 5600+(单芯片,外置),安装时选择哪种型号最合适?
答:在配置外置 Modem 时,一般您只需要配置串口就可以了,不需要使用附加的驱动程序。因为大部分的 Modem 都是通过串口连接到计算机上的,所以在配置 Modem 之前,您必须插入串口驱动模块 serial.o 。在成功插入串口通讯模块之后,这时只要将设备 /dev/modem 连接到相应的串口设备上就可以了。例如,在 /dev/ttyS0(对应 Windows 下的 COM1)上连接了 Modem,则建立连接:
ln -sf /dev/ttyS0 /dev/modem
在这之后,外置的串口 modem 就可以正常工作了。您可以通过使用 minicom 向串口发送 AT 命令,来检测和配置 modem 的工作方式。

9. 我的机器上安装了 RedHat Linux 7.1 和 Win98,我现在不想保存 Linux 系统了。请问如何卸载 Linux 系统?
答:一般而言,卸载 Linux 的方法是将 Linux 所在的分区格式化为其它格式的分区就可以了。 Linux 分区安装在硬盘上,使用 DOS 系统下的 FDISK 一般是无法删除 Linux 分区的。这时您可以选择一种类似于 pqmagic 的分区软件删除类型为 ext2 和 linux swap 类型的分区就可以了。

如果您想在 Linux 系统下删除 Linux 类型的分区,您可以使用系统命令 fdisk 。比如 Linux 分区安装在第一块硬盘上的 /dev/hda2,执行:
fdisk /dev/hda

在运行 fdisk 命令之后,按下 d 键,d 键执行删除分区的操作。然后您选择待删除分区正确的分区编号就可以了。上例中选择的分区编号为 2 。

最后按下 w 键,操作存盘退出。这时 fdisk 命令执行结束,分区的删除操作写入到了硬盘上。

顺便提一下,硬盘分区是以链接表的形式存在的,在每个硬盘上都存在一个主分区描述块,它可以描述四个分区,每个硬盘最多只存在四个主分区,其他的分区则为扩展分区。每个扩展分区是通过链接字段联结在一起。在 Linux 系统下,主分区使用的设备别名是从 /dev/hda1 到 /dev/hda4,其后从 /dev/hda5 开始的分区,都代表扩展分区。

在 windows 系统下,如果您想除去 lilo 的双启动,那么使用 fdisk /mbr 刷新硬盘主引导扇区就可以了。在 Linux 系统下,您也可以运行 lilo -u 命令恢复前一次 lilo 运行之前的系统引导扇区状态。

10. 在配置 XWindows 系统时,笔记本电脑的 TFT 显示器要是不知道品牌选择什么类型?
答:笔记本电脑的 TFT 显示器一般是和通用显示器的配置方法一样。在配置时,您可以执行 Xconfigurator 命令,并选择通用显示模式,比如 1024x768 分辨率的 70Hz 垂直分辨率的显示模式。只要您正确设置了显卡的驱动程序的型号,那么在笔记本电脑上启动 X-Windows 系统是没有问题的。

但是笔记本电脑一般采用 LCD 显示器,它的扫描频率范围较窄。比如,一部分 LCD 显示器在 800x600 分辨率时,最低支持的垂直扫描频率为 70Hz,那么您这时指定的水平回扫范围一定要包含 48kHz 。如果此时您指定 800x600 分辨率下的垂直扫描频率为 60Hz,X-Windows 系统将不能工作。

11. 我不小心把鼠标从 COM1 换到了 COM2,进入 X-WINDOW 后无法使用了。我将系统复位,再次启动后,文件 /sbin/fsck.ext2 in dev/hda3 出错,如何修复?
答:将鼠标切换到 COM2 之后,您可以直接使用命令 mouseconfig 重新配置一下鼠标。如果您的系统没有这个配置程序,那么您也可以直接执行下面的指令试试。

 rm -f /dev/mouse 
 ln -sf /dev/ttyS2 /dev/mouse

这两个命令的主要作用是建立 /dev/mouse 正确的连接文件。

在运行 Linux 系统时有许多系统数据,特别是关于文件系统的一些数据结构因此如果不正常关机保存在内存中。系统非正常关机,就很可能会给 Linux 系统带来很大的影响。,在 Linux 系统启动之后,将会自动对文件系统进行扫描。这时做的文件扫描只是看一下文件系统有没有出错,如果没有出错的话,那么系统将一切正常,但是如果有错的话(这时的系统启动过程会出现上面描述的脚本),那么它会提示输入超级用户密码进入一个维护模式。

在系统进入维护模式之后,并不需要重新安装系统,只是这时文件扇区的连接可能出现了一些问题。这时只需运行 e2fsck 检查根分区所在的硬盘分区,并将这些错误的连接修复。在程序运行的过程中可能会出现一些提示,一般来说,一直按 "Y" 直接回车就可以了。

12. 怎样设置威盛 686b 中的 ac97 声卡?
答:ac97 是一种声卡芯片的混音器设备接口,威盛 686b 的声卡驱动程序是支持 ac87 混音器接口的。缺省的内核驱动程序是 via82cxxx_audio,您为了配置它,只需要在 /etc/modules.conf 文件中加入设备别名:
alias sound via82cxxx_audio

当然为了保险起见,您最好使用命令 sndconfig 配置声卡。

虽然很多主板集成了 via686b 声卡芯片,而且能够加载 Linux 系统提供的驱动程序,但是 via686b 声卡仍无法正常工作。这时出现的驱动程序问题包括播放时噪声很大,播放时断时续,无声等等。出现这些问题的主要原因是由于主板上的辅助芯片支持不尽相同造成的。

这时您就只有试试别的驱动程序了(比如 alsa 提供的驱动程序)。

13. 我的网卡是精英的 K7S5A,sis735 的芯片组,整合 sis900 网卡。安装上 redhat7.1 之后,网卡无法工作,发现在启动是加载还是失败。我又把在网上下的 sis900 的驱动:sis900.c sis900.h 更新了系统原有的文件,还是不行。更改 /etc/modules.conf,并加上了 options sis900 io=0xd800 irq=10,再次加载 modprobe sis900,报 io,irq 不对!(invild parate.... io....)而这两个参数是我在 KDE 里看到的啊! win2000 中网卡的参数也是这个样子的!
答:对于任何一种主板集成设备,包括主板集成的显卡、声卡、网卡、modem 等等,Linux 支持的都不太好。当您选择了这样的主板时,很有可能您的设备就无法在 Linux 系统上工作了。但是如果您幸运的话,厂商正好提供了该产品的 Linux 驱动,那就没有问题了。

对于任何一种 PCI 设备,因为它存在一组配置空间,对于 io 口和 irq 是无须指定的,设备驱动程序在发现冲突时,一般会进行自动重映射。当你的设备不能正常工作时,最好的办法是换另外一个驱动程序试试,这样指定 io,irq 往往是没有用的。

由于我没有你说的设备,所以只能给你这些提示了。


关于作者

于辰涛,联想(北京)电脑公司软件工程师。目前主要从事 Linux 系统安装程序的开发工作,主要研究兴趣是操作系统的工作机制和开发底层系统程序。您可以通过电子邮件scu_yct@263.net跟他联系。

关于报告滥用的帮助

报告滥用

谢谢! 此内容已经标识给管理员注意。


关于报告滥用的帮助

报告滥用

报告滥用提交失败。 请稍后重试。


developerWorks:登录


需要一个 IBM ID?
忘记 IBM ID?


忘记密码?
更改您的密码

单击提交则表示您同意developerWorks 的条款和条件。 使用条款

 


当您初次登录到 developerWorks 时,将会为您创建一份概要信息。您在 developerWorks 概要信息中选择公开的信息将公开显示给其他人,但您可以随时修改这些信息的显示状态。您的姓名(除非选择隐藏)和昵称将和您在 developerWorks 发布的内容一同显示。

请选择您的昵称:

当您初次登录到 developerWorks 时,将会为您创建一份概要信息,您需要指定一个昵称。您的昵称将和您在 developerWorks 发布的内容显示在一起。

昵称长度在 3 至 31 个字符之间。 您的昵称在 developerWorks 社区中必须是唯一的,并且出于隐私保护的原因,不能是您的电子邮件地址。

(长度在 3 至 31 个字符之间)


单击提交则表示您同意developerWorks 的条款和条件。 使用条款.

 


为本文评分

评论

static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=10
Zone=Linux
ArticleID=428638
ArticleTitle=《硬件的自动检测与配置》 FAQ
publish-date=09202010
author1-email=scu_yct@263.net
author1-email-cc=

标签

Help
使用 搜索 文本框在 My developerWorks 中查找包含该标签的所有内容。

使用 滑动条 调节标签的数量。

热门标签 显示了特定专区最受欢迎的标签(例如 Java technology,Linux,WebSphere)。

我的标签 显示了特定专区您标记的标签(例如 Java technology,Linux,WebSphere)。

使用搜索文本框在 My developerWorks 中查找包含该标签的所有内容。热门标签 显示了特定专区最受欢迎的标签(例如 Java technology,Linux,WebSphere)。我的标签 显示了特定专区您标记的标签(例如 Java technology,Linux,WebSphere)。