首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么嵌入式系统需要设备树而pcs不需要?

为什么嵌入式系统需要设备树而pcs不需要?
EN

Unix & Linux用户
提问于 2017-10-21 22:16:40
回答 1查看 9.3K关注 0票数 29

当引导嵌入式设备中的内核时,需要向Linux内核提供设备树,而在普通x86 pc上引导内核不需要设备树--为什么?

据我所知,在x86 pc上,内核对硬件的“探测”(如果我错了就纠正我的话),那么为什么内核不能探测硬件和嵌入式系统呢?

EN

回答 1

Unix & Linux用户

发布于 2017-10-22 12:03:55

PC确实需要一个设备树.

他们只是叫它别的东西。

说PC/AT兼容的后代的操作系统假定存在诸如PCI总线之类的东西是不正确的。他们不知道。

他们也不调查。从20世纪90年代中期以来,只需戳一些I/O或内存地址来查看它们是否工作,就不再需要对硬件进行探测。

相反,它们枚举根总线。

这是一种不能通过与总线控制器设备硬件通信来枚举的总线,就像与其他可枚举总线一样。这是一种纯粹作为系统固件和操作系统的构造而存在的总线。它是通过查询系统固件来列举的,其上的内容由主板制造商烘焙到系统固件中,以匹配主板上的内容。

这和设备树在概念上没有什么区别。就像一个设备树,它必须创建,以匹配实际的董事会。就像设备树一样,它是一个设备节点列表,其中包含资源信息(以及其他内容)。就像设备树一样,它是操作系统的外部,并不是要探测到硬连接到操作系统自己代码中的东西列表。

即插即用BIOS规范具有固件向操作系统提供内存中的简单设备树,其中一个节点将是(例如)指定PCI总线的PNP0A03节点,给出分配给它的I/O和内存资源,从而找到它的位置。

ACPI取代了这一点,但理念依然不变。在ACPI中,有一个名为区分系统描述表的表,该表由一个辅助系统描述符表增强,该表(包含来自其他几个ACPI表的信息)提供了很多相同的内容。

(如果您想从固件开发人员那里看到这一点,请查看Coreboot中的一个例子。它有大量的ACPI源语言文件,其中的一些文件被编译成一个字节码二进制映像,并将其合并到固件中。该选择由一个配置工具控制,该工具提示一个特定主板被锁定。)

例如,在FreeBSD上,即插即用是由内核内的pnpbios总线驱动程序枚举的(自那时起已被删除),以及(现在) acpi总线驱动程序枚举了这些信息。在Linux中,有一个(仍然) drivers/pnp/pnpbios总线驱动程序来读取即插即用的BIOS表,ACPI表是通过分散在arch/arm64/kernel/arch/x86/kernel/中的代码读取的。

可枚举根总线可以,但通常不会(按ACPI进行某些侵犯)与根总线上的设备上可枚举的内容重叠。例如,虽然有用于ATA总线的PNPxxxx ID,但系统固件不会在根总线上列出PCI到ATA桥设备,并使用它们。这些设备是通过枚举根总线时查找PCI总线,然后在枚举PCI总线时找到PCI到ATA桥来发现的。

这件事的简单事实是,在不同名称的平台上,同样的基本原则在运行。有一个与系统中其他不可枚举设备相匹配的出炉设备列表,并且固件或任何正在使用的引导加载程序提供了一种机制,使操作系统能够读取该列表并配置其上的设备,从而使操作系统能够在依次枚举这些设备。

再读

  • 康柏计算机公司、菲尼克斯技术公司和英特尔公司(1994-05-05)即插即用BIOS规范。1.0A版英特尔公司。
  • 链接到ACPI相关文档。。统一可扩展固件接口论坛。UEFI。
  • Patrick Mochel (2002年)。"Linux内核设备模型“。渥太华Linux专题讨论会2002年会议记录。第368至375页。
  • 希森·潘迪亚和汤姆·罗兹。"权力和资源管理“。FreeBSD手册。
  • “遗产驱动程序:设备探测”。平台设备和驱动程序。Documentation/driver-model/platform.txt。Linux内核。
  • https://superuser.com/a/1253583/38062
票数 26
EN
页面原文内容由Unix & Linux提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://unix.stackexchange.com/questions/399619

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档