Yocto linux загрузка неправильная DTB - PullRequest
0 голосов
/ 01 апреля 2020

У меня есть пользовательское изображение для beaglebone, созданное с помощью linux -yocto-tiny. Чтобы заставить мой плащ работать, я создал специальный файл .dts. Все успешно компилируется, .dtb создается и помещается в загрузочную директорию. Однако при загрузке linux пытается загрузить am335x-boneblack.dtb. Я уверен, что мое пользовательское дерево устройств работает, потому что, когда я переименовываю его в am335x ***, все работает как положено.

Теперь я сделал несколько патчей, которые, я думал, сделает linux загрузить дерево моего устройства: 1) В моем файле конфигурации машины my-yocto.conf у меня есть следующие строки (вставка релевантна, по моему мнению):

KERNEL_DEVICETREE = "my-cape.dtb"
IMAGE_BOOT_FILES ?= "u-boot.${UBOOT_SUFFIX} MLO zImage my-cape.dtb"
UBOOT_MACHINE = "am335x_evm_defconfig"

2) Я пропатчил make-файл :

diff --git a/arch/arm/boot/dts/Makefile b/arch/arm/boot/dts/Makefile
index dab2914fa..6f9892643 100644
--- a/arch/arm/boot/dts/Makefile
+++ b/arch/arm/boot/dts/Makefile
@@ -730,6 +730,7 @@ dtb-$(CONFIG_SOC_AM33XX) += \
    am335x-base0033.dtb \
    am335x-bone.dtb \
    am335x-boneblack.dtb \
+   my-cape.dtb \
    am335x-boneblack-wireless.dtb \
    am335x-boneblue.dtb \
    am335x-bonegreen.dtb \

3) Сделаны исправления в u-boot:

Здесь я не был уверен, что поместить в CONFIG_OF_LIST, имя машины или дерева устройств, поэтому я поместил оба :

diff --git a/configs/am335x_evm_defconfig b/configs/am335x_evm_defconfig
index 3457c1fc34..cc260ccedf 100644
--- a/configs/am335x_evm_defconfig
+++ b/configs/am335x_evm_defconfig
@@ -32,7 +32,7 @@ CONFIG_MTDPARTS_DEFAULT="mtdparts=nand.0:128k(NAND.SPL),128k(NAND.SPL.backup1),1
 # CONFIG_SPL_EFI_PARTITION is not set
 CONFIG_OF_CONTROL=y
 CONFIG_DEFAULT_DEVICE_TREE="am335x-evm"
-CONFIG_OF_LIST="am335x-evm am335x-bone am335x-boneblack am335x-evmsk am335x-bonegreen am335x-icev2 am335x-pocketbeagle"
+CONFIG_OF_LIST="am335x-evm am335x-bone am335x-boneblack am335x-evmsk am335x-bonegreen am335x-icev2 am335x-pocketbeagle my-cape my-yocto"
 CONFIG_ENV_VARS_UBOOT_RUNTIME_CONFIG=y
 CONFIG_SPL_ENV_IS_NOWHERE=y
 CONFIG_BOOTCOUNT_LIMIT=y
-- 
2.17.1

Изменения в am335x_evm.h:

diff --git a/include/configs/am335x_evm.h b/include/configs/am335x_evm.h
index c2b2d8dc..e0c1a160 100644
--- a/include/configs/am335x_evm.h
+++ b/include/configs/am335x_evm.h
@@ -139,7 +139,7 @@
        "if test $board_name = A335BONE; then " \
            "setenv fdtfile my-cape.dtb; fi; " \
        "if test $board_name = A335BNLT; then " \
-           "setenv fdtfile am335x-boneblack.dtb; fi; " \
+           "setenv fdtfile my-cape.dtb; fi; " \
        "if test $board_name = A335PBGL; then " \
            "setenv fdtfile am335x-pocketbeagle.dtb; fi; " \
        "if test $board_name = BBBW; then " \
-- 
2.17.1

и

diff --git a/include/configs/am335x_evm.h b/include/configs/am335x_evm.h
index b5fba0a8b0..c2b2d8dc90 100644
--- a/include/configs/am335x_evm.h
+++ b/include/configs/am335x_evm.h
@@ -103,7 +103,7 @@
    "bootpart=0:2\0" \
    "bootdir=/boot\0" \
    "bootfile=zImage\0" \
-   "fdtfile=undefined\0" \
+   "fdtfile=my-cape.dtb\0" \
    "console=ttyO0,115200n8\0" \
    "partitions=" \

Я что-то пропустил? Я могу загрузить свой DTB с помощью файла uEnv (что я и сделал, и это работает). Но я бы хотел, чтобы мое дерево устройств загружалось без него. После загрузки системы я вижу это:

witch to partitions #0, OK
mmc0 is current device
SD/MMC found on device 0
switch to partitions #0, OK
mmc1(part 0) is current device
SD/MMC found on device 1
** Unrecognized filesystem type **
** Unrecognized filesystem type **
switch to partitions #0, OK
mmc0 is current device
Scanning mmc 0:1...
Found /extlinux/extlinux.conf
Retrieving file: /extlinux/extlinux.conf
119 bytes read in 5 ms (22.5 KiB/s)
1:      Yocto
Retrieving file: /zImage
8905216 bytes read in 574 ms (14.8 MiB/s)
append: root=PARTUUID=0b6a9c67-02 rootwait console=ttyS0,115200
Retrieving file: /am335x-boneblack.dtb
Skipping Yocto for failure retrieving fdt

Как мне сделать u-boot для поиска my-cape.dtb вместо am335x-boneblack.dtb?

EDIT

Я нашел это, когда делал printenv:

findfdt=if test $board_name = A335BONE; then setenv fdtfile am335x-bone.dtb; fi

Почему он все еще ищет am335x-bone.dtb? Я думаю, что что-то перезаписывает мои патчи.

1 Ответ

0 голосов
/ 02 апреля 2020

Ну, это зависит от конфигурации uboot. Из того, что я могу сказать, последний рецепт uboot в слое meta-beagleboard (в частности этот патч ) настраивает команду загрузки по умолчанию для загрузки am335x-boneblack.dtb.

Большинство конфигураций uboot позволяют вам укажите вашу собственную команду загрузки в вашем uEnv.txt (возможно, просто попробуйте установить переменную fdtfile там fdtfile=mydevicetree.dtb). В противном случае вы можете предоставить собственную конфигурацию Uboot или исправить существующую для загрузки вашего файла DTB.

...