以下是来自 Microzed 板 (Cortex A9) 控制台的一些消息:
[Sat May 17 18:18:26.603 2014] DMA: preallocated 256 KiB pool for atomic coherent allocations
[Sat May 17 18:18:26.603 2014] xgpiops e000a000.ps7-gpio: gpio at 0xe000a000 mapped to 0xf004e000
[Sat May 17 18:18:26.603 2014] usbcore: registered new interface driver usbfs
[Sat May 17 18:18:26.624 2014] usbcore: registered new interface driver hub
[Sat May 17 18:18:26.624 2014] usbcore: registered new device driver usb
[Sat May 17 18:18:26.624 2014] Switching to clocksource xttcps_clocksource
[Sat May 17 18:18:26.624 2014] e0001000.serial: ttyPS0 at MMIO 0xe0001000 (irq = 82) is a xuartps
[Sat May 17 18:18:26.624 2014] console [ttyPS0] enabled
[Sat May 17 18:18:26.634 2014] xdevcfg f8007000.ps7-dev-cfg: ioremap f8007000 to f0052000 with size 100
[Sat May 17 18:18:26.662 2014] xqspips e000d000.ps7-qspi: master is unqueued, this is deprecated
[Sat May 17 18:18:26.662 2014] spi spi32766.0: setup: unsupported mode bits 3
[Sat May 17 18:18:26.662 2014] xqspips e000d000.ps7-qspi: can't setup spi32766.0, status -22
[Sat May 17 18:18:26.662 2014] spi_master spi32766: spi_device register error /amba@0/ps7-qspi@e000d000/ps7-qspi@0
[Sat May 17 18:18:26.662 2014] xqspips e000d000.ps7-qspi: at 0xE000D000 mapped to 0xF0054000, irq=51
[Sat May 17 18:18:26.671 2014] ehci_hcd: USB 2.0 'Enhanced' Host Controller (EHCI) Driver
[Sat May 17 18:18:26.680 2014] ULPI transceiver vendor/product ID 0x0424/0x0007
行后:
[Sat May 17 18:18:26.624 2014] usbcore: registered new device driver usb
我想检查 USB 驱动程序是否确实已加载。我认为看到这一点的一种方法是在控制台上打印该行后立即点亮 LED。
但我该怎么做呢?还有其他更好的方法吗?
我的主要要求是测量从开机到 USB 驱动程序加载的时间。如果我在加载 USB 驱动程序时在板上收到任何信号,则可以完成此操作。我将在电源打开时捕获此信号,这将为我提供有关 USB 加载时间的精确信息。
通过查看日志文件中的时间戳无法实现这种精度,因为消息不会立即到达,并且在消息开始到达之前要花费相当多的时间。
答案1
首先,请注意,您要查找的不是驱动程序何时加载,例如,内置于内核中的驱动程序(而不是作为模块加载)是由引导加载程序加载的。您想要弄清楚的是驱动程序何时执行初始化,大概是当它完成初始化时,以便使用该驱动程序的外设现在可以使用。
如果您想在驱动程序完成初始化时输出某种可见信号,则必须修补内核。用户态没有通用的钩子。
如果您对特定外设感兴趣,而不是“较低层”驱动程序(例如 )usbcore
,那么您可以使用 udev 规则。仅当内核完成启动且用户空间(特别是 udev)启动后,此功能才会发挥作用。
话虽这么说,你真正想要的是什么是日志消息中的时间。为了“测量从开机到加载 USB 驱动程序的时间”,日志消息中的时间戳正是正确的信息。消息中的时间戳是事件发生的时间,而不是显示日志消息的时间(可能会晚得多,特别是如果日志设备尚未初始化或者您正在使用以下命令查看日志)命令dmesg
)。
要执行测量,您需要知道与设备时钟相关的开机时间。如果设备没有电池,因此其时钟在开机时始终从特定原点开始,那么经过的时间就是您感兴趣的时间戳减去原点。如果设备有固定时钟,则首先将该时钟与另一台计算机同步(例如使用 NTP),然后尽可能精确地测量开机事件的时间。