BeagleBone Black и U-Boot 2020.07: fit_find_config_node: отсутствует описание FDT в DTB

#beagleboneblack #u-boot

#beagleboneblack #u-boot

Вопрос:

Моя среда следующая:

  1. beaglebone black rev C
  2. u-boot 2020.07 создан с использованием defconfig (am335x_evm_defconfig)
  3. ядро загружается через TFTP
  4. RFS монтируется через NFS (buildroot)

Мой beaglebone Black выдает мне эту ошибку при попытке загрузки с карты USD:

 U-Boot SPL 2020.07 (Sep 22 2020 - 16:58:58 -0700)                                                                                                    
Trying to boot from MMC1                                                                                                                             
fit_find_config_node: Missing FDT description in DTB                                                                                                 
No matching DT out of these options:
  

Ошибка загрузки BBB MLO

Когда я загружаюсь без нажатия кнопки S2, кажется, что используется MLO в eMMC, который загружает uEnv.txt на SD-карте.

Я создал скрипт bash, который автоматизирует форматирование моей SD-карты (т. Е. Создание раздела FAT16 с использованием sfdisk и mkfs.vfat):

 #! /bin/sh
#    
#
#Before running, first give 755 permissions:
# chmod 755 mk2partSDcard.sh

#To run script, provide the device (/dev/sdb, /dev/mmcblk) the SD card is 
#attached to using the following:
# 1. lsblk -l 
# 2. df -hT
#and pass the device to the script as root:
#sudo mk2partSDcard.sh /dev/sdb
     
#DRIVE=$1

#if [ ! -e $DRIVE ]
#then
#   echo ""$DRIVE" doesn't exist... closing"
#   exit -1
#fi 

#should only perform the following when re-using an already formatted sd 
#card. No need to do this on a brand new card.
#Erase partition table/labels on uSD card:
dd if=/dev/zero of=$DRIVE bs=1M count=10

#clear additional locations of previous MLOs
#dd if=/dev/zero of=$DRIVE bs=512 count=1 seek=512 
#dd if=/dev/zero of=$DRIVE bs=512 count=1 seek=768 

#type - 0x01=FAT12; 0x04=FAT16; 0x0b=W95 FAT32; 0x0c=W95 FAT32 (LBA); 
#0x0e=W95 FAT16 (LBA); 0x0f=W95 Ext'd (LBA)

#bootable - [ * | - ]

#echo "Starting sfdisk"
#sfdisk $DRIVE <<-__EOF__
#,4096,0x0e,*
#To add additional partition, uncomment the following:
#, ,83
#__EOF__

#echo "Starting mkfs"
#mkfs.vfat -c -F 16 -n "BOOT" -v ${DRIVE}1
#umount ${DRIVE}1
#mkfs.ext4 -L "ROOTFS" -O ^metadata_csum,^64bit -v ${DRIVE}2
#umount ${DRIVE}2
#echo "Done script"
  

Мне удалось отследить fit_find_config_node common_fit.c , и я заметил это в u-boot readme (строка # 52):

  #include <common.h>
#include <errno.h>
#include <image.h>
#include <log.h>
#include <linux/libfdt.h>

ulong fdt_getprop_u32(const void *fdt, int node, const char *prop)
{
    const u32 *cell;
    int len;

    cell = fdt_getprop(fdt, node, prop, amp;len);
    if (!cell || len != sizeof(*cell))
        return FDT_ERROR;

    return fdt32_to_cpu(*cell);
}

/*
 * Iterate over all /configurations subnodes and call a platform specific
 * function to find the matching configuration.
 * Returns the node offset or a negative error number.
 */
int fit_find_config_node(const void *fdt)
{
    const char *name;
    int conf, node, len;
    const char *dflt_conf_name;
    const char *dflt_conf_desc = NULL;
    int dflt_conf_node = -ENOENT;

    conf = fdt_path_offset(fdt, FIT_CONFS_PATH);
    if (conf < 0) {
        debug("%s: Cannot find /configurations node: %dn", __func__,
              conf);
        return -EINVAL;
    }

    dflt_conf_name = fdt_getprop(fdt, conf, "default", amp;len);

    for (node = fdt_first_subnode(fdt, conf);
         node >= 0;
         node = fdt_next_subnode(fdt, node)) {
        name = fdt_getprop(fdt, node, "description", amp;len);
        if (!name) {
#ifdef CONFIG_SPL_LIBCOMMON_SUPPORT
            printf("%s: Missing FDT description in DTBn",
                   __func__);
#endif
            

    return -EINVAL;
            }
    
            if (dflt_conf_name) {
                const char *node_name = fdt_get_name(fdt, node, NULL);
                if (strcmp(dflt_conf_name, node_name) == 0) {
                    dflt_conf_node = node;
                    dflt_conf_desc = name;
                }
            }
    
            if (board_fit_config_name_match(name))
                continue;
    
            debug("Selecting config '%s'", name);
    
            return node;
        }
    
        if (dflt_conf_node != -ENOENT) {
            debug("Selecting default config '%s'n", dflt_conf_desc);
            return dflt_conf_node;
        }
    
        return -ENOENT;
    }
  

Строка 52 из common_fit.c :
IFDEF_SPL_LIBCOMMON

поскольку это разрешено деконфигурацией, я не хочу это менять.

Моя цель — загрузиться с и SD (как я делал в прошлом), используя MLO, u-boot.img, amp; uEnV.txt . Я не уверен, что изменилось с прошлого. У меня также есть шестнадцатеричный дамп моей SD-карты, доступный по запросу.

Комментарии:

1. Вы должны поместить текстовое содержимое в формате кода (двойные фигурные скобки в строке меню редактора) вместо снимков экрана: это позволит людям, которые хотят помочь, просто копировать / вставлять точные команды / код, с которыми вы экспериментировали. Еще не поздно это сделать.

2. Пожалуйста, дополните свой вопрос всеми сообщениями, которые отображались u-boot с момента включения beaglebone, более конкретно командой, которая использовалась для загрузки Linux: в ней должен быть указан файл dtb, который вы должны были получить с помощью TFTP.

3. Что-то не так с подходящим изображением, которое вы используете с SPL. Мы близки к выпуску U-Boot версии 2020.10. Пожалуйста, перестройте с помощью git HEAD. Если v2020.10-rc5 имеет ту же проблему, пожалуйста, обратитесь к сопровождающему. См . раздел board/ti /beagle / СОПРОВОЖДАЮЩИЕ

4. @Frant готово, я ценю ваше мнение

5. @Xypron сделает спасибо