Chinaunix首页 | 论坛 | 博客
  • 博客访问: 3026434
  • 博文数量: 877
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 6125
  • 用 户 组: 普通用户
  • 注册时间: 2016-11-11 09:12
个人简介

To be a better coder

文章分类

全部博文(877)

文章存档

2022年(1)

2021年(60)

2020年(175)

2019年(207)

2018年(210)

2017年(143)

2016年(81)

分类: LINUX

2021-07-27 10:01:38

https: //blog.csdn.net/weixin_39979617/article/details/116805957?utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault%7EsearchFromBaidu%7Edefault-3.pc_relevant_baidujshouduan&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2%7Edefault%7EsearchFromBaidu%7Edefault-3.pc_relevant_baidujshouduan

ACPI---------------------------------------------------------------------------------------------------------
ACPI是Intel(i386,x86_64,IA64)平台的标准固件规范,绝大部分OS需要从BIOS得到的信息都可以从ACPI得到,并且现在的趋势是未来的任何新的特性相关的信息都只能从ACPI得到。ACPI的内容庞杂,学习ACPI至少可以帮助我们理解:

配置信息。这些信息从legacy PNP设备的配置,到多处理器,到NUMA,比如现在的Multiple Core的信息就只能从ACPI得到。Linux启动很多代码就是处理这些配置信息,比如APIC,IOAPIC设置等。

ACPI相关设备。主要是笔记本电脑相关的设备,包括电源按钮,电池,外接电源,风扇,热键等。

底层硬件。比如PCI中断路由,chipset(主要是南桥PCI-to-LPC bridge)操作等。

电源管理。ACPI定义的电源管理包括CPU的电源管理(调频率P-state,idle C-state,throtting T-state),设备电源管理(D-state),系统电源管理(Suspend-to-Ram, Suspend-to-Disk, power off)等。

设备热插拔。ACPI用一种统一的方式来描述设备的热插拔,这样的设备从单一的PCI设备,到笔记本电脑的Docking Station,到整个PCI hierarchy,CPU,Memory,甚至整个NUMA节点。

可以说要理解现代PC平台必须了解ACPI。


ACPI的内容庞杂,学习ACPI至少可以帮助我们理解配置信息。这些信息从legacy


PNP设备的配置,到多处理器,到NUMA,比如现在的Multiple

Core的信息就只能从ACPI得到。Linux启动很多代码就是处理这些配置信息,比如Linux acpi off,IOAPIC设置等。

ACPI相关设备。主要是笔记本电脑相关的设备,包括电源按钮,电池,外接电源,风扇,热键等。

底层硬件。比如PCI中断路由,chipset(主要是南桥PCI-to-LPC bridge)操作等。

电源管理。ACPI定义的电源管理包括CPU的电源管理(调频率P-state,idle C-state,throtting

T-state),设备电源管理(D-state),系统电源管理(Suspend-to-Ram, Suspend-to-Disk, power

off)等。

设备热插拔。ACPI用一种统一的方式来描述设备的热插拔,这样的设备从单一的PCI设备,到笔记本电脑的Docking Station,到整个PCI hierarchy,CPU,Memory,甚至整个NUMA节点。

可以说要理解现代PC平台必须了解ACPI。

Linux acpi off解决ACPI问题的小窍门

首先可以看看是否这是一个regression,如果以前版本的Linux

kernel可以工作,但新的不行,则是一个regression,可以测试不同的kernel从而找出哪个版本引入了bug。使用git-bisect

是一个好的选择,它可以帮你定位到哪个patch导致了regression。一些git-bisect相关的资料如下:

Linux acpi off系统不能启动

试试kernel参数”acpi=off”,如果此参数没有带来任何改变,那么这不是一个ACPI bug。反之,则这很可能是一个ACPI bug。 确定了是一个ACPI bug后,我们还有其他一些参数来更进一步的区分到底是ACPI哪个部分的bug。

acpi=ht

这个参数和"acpi=off"几乎一样,它禁止了除多处理器配置相关的内容以外的所有ACPI功能。如果acpi=off正常,但acpi=ht 不正常, 则解析ACPI 表或者Linux SMP的代码有bug.

pci=noacpi

禁止使用ACPI来处理任何PCI相关的内容,包括PCI root bus的枚举和PCI设备中断路由。

acpi=noirq

禁止使用ACPI来处理PCI设备中断路由,和pci=noacpi的区别是它允许使用ACPI来枚举PCI root bus.

pnpacpi=off

禁止使用ACPI来枚举PNP设备,比如串口、PS2键盘鼠标等。

noapic

禁止使用io-apic来做设备中断路由,这样做的效果之一是ACPI返回的中断路由表将是针对PIC(8259)的。

nolapic

禁止使用Local-APIC和IO-APIC。

Linux acpi off设备中断相关的问题

出现中断问题的可能性很多,比如驱动程序有bug。由ACPI导致的最常见的中断问题是kernel打出:”irqXX: nobody

cared!”。这意味着kernel收到一个中断,但是没有驱动程序来处理此中断。Kernel会将此中断禁止,从而导致挂在此中断上的所有设备都停止

工作。pci=noacpi, acpi=noirq, pnpacpi=off, noapic,

nolapic这些参数可以帮助隔离一些问题。另外一个有用的参数是”irqpoll”,出现上面的中断问题时,它可以使kernel自动探测哪个设备发

出了中断。这个参数对于调试那些中断路由有问题的系统很有用


APIC---------------------------------------------------------------------------------------------

APIC虽号称现代,但也出现10几年了,PC机市场总是很晚才能接触到新的技术,前面说了,我的T42用的还是PIC呢。APIC相较于PIC来说,最大的优点是能适用于MP平台,当然,管脚多是它另一个优点。APIC由两部分组成,一个称为LAPIC(Local APIC,本地高级中断控制器),一个称为IOAPIC(I/O APCI,I/O高级中断控制器)。前者位于CPU中,在MP平台,每个CPU都有一个自己的LAPIC。后者通常位于南桥上,像PIC一样,连接各个产生中断的设备。在一个典型的具有多个处理器的PC平台,通常有一个IOAPIC和多个LAPIC,它们相互配合,形成一个中断的分发网络,图1-3显示了这个典型的情况:
————————————————
版权声明:本文为CSDN博主「北冥」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/ljxkey/article/details/8729289
阅读(475) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~