linux-acpi

合集下载

linux内核启用参数

linux内核启用参数

linux内核启用参数以Linux内核启用参数为标题的文章一、背景介绍Linux内核是操作系统的核心,负责管理计算机的硬件资源和提供系统调用接口。

在Linux系统中,通过启用不同的内核参数,可以对系统的行为进行调整和优化,以满足特定的需求和提高系统性能。

本文将介绍一些常用的Linux内核启用参数,并分析其作用和使用场景。

二、内核启用参数1. acpi=offACPI(高级配置与电源接口)是一种用于电源管理和设备配置的标准。

将acpi=off参数添加到内核启动参数中可以禁用ACPI功能。

在某些老旧的计算机硬件上,ACPI可能会导致系统崩溃或不稳定,此时可以使用该参数来解决问题。

2. nomodesetnomodeset参数用于禁用内核对显卡驱动的自动加载和切换。

在某些笔记本电脑或显卡驱动不兼容的情况下,系统可能无法正常启动或出现黑屏等问题。

使用nomodeset参数可以强制系统使用基本的VESA显卡驱动,以保证系统的稳定性。

3. noapicAPIC(高级可编程中断控制器)是用于管理中断信号的硬件设备。

在某些计算机上,APIC可能导致中断冲突或系统不稳定的问题。

通过添加noapic参数,可以禁用APIC功能,解决这些问题。

4. irqpollirqpoll参数用于解决某些计算机上的中断问题。

当系统无法正确识别硬件的中断信号时,会导致设备无法正常工作或系统崩溃。

通过添加irqpoll参数,系统会定期轮询中断信号,以确保中断的正确处理,提高系统的稳定性。

5. selinux=0SELinux(安全增强型Linux)是一种强制访问控制机制,用于提高系统的安全性。

但在某些情况下,SELinux可能导致系统的性能下降或应用程序无法正常运行。

通过将selinux=0参数添加到内核启动参数中,可以禁用SELinux功能,提高系统的运行效率。

6. mem=4Gmem参数用于限制系统可用的内存大小。

在某些情况下,系统可能无法正确识别或管理全部的内存容量,导致内存溢出或内存泄漏的问题。

linux内核启用参数

linux内核启用参数

linux内核启用参数Linux内核启用参数是指在Linux系统启动时,可以通过设置参数来改变内核的行为和配置。

这些参数可以通过修改启动脚本或者在引导时通过命令行参数传递给内核。

我们来介绍一些常用的Linux内核启用参数。

1. root:指定根文件系统所在的设备或分区。

在启动时,内核会将根文件系统挂载到这个设备上,成为系统的根目录。

可以使用设备名称(如/dev/sda1)或者UUID(Universally Unique Identifier)来指定。

2. init:指定系统初始化进程的路径。

这个进程是系统启动后的第一个用户空间进程,负责初始化系统环境、启动其他进程等。

一般情况下,它的路径是/bin/init。

3. quiet:禁用内核启动时的冗长输出信息。

默认情况下,内核会将启动过程中的详细信息输出到控制台上,使用quiet参数可以减少这些输出,使启动过程更加简洁。

4. vga:指定启动时的图形模式。

可以通过设置不同的参数值来改变显示分辨率和颜色深度。

例如,vga=791表示使用1024x768分辨率,颜色深度为16位。

5. acpi:启用或禁用ACPI(Advanced Configuration and PowerInterface)功能。

ACPI是一种能够管理电源、温度、风扇等硬件的标准,通过设置acpi参数,可以控制是否启用ACPI功能。

6. noapic:禁用APIC(Advanced Programmable Interrupt Controller)功能。

APIC是用于处理系统中断的硬件设备,通过设置noapic参数,可以禁用APIC功能,解决一些不兼容的硬件问题。

7. nomodeset:禁用内核对图形模式的自动设置。

有些显卡驱动在启动时可能会导致系统冻结或无法启动,通过设置nomodeset参数,可以强制内核使用基本的VGA模式运行。

8. mem:指定系统可用的物理内存大小。

在linux中options的主要参数

在linux中options的主要参数

在linux中options的主要参数1. Boot loader参数:- root: 指定根文件系统所在的设备或分区- init: 指定启动后要运行的初始进程- quiet: 关闭内核启动信息的输出- single: 进入单用户模式- mem: 指定系统可用内存的大小2. 内存和处理器参数:- memmap: 指定某些内存区域的物理地址和大小- maxcpus: 指定最大可用的CPU数量- acpi: 启用或禁用ACPI功能- noapic: 禁用APIC中断控制器- nolapic: 禁用本地APIC中断控制器- nomodeset: 禁用显卡驱动的图形模式设置3. 硬件和设备参数:- modeprobe: 启动时自动加载的内核驱动- selinux: 指定SELinux的安全策略模式- biosdevname: 按照BIOS设备名称为网络接口命名- scsi_mod.scan: 指定SCSI设备的扫描模式- net.ifnames: 按照接口属性为网络接口命名4. 文件系统和存储参数:- fsck.mode: 文件系统故障时的处理模式- fsck.repair: 自动修复磁盘错误- fsck.repair=yes: 强制自动修复磁盘错误- fsck.repair=preen: 在修复前尝试自动修复简单错误- rootflags: 指定挂载根文件系统时的选项5. 其他参数:- debug: 启动内核调试信息的输出- panic: 内核崩溃时的行为- loglevel: 控制内核启动信息的输出级别- print-fatal-signals: 在系统崩溃时输出调试信息- enable-exit-error: 发生错误时立刻退出应用程序注:以上仅为一些常见的Linux参数,实际上,可以通过内核源码进行编译定制化kernel,从而拥有更多可选的参数。

Linux出错提示信息详解

Linux出错提示信息详解

Linux出错提示信息详解深入地讲:许多人害怕Linux,因为它给出的出错提示信息简直像天书一样。

并且这样的信息有很多。

如果你在Linux Format(译者注:这是一家英国销售量最好的Linux杂志)的论坛上搜索“Error”这个词,你将会得到超过150页的内容。

那些是许多人遇到的许多问题。

用户们遇到的最大的困难并非出错提示信息的数量,而是如何从中找出有用的东西。

例如,“Kernel Oops”是什么意思,或者“PCI can't allocate”是什么意思?Linux的出错提示相当愚钝且很难理解,几乎起不了什么帮助。

这是一个遗憾,因为大绝大多数问题本可以很容易的解决,而且有相当数量的涉及同样问题的出错提示一次又一次的出现。

用商业圈里的话来说,这是最能获得立竿见影效果的部分(译者:不知些句如此翻译妥当否?请指教)。

我们要解决的正是这一部分问题。

启动你的系统不需要你成为一个Linux专家,播放视频文件也无需成为程序员。

然而大部分出错信息都假定他们的用户已掌握了此类专门技术。

我们试图阐明这些常见错误,并提供解决方案,以帮助普通的Linux用户规避这些问题,并使他们的系统回到正常状态。

我们挑选了一些我们认为问题最多的领域,包括启动、常规软件应用、文件系统、网络和发行版的安装。

我们从每个领域中挑选了几个最常见的错误,并解释了相应的解决方案是如何起作用的。

这样做的目的是,即使这些问题不适合你的情况,你也能了解为什么Linux的出错提示信息看上去如此的难以捉摸并令人生畏。

希望你能从中学会找到解决自己问题所需知识的方法。

发行版的安装每一种Linux发行版都有不同的安装例程,并且都会制造一些问题。

Ubuntu也许在一台电脑上工作良好而另外一台则不行。

一台安装了Ubuntu并运行正常的电脑也许根本无法安装Fedora,OpenSUSE, Linux Mint, 或者Mandriva...ERROR Can't boot from CD/DVD(无法从光盘启动)如何你刚开始接触Linux,下述情况通常会是你对该操作系统的第一体验:你将你的新光盘放入光驱并重启电脑,结果发现却是进入了你先前使用的操作系统。

Linuxdmidecode命令

Linuxdmidecode命令

Linuxdmidecode命令当我们需要获取机器硬件信息时,可使⽤linux系统⾃带的dmidecode⼯具进⾏查询。

dmidecode ⽤于获取服务器的硬件信息,通常是在不打开计算机机箱的情况下使⽤该命令来查找硬件详细信息这个命令可以查看内存的⼏乎所有信息,包括频率⼤⼩等等,另外这个命令强⼤到⼏乎可以查任何硬件信息包括设备型号、bios 、cpu、主板、处理器、内存、缓存详细信息等等都例举出来,对于⼤部分普通服务器⽤户来说,我们选择VPS、服务器产品的时候⽐较关⼼的是产品的费⽤、服务器的速度以及稳定性,更有就是服务商家的服务(尤其不能跑路)。

随着我们使⽤服务器时间的推移,以及会看到各个不同的商家产品的时候,就会需要有所对⽐,严谨的⽤户会更为的关注产品的硬件配置信息。

因为在主机⾏业中,配置的差距关乎到产品的成本和费⽤,⾄少我们要弄明⽩不能被⼈忽悠。

[root@localhost ~]$ yum install -y dmidecode常见⽤法如下:[root@localhost ~]$ dmidecode # 打印所有硬件信息[root@localhost ~]$ dmidecode -q # 打印所有硬件信息,⽐较简洁[root@localhost ~]$ dmidecode | grep'Product Name' # 以过滤的⽅式来查看指定的硬件信息[root@localhost ~]$ dmidecode -t bios # 查看BIOS相关的硬件信息[root@localhost ~]$ dmidecode -t system # 查看系统相关的硬件信息[root@localhost ~]$ dmidecode -t baseboard # 查看主板相关的硬件信息[root@localhost ~]$ dmidecode -t chassis # 查看机箱相关的硬件信息[root@localhost ~]$ dmidecode -t processor # 查看处理器相关的硬件信息[root@localhost ~]$ dmidecode -t memory # 查看内存相关的硬件信息查看系统相关的硬件信息dmidecode -t systemdmidecode -t system# dmidecode 2.12SMBIOS 2.5 present.Handle 0x0001, DMI type 1, 27 bytesSystem InformationManufacturer: System manufacturerProduct Name: System Product NameVersion: System VersionSerial Number: System Serial NumberUUID: 00797DF5-8DFE-D511-A89C-3085A9A895F8Wake-up Type: Power SwitchSKU Number: To Be Filled By O.E.M.Family: To Be Filled By O.E.M.Handle 0x0035, DMI type 15, 55 bytesSystem Event LogArea Length: 1008 bytesHeader Start Offset: 0x0810Data Start Offset: 0x0810Access Method: Memory-mapped physical 32-bit addressAccess Address: 0xFFFBC000Status: Valid, Not FullChange Token: 0x00000000Header Format: No HeaderSupported Log Type Descriptors: 11Descriptor 1: OEM-specificData Format 1: Multiple-event handleDescriptor 2: OEM-specificData Format 2: Multiple-event handleDescriptor 3: Single-bit ECC memory errorData Format 3: POST results bitmapDescriptor 4: Multi-bit ECC memory errorData Format 4: POST results bitmapDescriptor 5: Parity memory errorData Format 5: Multiple-eventDescriptor 6: I/O channel blockData Format 6: Multiple-eventDescriptor 7: POST errorData Format 7: POST results bitmapDescriptor 8: PCI parity errorData Format 8: Multiple-event handleDescriptor 9: PCI system errorData Format 9: Multiple-event handleDescriptor 10: System limit exceededData Format 10: Multiple-event system managementDescriptor 11: OEM-specificData Format 11: POST results bitmapHandle 0x0050, DMI type 32, 20 bytesSystem Boot InformationStatus: No errors detected查看服务器型号:dmidecode | grep 'Product Name' dmidecode |grep'Product Name'Product Name: System Product NameProduct Name: Z8NR-D12dmidecode | grep -i productProduct Name: System Product NameProduct Name: Z8NR-D12查看主板的序列号:dmidecode |grep 'Serial Number' dmidecode |grep'Serial Number'Serial Number: System Serial NumberSerial Number: 120902356500037Serial Number: Chassis Serial NumberSerial Number: To Be Filled By O.E.M.Serial Number: To Be Filled By O.E.M.Serial Number: D8CC0900Serial Number: SerNum01Serial Number: SerNum02Serial Number: SerNum03Serial Number: SerNum04Serial Number: SerNum05Serial Number: D8CC0900Serial Number: SerNum07Serial Number: SerNum08Serial Number: SerNum09Serial Number: SerNum10Serial Number: SerNum11查看系统序列号:dmidecode -s system-serial-number dmidecode -s system-serial-numberSystem Serial Number查看OEM信息:dmidecode -t 11dmidecode -t 11# dmidecode 2.12SMBIOS 2.5 present.Handle 0x0033, DMI type 11, 5 bytesOEM StringsString 1: To Be Filled By O.E.M.String 2: To Be Filled By O.E.M.String 3: To Be Filled By O.E.M.String 4: To Be Filled By O.E.M.查询内存条数:[root@mysql ~]# dmidecode -t 17 | grep"Size.*MB" | wc -l2第⼀、dmidecode查看主板信息dmidecode -t 2 = dmidecode -t baseboard[root@mysql ~]#dmidecode -t 2# dmidecode 2.12SMBIOS 2.5 present.Handle 0x0002, DMI type 2, 15 bytesBase Board InformationManufacturer: ASUSTeK Computer INC.Product Name: Z8NR-D12Version: Rev 1.xxGSerial Number: 120902356500037Asset Tag: To Be Filled By O.E.M.Features:Board is a hosting boardBoard is replaceableLocation In Chassis: To Be Filled By O.E.M.Chassis Handle: 0x0003Type: MotherboardContained Object Handles: 0第⼆、使⽤dmidecode查询内存(RAM)信息dmidecode -t 16⾸先,可以通过以下命令查询机器最⼤⽀持的内存总量[root@mysql ~]#dmidecode -t 16# dmidecode 2.12SMBIOS 2.5 present.Handle 0x0036, DMI type 16, 15 bytesPhysical Memory ArrayLocation: System Board Or MotherboardUse: System MemoryError Correction Type: Multi-bit ECCMaximum Capacity: 96 GBError Information Handle: Not ProvidedNumber Of Devices: 12这⾥可以查看到当前服务器允许扩容的最⼤内存⼤⼩,从以上输出可知,该机器理论上⽀持的最⼤内存为96G。

[精华版]linux内核配置选项

[精华版]linux内核配置选项

Code maturity level options代码成熟度选项Prompt for developm ent and/or incomplete code/drivers显示尚在开发中或尚未完成的代码与驱动.除非你是测试人员或者开发者,否则请勿选择General setup常规设置Local version - append to kernel release在内核版本后面加上自定义的版本字符串(小于64字符),可以用"unam e -a"命令看到Automatically append version information to the version string自动在版本字符串后面添加版本信息,编译时需要有perl以及git仓库支持Support for paging of anonymous memory (swap)使用交换分区或者交换文件来做为虚拟内存System V IPCSystem V进程间通信(IPC)支持,许多程序需要这个功能.必选,除非你知道自己在做什么IPC NamespacesIPC命名空间支持,不确定可以不选POSIX Message QueuesPOSIX消息队列,这是POSIX IPC中的一部分BSD Process Accounting将进程的统计信息写入文件的用户级系统调用,主要包括进程的创建时间/创建者/内存占用等信息BSD Process Accounting version 3 file format使用新的第三版文件格式,可以包含每个进程的PID和其父进程的PID,但是不兼容老版本的文件格式Export task/process statistics through netlink通过netlink接口向用户空间导出任务/进程的统计信息,与BSD Process Accounting的不同之处在于这些统计信息在整个任务/进程生存期都是可用的Enable per-task delay accounting在统计信息中包含进程等候系统资源(cpu,IO同步,内存交换等)所花费的时间UTS NamespacesUTS名字空间支持,不确定可以不选Auditing support审计支持,某些内核模块(例如SELinux)需要它,只有同时选择其子项才能对系统调用进行审计Enable system-call auditing support支持对系统调用的审计Kernel .config support把内核的配置信息编译进内核中,以后可以通过scripts/extract-ikconfig脚本来提取这些信息Enable access to .config through /proc/config.gz允许通过/proc/config.gz访问内核的配置信息Cpuset support只有含有大量CPU(大于16个)的SMP系统或NUMA(非一致内存访问)系统才需要它Kernel->user space relay support (formerly relayfs)在某些文件系统上(比如debugfs)提供从内核空间向用户空间传递大量数据的接口Initramfs source file(s)initrd已经被initramfs取代,如果你不明白这是什么意思,请保持空白Optimize for size (Look out for broken compilers!)编译时优化内核尺寸(使用"-Os"而不是"-O2"参数编译),有时会产生错误的二进制代码Enable extended accounting over taskstats收集额外的进程统计信息并通过taskstats接口发送到用户空间Configure standard kernel features (for sm all systems)配置标准的内核特性(为小型系统)Enable 16-bit UID system calls允许对UID系统调用进行过时的16-bit包装Sysctl syscall support不需要重启就能修改内核的某些参数和变量,如果你也选择了支持/proc,将能从/proc/sys存取可以影响内核行为的参数或变量Load all symbols for debugging/kksymoops装载所有的调试符号表信息,仅供调试时选择Include all symbols in kallsyms在kallsyms中包含内核知道的所有符号,内核将会增大300KDo an extra kallsyms pass除非你在kallsyms中发现了bug并需要报告这个bug才打开该选项Support for hot-pluggable devices支持热插拔设备,如usb与pc卡等,Udev也需要它Enable support for printk允许内核向终端打印字符信息,在需要诊断内核为什么不能运行时选择BUG() support显示故障和失败条件(BUG和WARN),禁用它将可能导致隐含的错误被忽略Enable ELF core dumps内存转储支持,可以帮助调试ELF格式的程序Enable full-sized data structures for core在内核中使用全尺寸的数据结构.禁用它将使得某些内核的数据结构减小以节约内存,但是将会降低性能Enable futex support快速用户空间互斥体可以使线程串行化以避免竞态条件,也提高了响应速度.禁用它将导致内核不能正确的运行基于glibc的程序Enable eventpoll support支持事件轮循的系统调用Use full shmem filesystem启用shmem支持.shmem是基于共享内存的文件系统(可能用到swap),在启用TMPFS后可以挂载为tmpfs供用户空间使用,它比简单的ramfs先进许多Use full SLAB allocator使用SLAB完全取代SLOB进行内存分配,SLAB是一种优秀的内存分配管理器,推荐使用Enable VM event counters for /proc/vmstat允许在/proc/vmstat中包含虚拟内存事件记数器Loadable module support可加载模块支持Enable loadable module support打开可加载模块支持,如果打开它则必须通过"make modules_install"把内核模块安装在/lib/modules/中Module unloading允许卸载已经加载的模块Forced module unloading允许强制卸载正在使用中的模块(比较危险)Module versioning support允许使用其他内核版本的模块(可能会出问题)Source checksum for all modules为所有的模块校验源码,如果你不是自己编写内核模块就不需要它Automatic kernel module loading让内核通过运行modprobe来自动加载所需要的模块,比如可以自动解决模块的依赖关系Block layer块设备层Enable the block layer块设备支持,使用硬盘/USB/SCSI设备者必选Support for Large Block Devices仅在使用大于2TB的块设备时需要Support for tracing block io actions块队列IO跟踪支持,它允许用户查看在一个块设备队列上发生的所有事件,可以通过blktrace程序获得磁盘当前的详细统计数据Support for Large Single Files仅在可能使用大于2TB的文件时需要IO SchedulersIO调度器Anticipatory I/O scheduler适用于大多数环境,但不太合适数据库应用Deadline I/O scheduler通常与Anticipatory相当,但更简洁小巧,更适合于数据库应用CFQ I/O scheduler为所有进程分配等量的带宽,适合于桌面多任务及多媒体应用Default I/O scheduler默认IO调度器Processor type and features中央处理器(CPU)类型及特性Symmetric multi-processing support对称多处理器支持,如果你有多个CPU或者使用的是多核CPU就选上.此时"Enhanced Real Time Clock Support"选项必须开启,"Advanced Power Managem ent"选项必须关闭Subarchitecture Type处理器的子架构,大多数人都应当选择"PC-compatible"Processor family处理器系列,请按照你实际使用的CPU选择Generic x86 support通用x86支持,如果你的CPU能够在上述"Processor family"中找到就别选HPET Timer SupportHPET是替代8254芯片的新一代定时器,i686及以上级别的主板都支持,可以安全的选上Maximum number of CPUs支持的最大CPU数,每增加一个内核将增加8K体积SMT (Hyperthreading) scheduler support支持Intel的超线程(HT)技术Multi-core scheduler support针对多核CPU进行调度策略优化Preemption Model内核抢占模式No Forced Preemption (Server)适合服务器环境的禁止内核抢占Voluntary Kernel Preemption (Desktop)适合普通桌面环境的自愿内核抢占Preemptible Kernel (Low-Latency Desktop)适合运行实时程序的主动内核抢占Preempt The Big Kernel Lock可以抢占大内核锁,应用于实时要求高的场合,不适合服务器环境Machine Check Exception让CPU检测到系统故障时通知内核,以便内核采取相应的措施(如过热关机等)Check for non-fatal errors on AMD Athlon/Duron / Intel Pentium 4每5秒检测一次这些cpu的非致命错误并纠正它们,同时记入日志check for P4 thermal throttling interrupt当P4的cpu过热时显示一条警告消息Enable VM86 support虚拟X86支持,在DOSEMU下运行16-bit程序或XFree86通过BIOS初始化某些显卡的时候才需要Toshiba Laptop supportToshiba笔记本模块支持Dell laptop supportDell笔记本模块支持Enable X86 board specific fixups for reboot修正某些旧x86主板的重起bug,这种主板基本绝种了/dev/cpu/microcode - Intel IA32 CPU microcode support使用不随Linux内核发行的IA32微代码,你必需有IA32微代码二进制文件,仅对Intel的CPU有效/dev/cpu/*/msr - Model-specific register support在多cpu系统中让特权CPU访问x86的MSR寄存器/dev/cpu/*/cpuid - CPU information support能从/dev/cpu/x/cpuid获得CPU的唯一标识符(CPUID)Firmware Drivers固件驱动程序BIOS Enhanced Disk Drive calls determine boot disk有些BIOS支持从某块特定的硬盘启动(如果BIOS不支持则可能无法启动),目前大多数BIOS还不支持BIOS update support for DELL systems via sysfs仅适用于DELL机器Dell Systems Managem ent Base Driver仅适用于DELL机器High Memory Support最高内存支持,总内存小于等于1G的选"off",大于4G的选"64G"Memory split如果你不是绝对清楚自己在做什么,不要改动这个选项Memory model一般选"Flat Memory",其他选项涉及内存热插拔64 bit Memory and IO resources使用64位的内存和IO资源Allocate 3rd-level pagetables from highmem在内存很多(大于4G)的机器上将用户空间的页表放到高位内存区,以节约宝贵的低端内存Math emulation数学协处理器仿真,486DX以上的cpu就不要选它了MTRR (Memory Type Range Register) support打开它可以提升PCI/AGP总线上的显卡2倍以上的速度,并且可以修正某些BIOS错误Boot from EFI supportEFI是一种可代替传统BIOS的技术(目前的Grub/LILO尚不能识别它),但是现在远未普及Enable kernel irq balancing让内核将irq中断平均分配给多个CPU以进行负载均衡,但是要配合irqbanlance守护进程才行Use register arguments使用"-mregparm=3"参数编译内核,将前3个参数以寄存器方式进行参数调用,可以生成更紧凑和高效的代码Enable seccomp to safely compute untrusted bytecode只有嵌入式系统可以不选Timer frequency内核时钟频率,桌面推荐"1000 HZ",服务器推荐"100 HZ"或"250 HZ"kexec system call提供kexec系统调用,可以不必重启而切换到另一个内核kernel crash dumps被kexec启动后产生内核崩溃转储Physical address where the kernel is loaded内核加载的物理地址,除非你知道自己在做什么,否则不要修改.在提供kexec系统调用的情况下可能要修改它Support for hot-pluggable CPUs对热插拔CPU提供支持Compat VDSO support如果Glibc版本大于等于2.3.3就不选,否则就选上Power management options电源管理选项Power Managem ent support电源管理有APM和ACPI两种标准且不能同时使用.即使关闭该选项,X86上运行的Linux也会在空闲时发出HLT指令将CPU进入睡眠状态Legacy Power Management API传统的电源管理API,比如软关机和系统休眠等接口Power Managem ent Debug Support仅供调试使用Driver model /sys/devices/.../power/state files内核帮助文档反对使用该选项,即将被废除ACPI (Advanced Configuration and Power Interface) Support必须运行acpid守护程序ACPI才能起作用.ACPI是为了取代APM而设计的,因此应该尽量使用ACPI而不是APMAC Adapter如果你的系统可以在AC和电池之间转换就可以选Battery通过/proc/acpi/battery向用户提供电池状态信息,用电池的笔记本可以选Button守护程序捕获Power,Sleep,Lid按钮事件,并根据/proc/acpi/event做相应的动作,软件控制的poweroff 需要它Video仅对集成在主板上的显卡提供ACPI2.0支持,且不是所有集成显卡都支持Generic Hotkey统一的热键驱动,建议不选Fan允许通过用户层的程序来对系统风扇进行控制(开,关,查询状态),支持它的硬件并不多Dock支持由ACPI控制的集线器(docking stations)Processor让ACPI处理空闲状态,并使用ACPI C2和C3处理器状态在空闲时节省电能,同时它还被cpufreq的"Performance-state drivers"选项所依赖Thermal Zone系统温度过高时可以利用ACPI thermal zone及时调整工作状态以避免你的CPU被烧毁ASUS/Medion Laptop ExtrasASUS笔记本专用,以提供额外按钮的支持,用户可以通过/proc/acpi/asus来打开或者关闭LCD的背光/调整亮度/定制LED的闪烁指示等功能IBM ThinkPad Laptop ExtrasIBM ThinkPad专用Toshiba Laptop ExtrasToshiba笔记本专用Disable ACPI for systems before Jan 1st this year输入四位数的年份,在该年的1月1日前不使用ACPI的功能("0"表示一直使用)Debug Statements详细的ACPI调试信息,不搞开发就别选Power Managem ent Timer Support这个Timer在所有ACPI兼容的平台上都可用,且不会受PM功能的影响,建议总是启用它.如果你在kernel log中看到了'many lost ticks'那就必须启用它ACPI0004,PNP0A05 and PNP0A06 Container Driver支持内存和CPU的热插拔Smart Battery System支持依赖于I2C的"智能电池".这种电池非常老旧且罕见,还与当前的ACPI标准兼容性差APM (Advanced Power Managem ent) BIOS SupportAPM在SMP机器上必须关闭,一般来说当前的笔记本都支持ACPI,所以应尽量关闭该该选项Ignore USER SUSPEND只有NEC Versa M系列的笔记本才需要选择这一项Enable PM at boot time系统启动时即启用APM,选上这个选项能让系统自动的进行电源管理,但常常导致启动时死机Make CPU Idle calls when idle系统空闲时调用空闲指令(halt),只有老式的CPU才需要选它,且对于SMP系统必须关闭Enable console blanking using APM在屏幕空白时关闭LCD背光,事实上对所有的笔记本都无效RTC stores time in GMT将硬件时钟应该设为格林威治时间,否则视为本地时间.建议你使用GMT,这样你无须为时区的改变而担心Allow interrupts during APM BIOS calls允许APM的BIOS调用时中断,IBM Thinkpad的一些新机器需要这项.如果休眠时挂机(包括睡下去就醒不来),可以试试它Use real mode APM BIOS call to power off此驱动为某些有Bug的BIOS准备,如果你的系统不能正常关机或关机时崩溃,可以试试它CPU Frequency scaling允许动态改变CPU主频,达到省电和降温的目的,必须同时启用下面的一种governor才行Enable CPUfreq debugging允许对CPUfreq进行调试CPU frequency translation statistics通过sysfs文件系统输出CPU频率变换的统计信息CPU frequency translation statistics details输出详细的CPU频率变换统计信息Default CPUFreq governor默认的CPU频率调节器'performance' governor'性能'优先,静态的将频率设置为cpu支持的最高频率'powersave' governor'节能'优先,静态的将频率设置为cpu支持的最低频率'userspace' governor for userspace frequency scaling既允许手动调整cpu频率,也允许用户空间的程序动态的调整cpu频率(需要额外的调频软件,比如cpufreqd)'ondemand' cpufreq policy governor'立即响应',周期性的考察CPU负载并自动的动态调整cpu频率(不需要额外的调频软件),适合台式机'conservative' cpufreq governor'保守',和'ondemand'相似,但是频率的升降是渐变式的(幅度不会很大),更适合用于笔记本/PDA/AMD64环境ACPI Processor P-States driver将ACPI2.0的处理器性能状态报告给CPUFreq processor drivers以决定如何调整频率,该选项依赖于ACPI->Processor{省略的部分请按照自己实际使用的CPU选择}/proc/acpi/processor/../performance interface内核帮助文档反对使用该选项,即将被废除Relaxed speedstep capability checks放松对系统的speedstep兼容性检查,仅在某些老旧的Intel系统上需要打开Bus options (PCI, PCMCIA, EISA, MCA, ISA)总线选项PCI supportPCI支持,如果使用了PCI或PCI Express设备就必选PCI access modePCI访问模式,强列建议选"Any"(系统将优先使用"MMConfig",然后使用"BIOS",最后使用"Direct"检测PCI设备)PCI Express supportPCI Express支持(目前主要用于显卡和千兆网卡)PCI Express Hotplug driver如果你的主板和设备都支持PCI Express热插拔就可以选上Use polling mechanism for hot-plug events对热插拔事件采用轮询机制,仅用于测试目的Root Port Advanced Error Reporting support由PCI Express AER驱动程序处理发送到Root Port的错误信息Message Signaled Interrupts (MSI and MSI-X)充许设备通过PCI总线写入内存堆栈产生一个中断而不是使用默认的IRQ中断,建议不选PCI Debugging将PCI调试信息输出到系统日志里Interrupts on hypertransport devices允许本地的hypertransport设备使用中断ISA support现在基本上没有ISA的设备了,如果你有就选吧MCA support微通道总线,老旧的IBM的台式机和笔记本上可能会有这种总线NatSemi SCx200 support在使用AMD Geode处理器的机器上才可能有PCCARD (PCMCIA/CardBus) supportPCMCIA卡(主要用于笔记本)支持Enable PCCARD debugging仅供调试16-bit PCMCIA support一些老的PCMCIA卡使用16位的CardBus32-bit CardBus support当前的PCMCIA卡基本上都是32位的CardBusCardBus yenta-compatible bridge support使用PCMCIA卡的基本上都需要选择这一项,子项请按照自己实际使用的PCMCIA卡选择{省略的部分请按照自己实际使用的PCMCIA卡选择}PCI Hotplug SupportPCI热插拔支持,如果你有这样的设备就到子项中去选吧Executable file formats可执行文件格式Kernel support for ELF binariesELF是开放平台下最常用的二进制文件格式,支持动态连接,支持不同的硬件平台.除非你知道自己在做什么,否则必选Kernel support for a.out and ECOFF binaries早期UNIX系统的可执行文件格式,目前已经被ELF格式取代Kernel support for MISC binaries允许插入二进制的封装层到内核中,使用Java,.NET,Python,Lisp等语言编写的程序时需要它Networking网络Networking options网络选项Network packet debugging在调试不合格的包时加上额外的附加信息,但在遇到Dos攻击时你可能会被日志淹没Packet socket这种Socket可以让应用程序(比如tcpdump,iptables)直接与网络设备通讯,而不通过内核中的其它中介协议Packet socket: mmapped IO让Packet socket驱动程序使用IO映射机制以使连接速度更快Unix domain sockets一种仅运行于本机上的效率高于TCP/IP的Socket,简称Unix socket.许多程序都使用它在操作系统内部进行进程间通信(IPC),比如X Window和syslogTransformation user configuration interface为IPsec(可在ip层加密)之类的工具提供XFRM用户配置接口支持Transformation sub policy supportXFRM子策略支持,仅供开发者使用PF_KEY sockets用于可信任的密钥管理程序和操作系统内核内部的密钥管理进行通信,IPsec依赖于它TCP/IP networkingTCP/IP协议当然要选IP: multicasting群组广播,似乎与网格计算有关,仅在使用MBONE的时候才需要IP: advanced router高级路由,如果想做一个路由器就选吧IP: policy routing策略路由IP: equal cost multipath用于路由的基于目的地址的负载均衡IP: verbose route monitoring显示冗余的路由监控信息IP: kernel level autoconfiguration在内核启动时自动配置ip地址/路由表等,需要从网络启动的无盘工作站才需要这个东西IP: tunnelingIP隧道,将一个IP报文封装在另一个IP报文内的技术IP: GRE tunnels over IP基于IP的GRE(通用路由封装)隧道IP: multicast routing多重传播路由IP: ARP daemon support这东西尚处于试验阶段就已经被废弃了IP: TCP syncookie support抵抗SYN flood攻击的好东西,要启用它必须同时启用/proc文件系统和"Sysctl support",然后在系统启动并挂载了/proc之后执行"echo 1 >/proc/sys/net/ipv4/tcp_syncookies"命令IP: AH transformationIPsec验证头(AH)实现了数据发送方的验证处理,可确保数据既对于未经验证的站点不可用也不能在路由过程中更改IP: ESP transformationIPsec封闭安全负载(ESP)实现了发送方的验证处理和数据加密处理,用以确保数据不会被拦截/查看或复制IP: IPComp transformationIPComp(IP静荷载压缩协议),用于支持IPsecIP: IPsec transport modeIPsec传输模式,常用于对等通信,用以提供内网安全.数据包经过了加密但IP头没有加密,因此任何标准设备或软件都**看和使用IP头IP: IPsec tunnel modeIPsec隧道模式,用于提供外网安全(包括虚拟专用网络).整个数据包(数据头和负载)都已经过加密处理且分配有新的ESP头/IP头和验证尾,从而能够隐藏受保护站点的拓扑结构IP: IPsec BEET modeIPsec BEET模式INET: socket monitoring interfacesocket监视接口,一些Linux本地工具(如:包含ss的iproute2)需要使用它TCP: advanced congestion control高级拥塞控制,如果没有特殊需求(比如无线网络)就别选了,内核会自动将默认的拥塞控制设为"Cubic"并将"Reno"作为候补IP: Virtual Server ConfigurationIP虚拟服务器允许你基于多台物理机器构建一台高性能的虚拟服务器,不玩集群就别选了The IPv6 protocol你要是需要IPv6就选吧NetLabel subsystem supportNetLabel子系统为诸如CIPSO与RIPSO之类能够在分组信息上添加标签的协议提供支持,如果你看不懂就别选了Security Marking对网络包进行安全标记,类似于nfmark,但主要是为安全目的而设计,如果你不明白的话就别选Network packet filtering (replaces ipchains)Netfilter可以对数据包进行过滤和修改,可以作为防火墙("packet filter"或"proxy-based")或网关(NAT)或**(proxy)或网桥使用.选中此选项后必须将"Fast switching"关闭,否则将前功尽弃Network packet filtering debugging仅供开发者调试Netfilter使用Bridged IP/ARP packets filtering如果你希望使用一个针对桥接的防火墙就打开它Core Netfilter Configuration核心Netfilter配置(当包流过Chain时如果match某个规则那么将由该规则的target来处理,否则将由同一个Chain中的下一个规则进行匹配,若不match所有规则那么最终将由该Chain的policy进行处理)Netfilter netlink interface允许Netfilter在与用户空间通信时使用新的netlink接口.netlink Socket是Linux用户态与内核态交流的主要方法之一,且越来越被重视Netfilter NFQUEUE over NFNETLINK interface通过NFNETLINK接口对包进行排队Netfilter LOG over NFNETLINK interface通过NFNETLINK接口对包记录.该选项废弃了ipt_ULOG和ebg_ulog机制,并打算在将来废弃基于syslog的ipt_LOG和ip6t_LOG模块Layer 3 Independent Connection tracking独立于第三层的链接跟踪,通过广义化的ip_conntrack支持其它非IP协议的第三层协议Netfilter Xtables support如果你打算使用ip_tables,ip6_tables,arp_tables之一就必须选上"CLASSIFY" target support允许为包设置优先级,一些排队规则(atm,cbq,dsmark,pfifo_fast,htb,prio)需要使用它"CONNMARK" target support类似于"MARK",但影响的是连接标记的值"DSCP" target support允许对ip包头部的DSCP(Differentiated Services Codepoint)字段进行修改,该字段常用于Qos "MARK" target support允许对包进行标记(通常配合ip命令使用),这样就可以改变路由策略或者被其它子系统用来改变其行为"NFQUEUE" target Support用于替代老旧的QUEUE(iptables内建的target之一),因为NFQUEUE能支持最多65535个队列,而QUEUE只能支持一个"NOTRACK" target support允许规则指定哪些包不进入链接跟踪/NAT子系统"SECMARK" target support允许对包进行安全标记,用于安全子系统"CONNSECMARK" target support针对链接进行安全标记,同时还会将连接上的标记还原到包上(如果链接中的包尚未进行安全标记),通常与SECMARK target联合使用"comment" match support允许你在iptables规则集中加入注释"connbytes" per-connection counter match support允许针对单个连接内部每个方向(进/出)匹配已经传送的字节数/包数"connmark" connection mark match support允许针对每个会话匹配先前由"CONNMARK"设置的标记值"conntrack" connection tracking match support连接跟踪匹配,是"state"的超集,它允许额外的链接跟踪信息,在需要设置一些复杂的规则(比如网关)时很有用"DCCP" protocol match supportDCCP是打算取代UDP的新传输协议,它在UDP的基础上增加了流控和拥塞控制机制,面向实时业务"DSCP" match support允许对IP包头的DSCP字段进行匹配"ESP" match support允许对IPSec包中的ESP头进行匹配,使用IPsec的话就选上吧"helper" match support加载特定协议的连接跟踪辅助模块,由该模块过滤所跟踪的连接类型的包,比如ip_conntrack_ftp模块"length" match support允许对包的长度进行匹配"limit" match support允许根据包的进出速率进行规则匹配,常和"LOG target"配合使用以抵抗某些Dos攻击"mac" address match support允许根据以太网的MAC进行匹配,常用于无线网络环境"mark" match support允许对先前由"MARK"标记的特定标记值进行匹配IPsec "policy" match support使用IPsec就选上吧Multiple port match support允许对TCP或UDP包同时匹配多个端口(通常情况下只能匹配一个端口)"physdev" match support允许对到达的或将要离开的物理桥端口进行匹配"pkttype" packet type match support允许对封包目的地址类别(广播/群播/直播)进行匹配"quota" match support允许对总字节数的限额值进行匹配"realm" match support允许对iptables中的路由子系统中的realm值进行匹配"sctp" protocol match support流控制传输协议(SCTP),十年以后也许能够普及的东西"state" match support这是对包进行分类的有力工具,它允许利用连接跟踪信息对连接中处于特定状态的包进行匹配"statistic" match support允许根据一个给定的百分率对包进行周期性的或随机性的匹配"string" match support允许根据包所承载的数据中包含的特定字符串进行匹配"tcpmss" match support允许根据TCP SYN包头中的MSS(最大分段长度)选项的值进行匹配IP: Netfilter Configuration针对IPv4的Netfilter配置Connection tracking (required for masq/NAT)链接跟踪.可用于报文伪装或地址转换,也可用于增强包过滤能力Connection tracking flow accounting允许针对每个连接记录已经传送的字节/包数,常用于connbytes matchConnection mark tracking support允许对连接进行标记,与针对单独的包进行标记的不同之处在于它是针对连接流的.CONNMARK target和connmark match需要它的支持Connection tracking security mark support允许对连接进行安全标记,通常这些标记包(SECMARK)复制到其所属连接(CONNSECMARK),再从连接复制到其关联的包(SECMARK)Connection tracking events连接跟踪事件支持.如果启用这个选项,连接跟踪代码将提供一个notifier链,它可以被其它内核代码用来获知连接跟踪状态的改变Connection tracking netlink interface支持基于netlink的用户空间接口SCTP protocol connection tracking supportSCTP是IP网面向多媒体通信的新一代的流控制传输协议FTP protocol supportFTP协议IRC protocol supportIRC协议是一种用来实时聊天协议,用过mIRC的人应当不陌生NetBIOS name service protocol supportNetBIOS名字服务协议TFTP protocol supportTFTP是基于UDP的比FTP简单的文件传输协议Amanda backup protocol supportAmanda备份协议PPTP protocol support点对点隧道协议(PPTP)是一种支持多协议虚拟专用网络的网络技术,ADSL用户对它应该很熟悉H.323 protocol supportITU-T提出的用于IP电话的协议SIP protocol supportIETE提出的用于IP电话的协议IP Userspace queueing via NETLINK已废弃IP tables support (required for filtering/masq/NAT)要用iptables就肯定要选上IP range match support允许对ip地址的范围进行匹配TOS match support允许对ip包头的TOS(Type Of Service)字段进行匹配recent match support可以创建一个或多个刚刚使用过的ip地址列表,然后根据这些列表进行匹配ECN match support允许对TCP/IP包头的ECN(Explicit Congestion Notification)字段进行匹配.ECN是一种显式拥塞通知技术,它不但要求路由器支持而且要求端到端主机的支持,其基本思想是当路由器发生早期拥塞时不是丢弃包而是尽量对包进行标记,接收方接到带有ECN提示的包时,通知发送方网络即将发生拥塞,也就是它通过对包的标记提示TCP源即将发生拥塞,从而引发拥塞避免算法AH match support允许对IPSec包头的AH字段进行匹配TTL match support允许对ip包头的TTL(生存期)字段进行匹配Owner match support允许对本地生成的包按照其宿主(user,group,process,session)进行匹配address type match support允许对地址类型(单播,本地,广播)进行匹配hashlimit match support是limit的升级,它基于你选择的ip地址与/或端口动态的创建以limit为桶(bucket)的哈希表.它可以创建诸如"为每个特定的目标IP分配10kpps"或"允许每个特定的源IP分配500pps"之类的规则Packet filtering定义filter表以允许对包进行过滤REJECT target support允许返回一个ICMP错误而不是简单的丢弃包LOG target support允许将符合条件的包头信息通过syslog进行记录ULOG target support透过netlink socket将符合条件的封包交给用户空间的ulogd守护进程.反对使用该选项,因为它已经被NETFILTER_NETLINK_LOG代替TCPMSS target support允许修改TCP包头中的MSS(最大分段长度)选项值Full NAT允许进行伪装/端口转发以及其它的NAT功能,仅在你需要使用iptables中的nat表时才需要选择Packet mangling在iptables中启用mangle表以便对包进行各种修改,常用于改变包的路由raw table support (required for NOTRACK/TRACE)在iptables中添加一个'raw'表,该表在netfilter框架中非常靠前,并在PREROUTING和OUTPUT链上有钩子,从而可以对收到的数据包在连接跟踪前进行处理ARP tables supportARP表支持.只有在局域网中才有ARP欺骗问题,另外路由器也会遭到ARP欺骗ARP packet filteringARP包过滤.对于进入和离开本地的ARP包定义一个filter表,在桥接的情况下还可以应用于被转发ARP 包ARP payload mangling允许对ARP包的荷载部分进行修改,比如修改源和目标物理地址IPv6: Netfilter Configuration针对IPv6的Netfilter配置,需要的话可以参考前面IPv4的Netfilter配置进行选择DECnet: Netfilter Configuration针对DECnet的Netfilter配置Bridge: Netfilter Configuration针对桥接的Netfilter配置DCCP Configuration数据报拥塞控制协议在UDP的基础上增加了流控和拥塞控制机制,使数据报协议能够更好地用于流媒体业务的传输SCTP Configuration。

linux ACPI

ACPI in Linux ── 传闻与事实Len BrownIntel Open Source Technology Centerlen.brown@Translated by Albcamus <albcamus@>概要:主流的Linux发型版从几年前就开始提供ACPI支持了,但直到今天,Linux社区中还存在着很多对ACPI的误解。

本文给出并澄清了关于ACPI in Linux的几个最主要的传闻。

1, 传闻: 在我的笔记本、PC机、服务器上,打开ACPI支持没有什么好处当用户不再以传统模式引导,而以ACPI模式引导,他们注意到的第一件事就是,电源按钮也被软件控制了。

在传统模式下,当按下电源按钮从而切断电源时,对计算机来说这是个物理的状态改变(断电);而在ACPI模式下,按下电源按钮会给OS发送中断,从而使OS能安全关机。

实际上,电源、休眠,和笔记本上盖合拢, 这些事件都被ACPI标准化了, OS可以把它们映射到自己的处理例程上。

除了把电源按钮的按下事件标准化之外, OS怎样用软件方式切断电源, 也被ACPI标准化了。

所以,由软件引发的关机,在Linux系统关闭之后,还可以切断电源;而在传统模式下,必须在Linux关闭后手工按电源按钮断电。

当在ACPI模式运行时, 用户会注意到电池的寿命延长了。

在今天的笔记本上,要想延长电池寿命, 一个重要的手段就是电源管理。

当处理器空闲,Linux内核的IDLE循环例程,将利用ACPI的 「CPU空闲的电源状态(CPU idle power states)」(C-states)来省电。

当处理器部分空闲,Linux的cpufreq子系统,将利用ACPI的「CPU的性能状态(performance states)」(P-states),降低CPU的电压和频率,以达到省电目的。

ACPI和传统模式的其他区别,可能受到用户所在的平台(译按,platform,可能专指BIOS实现)和GUI界面的影响,这些区别包括:电池低容量警报,发热控制(thermal control),以及调用suspend-to-dis k或suspend-to-R A M的能力等等。

UbuntuLiinux睡眠无法唤醒解决方法:ACPI设置

UbuntuLiinux睡眠⽆法唤醒解决⽅法:ACPI设置最近给笔记本换了⼀个固态,顺便就重装了⼀下系统,版本是Ubuntu 20.10。

装完之后各种功能基本都是正常的,触摸板轻触单击、双指右键等功能开箱即⽤。

但是在安装完最新的Nvidia驱动之后就出现了问题,系统挂起之后就⽆法唤醒了,只有⼀个光标在屏幕上⼀直闪。

这种基本上都是硬件的兼容问题,要么就寄希望于内核和驱动的更新,要么就换⼀个linux发⾏版。

但是由于我重装之前应该是正常的,就导致我⾮常难受,想要解决这个问题。

linux 这类问题千变万化,很多时候搜遍互联⽹也没法解决。

但这次运⽓不错,找到了问题的症结,并且有⼀定的普适性。

I found a solution which should work for everyone.Worked for me! In fact, it is the only damned thing that ever worked for me.问题原因Linux系统向上为⽤户提供良好的操作界⾯,向下管理各种硬件和资源。

其中包括开关机、挂起和唤醒、休眠等,还有Fn功能键等。

软件与硬件沟通中间渠道就是通过固件,这部分是由硬件⼚商提供的,⼀般写在BIOS⾥。

ACPI是⼀个重要的规范,称作⾼级配置与电源接⼝。

由于现在Windows是操作系统的绝对的主流,很多⼚商在设计的时候就没有考虑到其他操作系统⽐如Linux,就会导致很多功能⽆法正常的⼯作。

不过好在这个现象已经引起Linux开发者的注意,并且提供了⼀个acpi_osi=的选项,可以让固件提供和Windows相同的功能。

解决⽅法ACPI的DSDT提供了对操作系统的识别功能,我们可以⽤如下的命令查看DSDT⽀持什么样的系统版本:$ sudo strings /sys/firmware/acpi/tables/DSDT | grep -i 'windows ' | sort在我的电脑上包括Windows 2009,Windows 2012,Windows 2013三个返回值,分别代表的是Windows 7,8和8.1。

acpidump 使用方法

acpidump 使用方法1. 什么是 acpidump?acpidump 是一个用于从系统中提取 ACPI (Advanced Configuration and Power Interface) 表格的工具。

ACPI 是一种电源管理标准,用于操作系统与硬件之间的通信。

acpidump 可以将这些表格导出为二进制文件,供开发者分析和调试使用。

2. acpidump 的安装acpidump 是 Linux 系统中的一个命令行工具。

要安装 acpidump,可以使用以下命令:sudo apt-get install acpica-tools这将会安装 acpidump 及其依赖项。

3. 使用 acpidump 提取 ACPI 表格使用 acpidump 提取 ACPI 表格非常简单。

只需在终端中运行以下命令:sudo acpidump > acpidump.bin这将会将 ACPI 表格导出为一个名为 acpidump.bin 的二进制文件。

4. 解析 acpidump 导出的二进制文件acpidump 导出的二进制文件包含了系统中的 ACPI 表格信息。

要解析这些信息,可以使用 acpixtract 工具。

acpixtract 是 acpidump 工具集的一部分,可用于将二进制文件转换为可读的文本格式。

要使用 acpixtract 解析 acpidump 导出的二进制文件,可以运行以下命令:acpixtract -a acpidump.bin这将会在当前目录下生成一个名为 acpidump.dsl 的文本文件,其中包含了解析后的 ACPI 表格信息。

5. 分析 acpidump 导出的 ACPI 表格acpidump 导出的 ACPI 表格包含了系统中的各种信息,如硬件设备、电源管理、睡眠状态等。

分析这些表格可以帮助开发者了解系统的配置和功能。

在解析生成的 acpidump.dsl 文件后,可以使用文本编辑器打开该文件,查看其中的内容。

Linux电源管理子系统

Linux Power Management SupportLinux电源管理支持翻译:王仲俊email:wzhjbj@This document briefly describes how to use power management with your Linux system and how to add power management support to Linux drivers.这份文档简要地阐述了在你的linux系统中如何使用电源管理和如何在linux驱动中添加电源管理支持。

APM or ACPI?APM或是ACPI?------------ If you have a relatively recent x86 mobile, desktop, or server system, odds are it supports either Advanced Power Management (APM) or Advanced Configuration and Power Interface (ACPI). ACPI is the newer of the two technologies and puts power management in the hands of the operating system, allowing for more intelligent power management than is possible with BIOS controlled APM.------------如果你近来有相关的x86移动、台式或是服务器系统,(那么你会发现)几乎是它不是支持Advanced Power Management (APM高级电源管理)就是Advanced Configuration and Power Interface (ACPI高级结构和电源接口)。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
系统不能启动
试试 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
• AML 代码,一种类 C 的代码。由 BIOS 提供,OS 的 AML 解释器(在 Linux 中叫 ACPI CA) 解释执行这些代码。这是 ACPI 抽象层的关键,下面会详细介绍。
• 配置信息,ACPI 包含的配置信息很多,比如多处理器配置信息(MADT)、NUMA 配置信 息(SRAT、SLIT)、高精度定时器(HPET)等。
Method (_DIS, 0, NotSerialized) {
Or (\_SB.PCI0.LPC.PIRA, 0x80, \_SB.PCI0.LPC.PIRA) } }
比如我们想禁止 LNKA 设备,ACPI 规范定义了 OS 必须执行此设备的_DIS 函数。从硬件的角度 来讲,禁止 LNKA 设备需要将某个 PCI 设备的配置空间的寄存器 0×60 的最高位置上。OS 不 需要知道硬件的细节,它解释执行_DIS 函数即可。上面的代码就是 AML 代码,由 BIOS 提供, 语句‘Or (\_SB.PCI0.LPC.PIRA, 0×80, \_SB.PCI0.LPC.PIRA)’实际上就是给寄存器 \_SB.PCI0.LPC.PIRA 置上最高位, 而 PIRA 就是 PCI 设备 LPC 的配置空间的寄存器 0×60。 从此段代码我们可以明显的看出 BIOS 以 AML 代码的形式隐藏(抽象)了硬件的细节,从而使 得 OS 看到的是一个平台无关的硬件。
释器( Linux kernel 包含了这个解释器,很多其他 OS 也是如此,比如 BSD、opensolaris 等 ), 一个编译器(将 ACPI Source Language (ASL)编译成 AML 代码)和一些测试工具。
最新的 Linux/ACPI 的代码可以使用 git 在 /git/?p=linux/kernel/git/lenb/linux-acpi-2.6.git 得到。
Suspend to RAM 问题
STR 的一个常见问题是 Resume 回来后黑屏,但是系统并没有死掉,比如可以通过网络访问系 统或者键盘灯工作正常。可以试试 kernel 参数 acpi_sleep=s3_bios/s3_mode,它会尝试将 显示器打开。如果不行可以试试 vbetools(/~mjg59/vbetool), 在 resume 回来后输入 $ vbetool post 为了方便,你可以在你的 STR 脚本中调用此命令。
计算机领域的一个基本方法是增加一个抽象层,从而使得抽象层的上下两层独立的发展,ACPI 事实上也是借鉴类似的思想。ACPI 的抽象主要是通过 ACPI 表中提供的信息来实现,这些信 息包括 ACPI 寄存器、AML 代码、配置信息等。
• ACPI 寄存器,描述了和 ACPI 相关的寄存器。OS 可以直接从 ACPI 表中取得这些寄存器 的信息,因此不必了解具体的硬件配置。
STR 的另一个常见问题是系统没法 resume 回来,你可以试试 acpi_sleep=s3_beep。如果你听 不到电脑的扬声器产生的声音,那么 resume 的代码完全没被执行。这可能是 BIOS 的 原 因 ,
也可能是 Linux 的原因,目前还没有太好的办法处理。反之,很有可能是 Linux driver 的原 因,你可以尝试尽可能少的加载驱动程序,只保留最基本的驱动,比如硬盘驱动。
Suspend to Disk 问题
TBD
ACPI debug 参数
参数是 acpi.debug_level and acpi.debug_layer。如果打开 debug 参数,ACPI 可以产生很 多详细的运行输出。这些输出可以帮助我们定位出错的原因。
对于 debug_layer 和 debug_level,include/acpi/acoutput.h 里面包含了很多值,这些值决。acpi.debug_level 和 acpi.debug_layer 是 kernel 参数,也可以在系统运行时改变这些值,它们是 /sys/module/acpi/parameters/debug_{level,layer}。
• 底层硬件。比如 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 节点。
为什么学习 ACPI
ACPI 是 Intel(i386,x86_64,IA64)平台的标准固件规范,绝大部分 OS 需要从 BIOS 得到 的信息都可以从 ACPI 得到,并且现在的趋势是未来的任何新的特性相关的信息都只能从 ACPI 得到。ACPI 的内容庞杂,学习 ACPI 至少可以帮助我们理解:
首先要得到原始的 DSDT 表(后面的章节会介绍 acpidump 等工具): $ acpidump > acpidump.out $ acpixtract DSDT acpidump > DSDT.dat 这样我们就得到了 DSDT 表的二进制文件,将它反汇编 $ iasl -d DSDT.dat 我们会得到一个 AML 代码文件,你可以修改它 $ vi DSDT.dsl 然后重新编译 $ iasl -tc DSDT.dsl 把它拷贝到 kernel source 中 $ cp DSDT.hex $SRC/include/
注意,这些输出信息可能很快就将 kernel 的 ring buffer 用完,你可能需要使用 log_buf_len=XY 来增加 ring buffer 的大小。使用 serial console (Documentation/serialconsole.txt)来得到 kernel 输出是一个好的方法。如果你的笔记本电脑没有串口,可以试试 netconsole (Documentation/networking/netconsole.txt)。
AML 代码是抽象的关键。为了消除平台相关性,BIOS 把平台相关的操作用 AML 代码来实现。OS 不需要知道平台细节,它只是解释执行这些代码,在解释执行的过程中平台相关的操作就被 执行了。ACPI 规范定义了一些标准的 AML 函数,OS 解释执行一个这样的标准函数就可以实现 特定的功能。举个例子:
禁止使用 ACPI 来枚举 PNP 设备,比如串口、PS2 键盘鼠标等。
noapic
禁止使用 io-apic 来做设备中断路由,这样做的效果之一是 ACPI 返回的中断路由表将是针对 PIC(8259)的。
nolapic
禁止使用 Local-APIC 和 IO-APIC。
设备中断相关的问题
出现中断问题的可能性很多,比如驱动程序有 bug。由 ACPI 导致的最常见的中断问题是 kernel 打出:”irqXX: nobody cared!”。这意味着 kernel 收到一个中断,但是没有驱动程序来处 理此中断。Kernel 会将此中断禁止,从而导致挂在此中断上的所有设备都停止工作。 pci=noacpi, acpi=noirq, pnpacpi=off, noapic, nolapic 这些参数可以帮助隔离一些问 题。另外一个有用的参数是”irqpoll”,出现上面的中断问题时,它可以使 kernel 自动探 测哪个设备发出了中断。这个参数对于调试那些中断路由有问题的系统很有用。
• 配置信息。这些信息从 legacy PNP 设备的配置,到多处理器,到 NUMA,比如现在的 Multiple Core 的信息就只能从 ACPI 得到。Linux 启动很多代码就是处理这些配置信 息,比如 APIC,IOAPIC 设置等。
• ACPI 相关设备。主要是笔记本电脑相关的设备,包括电源按钮,电池,外接电源,风 扇,热键等。
更多的 ACPI 预定义的函数可以在 ACPI 规范中找到,可以在 下载最 新的规范。
Linux/ACPI 实现中使用的 AML 解释器是 ACPICA -the ACPI Component Architecture. 可以 从 /technology/iapc/acpi/downloads.htm 得到。它包含一个 AML 解
可以说要理解现代 PC 平台必须了解 ACPI。
解决 ACPI 问题的小窍门
首先可以看看是否这是一个 regression,如果以前版本的 Linux kernel 可以工作,但新的 不行,则是一个 regression,可以测试不同的 kernel 从而找出哪个版本引入了 bug。使用 gitbisect 是一个好的选择,它可以帮你定位到哪个 patch 导致了 regression。一些 git-bisect 相关的资料如下: http://www.stardust.webpages.pl/files/handbook/handbook-en.pdf /pub/software/scm/git/docs/tutorial.html /pub/software/scm/git/docs/git-bisect.html
相关文档
最新文档