个人工具

UbuntuHelp:DebuggingIRQProblems

来自Ubuntu中文

跳转至: 导航, 搜索

Debugging IRQ Problems

What is an IRQ

An IRQ is a way for hardware to talk the Operating System, in this case Ubuntu. It does this by sending an interupt request, hence IRQ. Sometimes these interupts get mixed up and the message does not get through. For example if two devices use the same IRQ, and the driver is not written to handle this, it may end up processing an IRQ for which it wasn't supposed to. Modern device drivers typically resolve this themselves, but sometimes they need help. A BIOS is a Basic Input Output System. This starts your computer for you and allows you to configure devices before the computer is booted. Most times the BIOS can be accessed by pressing ESC, Del or F2 when you first power on the computer. If you have no experience with the BIOS, you do not want to change any of the settings without the help of knowledgable person.

How do I know there is a problem?

The following are some symptoms which may indicate an IRQ-related problem:

  • Hardware devices being detected, but not functional (sound, network, etc.)
  • Problems using two hardware devices at the same time, or only when devices are connected at the same time.
  • System hangs (lockup).

What do I do?

If you think you may be experiencing such a problem, try these steps in the following order:

  1. Boot the system with the `noapic` boot parameter
  • This tells the kernel to not make use of any IOAPIC's that may be present in the system
  1. Boot the system with the `pci=routeirq`
  • Do IRQ routing for all PCI devices. This is normally done in pci_enable-device(), and is a temporary workaround for broken drivers which don't call it.
  1. Boot the system with the `pci=noacpi` boot parameter
  • Do not use ACPI for IRQ routing or PCI scanning
  1. Boot the system with the `acpi=off` boot parameter
  • Completely disable ACPI support.

You may also want to try:

  1. Boot the system with the "irqpoll' kernel parameter
  • This may be a workaround for an "irqXX: nobody cared . . ." error which basically means the interrupt has not been handled by any driver. This boot option will make the kernel poll for interrupts to try to work around this issue. However, this does not help diagnose the root cause nor should it be a permanent fix.

To add these options to the boot command line, use the edit option in the grub boot menu. IconsPage?action=AttachFile&do=get&target=IconWarning3.png Each of these options disables a feature of Ubuntu. IconsPage?action=AttachFile&do=get&target=IconNote.png NOTE: These options are architecture specific. They mainly apply to i386 and amd64.

If that fails

  1. If you have a BIOS conflict be sure to check your BIOS settings to see if some of the items can be turned off temporarily (serial ports etc).
  2. Try changing the order of the cards in your PC. There have been cases where the BIOS will only work with certain types of cards in certain slots.
  3. If you are experiencing system panics or hangs, follow the instructions at DebuggingSystemCrash

Reporting an IRQ Kernel Bug

Attach the following information to your bug report. Be sure to attach each file as a separate attachment

  1. uname -a > uname-a.log
  2. cat /proc/version_signature > version.log
  3. dmesg > dmesg.log
  4. sudo lspci -vvnn > lspci-vvnn.log
  5. cat /proc/interrupts > interrupts.log

Make sure the bug is reported against the appropriate linux-source-2.6.xx package. For example, the correct package for Dapper is linux-source-2.6.15, for Edgy it is linux-source-2.6.17, for Feisty it is linux-source-2.6.20 and for Gutsy it is linux-source-2.6.22.