首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往
您找到你想要的搜索结果了吗?
是的
没有找到

Linux X86-ACPI PNP Hardware ID的识别框架

基于X86架构的Linux内核,在移植驱动的过程中,发现GPIO和I2C的device ID添加到pnp驱动框架后无法进入probe函数,后面找了下原因,因为pnp遵循的是ACPI规范,是由于如下Hardware ID字段是需要从BIOS中进行描述的,而目前的驱动匹配不到对应的字段,自然就不可能注册成功了。 PNP是什么东西?不是三极管的那个PNP啦,这个PNP表示的是:Plug-and-Play,译文为即插即用。 PNP的作用是自动配置底层计算机中的板卡和其他设备,然后告诉对应设备都做了什么。PnP的任务是把物理设备和软件设备驱动程序相配合,并操作设备,在每个设备和它的驱动程序之间建立通信信道。然后,PnP分配下列资源给设备和硬件:I/O地址、IRQ、DMA通道和内存段。即插即用设备配置的控制权将从系统BIOS传递到系统软件,所以驱动中一定会有代码进行描述,到时可以跟一下这部分的代码深入了解一下。由于PNP遵循ACPI的规范,那么既然是规范,那肯定要照着做了,规范怎么说,那就怎么做。 以下是关于ACPI Spec中对Hardware ID的描述,描述如下:

04

卡3

51 . 测试1MB以上的存储器。 . 52 所有ISA只读存储器ROM进行初始化,最终给PCI分配IRQ号等初始化工作。 已完成1MB以上的存储器测试;即将准备回到实址方式。 进入键盘检测。 53 如果不是即插即用BIOS,则初始化串口、并口和设置时种值。 保存CPU寄存器和存储器的大小,将进入实址方式。 . 54 . 成功地开启实址方式;即将复原准备停机时保存的寄存器。 扫描“打击键” 55 . 寄存器已复原,将停用门电路A-20的地址线。 . 56 . 成功地停用A-20的地址线;即将检查BIOS ROM数据区。 键盘测试结束。 57 . BIOS ROM数据区检查了一半;继续进行。 . 58 . BIOS ROM的数据区检查结束;将清除发现<ESC>信息。 非设置中断测试。 59 . 已清除<ESC>信息;信息已显示;即将开始DMA和中断控制器的测试。 . 5A . . 显示按“F2”键进行设置。 5B . . 测试基本内存地址。 5C . . 测试640K基本内存。 60 设置硬盘引导扇区病毒保护功能。 通过DMA页面寄存器的测试;即将检验视频存储器。 测试扩展内存。 61 显示系统配置表。 视频存储器检验结束;即将进行DMA#1基本寄存器的测试。 . 62 开始用中断19H进行系统引导。 通过DMA#1基本寄存器的测试;即将进行DMA#2寄存器的测试。 测试扩展内存地址线。 63 . 通过DMA#2基本寄存器的测试;即将检查BIOS ROM数据区。 . 64 . BIOS ROM数据区检查了一半,继续进行。 . 65 . BIOS ROM数据区检查结束;将把DMA装置1和2编程。 . 66 . DMA装置1和2编程结束;即将使用59号中断控制器作初始准备。 Cache注册表进行优化配置。 67 . 8259初始准备已结束;即将开始键盘测试。 . 68 . . 使外部Cache和CPU内部Cache都工作。 6A . . 测试并显示外部Cache值。 6C . . 显示被屏蔽内容。 6E . . 显示附属配置信息。 70 . . 检测到的错误代码送到屏幕显示。 72 . . 检测配置有否错误。 74 . . 测试实时时钟。 76 . . 扫查键盘错误。 7A . . 锁键盘。 7C . . 设置硬件中断矢量。 7E . . 测试有否安装数学处理器。 80 . 键盘测试开始,正在清除和检查有没有键卡住,即将使键盘复原。 关闭可编程输入/输出设备。 81 . 找出键盘复原的错误卡住的键;即将发出键盘控制端口的测试命令。 . 82 . 键盘控制器接口测试结束,即将写入命令字节和使循环缓冲器作初始准备。 检测和安装固定RS232接口(串口)。 83 . 已写入命令字节,已完成全局数据的初始准备;即将检查有没有键锁住。 . 84 . 已检查有没有锁住的键,即将检查存储器是否与CMOS失配。 检测和安装固定并行口。 85 . 已检查存储器的大小;即将显示软错误和口令或旁通安排。 . 86 . 已检查口令;即将进行旁通安排前的编程。 重新打开可编程I/O设备和检测固定I/O是否有冲突。 87 . 完成安排前的编程;将进行CMOS安排的编程。 . 88 . 从CMOS安排程序复原清除屏幕;即将进行后面的编程。 初始化BIOS数据区。 89 . 完成安排后的编程;即将显示通电屏幕信息。 . 8A . 显示头一个屏幕信息。 进行扩展BIOS数据区初始化。 8B . 显示了信息:即将屏蔽主要和视频BIOS。 . 8C . 成功地屏蔽主要和视频BIOS,将开始CMOS后的安排任选项的编程。 进行软驱控制器初始化。 8D . 已经安排任选项编程,接着检查滑了鼠和进行初始准备。 . 8E . 检测了滑鼠以及完成初始准备;即将把硬、软磁盘复位。 . 8F . 软磁盘已检查,该磁碟将作初始准备,随后配备软磁碟。 . 90 . 软磁碟配置结束;将测试硬磁碟的存在。 硬盘控制器进行初始化。 91 . 硬磁碟存在测试结束;随后配置硬磁碟。 局部总线硬盘控制器初始化。 92 . 硬磁碟配置完成;即将检查BIOS ROM的数据区。 跳转到用户路径2。 93 . BIOS ROM的数据区已检查一半;继续进行。 . 94 . BIOS ROM的数据区检查完毕,即调定基本和扩展存储器的大小。 关闭A-20地址线。 95 . 因应滑鼠和硬磁碟47型支持而调节好存储器的大小;即将检验显示存储器。 . 96 . 检验显示存储器后复原;即将进行C800:0任选ROM控制之前的初始准备。 “ES段”注册表清除。 97 . C800:0任选ROM控制之前的任何初始准备结束,接着进行任选ROM的检查及控制。 . 98 . 任选ROM的控制完成;即将进行任选ROM回复控

03

menuconfig 配置选项详解

详细介绍内核配置选项及删改情况 第一部分:全部删除 Code maturity level options —> 代码成熟等级选项 []Prompt for development and/or incomplete code/drivers 默认情况下是选择的,这将会在设置界面中显示还在开发或者还没有完成的代码与驱动.不选。 第二部分 :除以下选项,其它全部删除 General setup—〉 System V IPC (IPC:Inter Process Communication)是组系统调用及函数库,它能让程序彼此间同步进行交换信息。某些程序以及DOS模拟环境都需要它。为进程提供通信机制,这将使系统中各进程间有交换信息与保持同步的能力。有些程序只有在选Y的情况下才能运行,所以不用考虑,这里一定要选。 第三部分:除以下选项,其它全部删除 Loadable module support —> 可引导模块支持 建议作为模块加入内核 [] Enable loadable module support 这个选项可以让你的内核支持模块,模块是什么呢?模块是一小段代码,编译后可在系统内核运行时动态的加入内核,从而为内核增加一些特性或是对某种硬件进行支持。一般一些不常用到的驱动或特性可以编译为模块以减少内核的体积。在运行时可以使用modprobe命令来加载它到内核中去(在不需要时还可以移除它)。一些特性是否编译为模块的原则是,不常使用的,特别是在系统启动时不需要的驱动可以将其编译为模块,如果是一些在系统启动时就要用到的驱动比如说文件系统,系统总线的支持就不要编为模块了,否在无法启动系统。 []Automatic kernel module loading 一般情况下,如果我们的内核在某些任务中要使用一些被编译为模块的驱动或特性时,我们要先使用modprobe命令来加载它,内核才能使用。不过,如果你选择了这个选项,在内核需要一些模块时它可以自动调用modprobe命令来加载需要的模块,这是个很棒的特性,当然要选Y喽。 第四部分:全部删除 Block layer—–〉块设备 第五部分:除以下选项,其它全部删除 Processor type and features —> 处理器类型 Subarchitecture Type (PC-compatible) —> 这选项的主要的目的,是使Linux可以支持多种PC标准,一般我们使用的PC机是遵循所谓IBM兼容结构(pc/at)。这个选项可以让你选择一些其它架构。我们一般选择PC-compatible就可以了。 Processor family(386) : 它会对每种CPU做最佳化,让它跑的好又快,一般来说,你是什么型号的就选什么型号的就好。我选的是386,这样内核会省下不少空间 第六部分:除以下选项,其它全部删除 Power management options (ACPI, APM) —> 电源管理选项 [ ] Power Management Debug Support 电源管理的调试信息支持,如果不是要调试内核有关电源管理部份,请不要选择这项。 ACPI Support —〉高级电源接口配置支持,如果BIOS支持,建议选上这项 []Button 这个选项用于注册基于电源按钮的事件,比如power, sleep等,当你按下按钮时事件将发生,一个守护程序将读取/proc/acpi/event,并执行用户在这些事件上定义的动作比如让系统关机。可以不选择,根据自己的需求。 第七部分:除以下选项,其它全部删除 Bus options (PCI, PCMCIA, EISA, MCA, ISA) —> 总线选项 []PCI support PCI access mode (Any) —> PCI外围设备配置,强列建议选Any,系统将优先使用MMConfig,然后使用BIOS,最后使用Direct检测PCI设备。 第八部分:除以下选项,其它全部删除 Executable file formats —> Kernel support for ELF binaries ELF是开放平台下最常用的二进制文件,它支持不同的硬件平台。一定要选。 第九部分:除以下选项,其它全部删除 Networking Networking options —> []Unix domain sockets []TCP/IP networking 第十部分:除以下选项,其它全部删除 Device Drivers —>设备驱动 Block devices——-〉 []Compaq SMART2 support [] Compaq Smart Array 5xxx support []Loopback device support 大部分的人这一个选项都选N,因为没有必要。但是如果你要mount iso文件的话,你得选上Y

00
领券