首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >systemd调试(嵌入式案例)

systemd调试(嵌入式案例)
EN

Unix & Linux用户
提问于 2022-04-06 01:28:23
回答 1查看 76关注 0票数 1

如何跟踪系统单元文件,具体而言,设备单元文件?我使用3.18版本的linux内核。在我的板上,在systemd启动后,(我的分区).device运行,并且,我想,重装rootfs需要大约2秒的时间,就像systemd分析图显示的那样。我想知道它在这2秒内会做什么,因为重新安装rootfs所花费的时间并不多(通常只有几毫秒)。如何理解系统分析图,有那么多的单元文件,是否有可能知道哪个单元导致其他单元的运行?我试图在我的系统中找到.device单元文件,但是找不到任何东西。

EN

回答 1

Unix & Linux用户

发布于 2022-04-06 06:36:56

内核版本3.18是在2014年12月发布的,所以它已经很老了。这是长期支持内核之一,尽管这个内核版本的“官方”终止是在2017年1月,但它仍可能收到的不规则更新。因此,内核版本并不一定是任何其他OS组件的历史的可靠指标,尤其是在嵌入式系统上。

您的系统用systemctl --version报告了什么?

在systemd的现代版本中,文件系统安装由*.mount单元处理。具体来说,要查看根文件系统挂载单元-.mount的内容,需要systemctl cat -- -.mount强制将-.mount解释为单元名称(而不是选项)。使用该命令,您将看到挂载单元将在表示包含根文件系统的设备/目标的设备/目标上具有自动After=排序依赖关系。

*.device单元显示为由内核检测到的设备,并在/sys虚拟文件系统和udev-maintained设备节点中获得其表示(在适用的情况下,网络设备不带设备节点进行处理)。

*.device单元通常都是自动生成的,因此通常不会在任何地方找到任何*.device单元文件。相反,udev规则可能会影响设备单元的创建:例如,如果udev规则设置设备的属性SYSTEMD_READY=0,则省略设备创建,直到该属性被移除或更改为SYSTEMD_READY=1。有关更多详细信息,请参阅man systemd.device

本质上,*.device单元的存在主要是为了表示硬件设备,主要是为了使其他单元能够定义它们的依赖关系。默认情况下,设备单元不会依赖任何其他单元;相反,它们将根据定义“依赖”它们所代表的用户空间访问设备。

您所看到的2秒可能来自以下操作的任意组合:

  • 检测和准备包含磁盘控制器的总线(如果适用于您的系统架构)
  • 磁盘控制器本身的检测和重置
  • 当Linux内核驱动程序接管它的控制时,检测和重置磁盘(S),以便在系统固件可能已经完成的任何操作之后,使磁盘进入已知的状态(这可能占用了2秒的大部分时间,因为磁盘可能有大量的内部自测试例程,它们将在重置时运行)。
  • 读取、识别和处理磁盘上的分区表( Linux内核支持几种分区表格式:取决于硬件体系结构,其中可能适用不止一种)
票数 1
EN
页面原文内容由Unix & Linux提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

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

复制
相关文章

相似问题

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