如果以module的形式构建内核驱动程序,则可以使用insmod或can探测在运行时手动将其插入内核,这一点我很清楚。但是,下列关于设备树的声明是正确的吗?
module构建,它将在启动时自动插入到内核中,这取决于它是否列在设备树中。built-in,那么它将在启动时自动插入到内核中,而不管设备树如何。发布于 2017-10-03 09:26:39
内置内核驱动程序还需要设备树吗?是。设备树的概念与驱动程序是内置的还是编译成模块是正交的.设备树包含有关硬件的信息。站台总线将该信息传递给相关司机。
这是一篇很好的简短文章,介绍了平台总线,以及设备树之前的事情:https://www.codeproject.com/tips/1080177/linux-platform-device-driver。设备树将恶意软件的信息转化为内核代码中的硬编码,从而使代码更易于移植。
发布于 2017-10-03 07:42:55
在2中,没有插入步骤;内建驱动程序静态地是内核的一部分(并且没有一刻它不是内核的一部分)。
然后您可以使用配置编译和使用完全静态的内核,其中包含所有有用的内置驱动程序(因此没有模块,也没有https://en.wikipedia.org/wiki/Initial_ramdisk)。您将设置CONFIG_MODULES=n,您将永远不会在内核.config文件中使用m,并将特定硬件和系统(例如文件系统)所需的所有东西设置为y。另见这未回答的问题。我猜许多使用Linux的嵌入式系统都有这样编译的内核,并且不使用initrd。
您可以不用设备树使用驱动程序(或者内置驱动程序,也可以使用已加载的模块),因为您可以将设备放到任何地方的文件路径中。
请参阅https://www.devicetree.org/,并注意到较旧的Linux系统没有。设备树主要是一个有用的方便(改进udev和德福司)。您可以完全避免这种情况:可以运行一个完全静态的内核,而不需要任何设备树,在根文件系统上填充块和字符设备,就像1995年的Linux发行版一样。因此,即使在今天,内置内核驱动程序也不需要任何设备树。
请注意,旧的Unix系统(例如,1980年代中期的SunOS3或1990年代的Linux1.x内核)没有这类系统。那时,您只需静态地将内核与适当的驱动程序重新链接,然后使用设备文件:字符设备或块设备(它们的驱动程序是内核的一个内置部分)。大多数驱动程序代码都有一些初始化,可以探测到相关硬件的存在(这确实减慢了启动过程)。
顺便说一句,您的问题取决于内核的加载方式、硬件以及固件加载它的方式。例如,您可以使用嵌入在固件(ROM中)中的Linux内核来构建硬件。
也许使用最近的UEFI,一些最近的硬件需要一个设备树。AFAIK,BIOS不需要。您可以配置和编译一个静态内核和一个特殊的init程序,这些程序甚至不使用任何设备树,并且很少使用预先存在的设备文件。当然,您需要一些根文件系统提供它们。
还可以看看OSDEV,还有OSes提到的业余爱好。或进入FreeBSD等..。它们不使用(或者至少可以配置为避免)任何设备树AFAIK。
我可能可以在我的PC上启动一个1995年Linux发行版(至少如果我有一个软盘单元的话),-at至少可以使用最近为我的硬件量身定做的一个完全静态的内核--而且它可以在没有任何设备树的情况下工作(当时还不存在这种树)。
阅读http://pages.cs.wisc.edu/~remzi/OSTEP/ (免费下载)。
https://stackoverflow.com/questions/46539478
复制相似问题