Я экспериментирую с оптимизацией загрузки на своей встроенной системе Linux на основе Raspberry Pi 4 - Yocto и хочу установить, когда загружается модуль ядра vc4-drm.
Я бы хотел, чтобы модуль ядра vc4-drm загружался раньше, чтобы / dev / fb0 был готов раньше. Теперь оно превышает время загрузки моего пользовательского пространства, поэтому я не могу ничего отображать на нем в течение примерно 9 секунд. Однако, если я переместу его так, чтобы он инициализировался раньше, думаю, будет лучше.
Ниже приведено изображение, на котором показаны основные модули ядра, загруженные в мою систему, в режиме полной отладки (загрузочная диаграмма + initcall_debug + serial + printk включен). Вы увидите, что vc4_drm_register почти подошел к концу.
Чтобы подойти к проблеме, я обнаружил следующее: 1042 * порядок загрузки встроенного драйвера? и Как Linux определяет порядок вызовов инициализации модуля? . Ясуси Сёдзи заявляет:
поместите вашу функцию инициализации на более высокий уровень или поместите драйвер устройства на более высокую позицию в Makefile
Для первого метода , в ядре, которое я компилирую, я нашел модуль в drivers/gpu/drm/vc4
, затем заменил module_init(vc4_drm_register)
на early_initcall(vc4_drm_register)
и subsys_initcall(vc4_drm_register)
. Обе попытки не имели абсолютно никакого значения, vc4 по-прежнему загружается примерно на 9 секунде. Либо мне здесь чего-то не хватает, либо это обрабатывается по-другому.
Второй способ - это отрегулировать порядок в драйверах / Makefile. Однако мне кажется, что gpu / drivers уже довольно ранняя стадия.
obj-y += irqchip/
obj-y += bus/
obj-$(CONFIG_GENERIC_PHY) += phy/
# GPIO must come after pinctrl as gpios may need to mux pins etc
obj-$(CONFIG_PINCTRL) += pinctrl/
obj-$(CONFIG_GPIOLIB) += gpio/
obj-y += pwm/
obj-y += pci/
obj-$(CONFIG_PARISC) += parisc/
obj-$(CONFIG_RAPIDIO) += rapidio/
obj-y += video/
obj-y += idle/
# IPMI must come before ACPI in order to provide IPMI opregion support
obj-y += char/ipmi/
obj-$(CONFIG_ACPI) += acpi/
obj-$(CONFIG_SFI) += sfi/
# PnP must come after ACPI since it will eventually need to check if acpi
# was used and do nothing if so
obj-$(CONFIG_PNP) += pnp/
obj-y += amba/
obj-y += clk/
# Many drivers will want to use DMA so this has to be made available
# really early.
obj-$(CONFIG_DMADEVICES) += dma/
# SOC specific infrastructure drivers.
obj-y += soc/
obj-$(CONFIG_VIRTIO) += virtio/
obj-$(CONFIG_XEN) += xen/
# regulators early, since some subsystems rely on them to initialize
obj-$(CONFIG_REGULATOR) += regulator/
# reset controllers early, since gpu drivers might rely on them to initialize
obj-$(CONFIG_RESET_CONTROLLER) += reset/
# tty/ comes before char/ so that the VT console is the boot-time
# default.
obj-y += tty/
obj-y += char/
# iommu/ comes before gpu as gpu are using iommu controllers
obj-$(CONFIG_IOMMU_SUPPORT) += iommu/
# gpu/ comes after char for AGP vs DRM startup and after iommu
obj-y += gpu/
# ...
# ...
# ...
# Continues with a lot more drivers here...
Поэтому мне нужна помощь, чтобы разобраться в этом. Как мне убедиться, что vc4 загружен раньше, чем сейчас? Если мне что-то не хватает, дайте мне знать. Большое спасибо.
ПРИМЕЧАНИЕ: vc4-drm dmesg
root@raspberrypi4-64:~# dmesg | grep vc4
[ 9.123494] calling vc4_drm_register+0x0/0x1000 [vc4] @ 299
[ 9.184440] vc4-drm soc:gpu: bound fe600000.firmwarekms (ops vc4_fkms_ops [vc4])
[ 9.192810] [drm] Initialized vc4 0.0.0 20140616 for soc:gpu on minor 1
[ 9.380513] vc4-drm soc:gpu: fb0: DRM emulated frame buffer device
[ 9.393112] initcall vc4_drm_register+0x0/0x1000 [vc4] returned 0 after 187677 us
ecs