Как можно изменить окружение uboot из rootfs с помощью fw_setenv?

Вопрос или проблема

Моя операционная система Linux иногда выдает панику ядра при загрузке.

Для этого я определил переменную в uboot, называемую mybootcount. Она будет увеличиваться каждый раз при загрузке; если значение достигнет 3, система перейдет ко второму разделу. Но после успешной загрузки, когда система переходит в rootfs, мне нужно получить доступ к моей среде в Linux и установить значение mybootcount в 0. Для этого я создал файл /etc/fw_env.config. Я выполнил vi /dev/mmcblk1p1 0x140000 0x20000 и сохранил изменения, но когда я выполняю fw_printenv, получаю ошибку предупреждения: bad crc, используя значение по умолчанию. Однако я не получаю никаких предупреждений во время загрузки uboot.

Мой конфигурационный файл uboot

          CONFIG_ENV_IS_IN_FAT=y
          CONFIG_ENV_FAT_DEVICE_AND_PART="1"
          CONFIG_ENV_SIZE=0X20000
          CONFIG_ENV_OFFSET=0X140000

Моя загрузка uboot

U-Boot 2019.04-linux4sam_6.2 (3 окт 2024 – 10:35:02 +0300) MMC: sdio-host@a0000000: 0, sdio-host@b0000000: 1 Загрузка окружения из FAT… OK

printenv

bootargs=console=ttyS0,115200 earlyprintk root=/dev/mmcblk1p2 rw rootwait rootfstype=ext4 panic=3 atmel.pm_modes=standby,ulp1

bootargs2=console=ttyS0,115200 earlyprintk root=/dev/mmcblk1p3 rw rootwait rootfstype=ext4 panic=3 atmel.pm_modes=standby,ulp1

bootcmd=echo bootcounter: ${mybootcount}; run choose_bootargs; setexpr mybootcount ${mybootcount} + 1; saveenv; fatload mmc 1:1 0x21000000 at91-sama5d27_srcgb_mdm.dtb; fatload mmc 1:1 0x22000000 zImage; bootz 0x22000000 – 0x21000000 ;

bootcount=1
bootdelay=3
bootlimit=3

choose_bootargs=if test ${mybootcount} -ge ${bootlimit}; then echo “РЕЗЕРВНЫЙ ROOTFS”; setenv bootargs ${bootargs2}; setexpr mybootcount 0; else echo “ГЛАВНЫЙ ROOTFS”; fi; saveenv;

После ядра

fw_env.config:/dev/mmcblk1p1 0x140000 0x20000

fw_printenv
bootcmd=bootp; setenv bootargs root=/dev/nfs nfsroot=${serverip}:${rootpath} ip=${ipaddr}:${serverip}:${gatewayip}:${netmask}:${hostname}::off; bootm
bootdelay=5
baudrate=115200
mybootcount=0

Ответ или решение

Для изменения переменной окружения в U-Boot из файловой системы rootfs с помощью fw_setenv и устранения проблемы с предупреждением о некорректной контрольной сумме (CRC), необходимо убедиться, что конфигурация fw_env.config и размер переменной окружения правильно указаны.

Шаги решения проблемы:

  1. Проверьте конфигурацию fw_env.config:

    Убедитесь, что файл /etc/fw_env.config правильно настроен и соответствует конфигурации U-Boot. Например:

    # Путь к устройству
    /dev/mmcblk1p1 0x140000 0x20000

    Это указывает, что переменные окружения находятся на первом разделе (p1) второго устройства (mmcblk1) с начальным смещением на 0x140000 и размером 0x20000.

  2. Убедитесь в правильности CRC:

    Ошибка "bad crc using default environment" может указывать на то, что данные в области памяти для переменных окружения неправильно записаны или повреждены. Вы можете попробовать:

    • Перезагрузить U-Boot и выполнить команду saveenv из командной строки U-Boot, чтобы убедиться, что переменные окружения корректно сохраняются.
    • Проверьте, совпадают ли значения CONFIG_ENV_SIZE и CONFIG_ENV_OFFSET в конфигурации U-Boot с теми, которые вы указали в файле fw_env.config.
  3. Проверка целостности файловой системы:

    Убедитесь, что раздел файловой системы, где хранятся переменные окружения (в данном случае /dev/mmcblk1p1), не поврежден. Вы можете выполнить команду fsck для проверки целостности файловой системы.

  4. Использование fw_setenv:

    После того как вы убедились, что конфигурация настроена правильно и данные в области памяти корректны, вы можете использовать команду fw_setenv для изменения значения вашей переменной:

    fw_setenv mybootcount 0

    Это установит значение mybootcount в 0 после успешной загрузки системы.

  5. Мониторинг логов:

    Если у вас продолжаются проблемы с загрузкой и возникновением ошибок, рекомендуется следить за логами системы и U-Boot. Убедитесь, что команда fw_printenv правильно отображает ваши переменные окружения, и перепроверьте вывод, если снова получите предупреждение о CRC.

Заключение:

Следуя вышеизложенным шагам, вы сможете диагностировать и исправить проблемы с переменными окружения U-Boot и их корректной настройкой из файловой системы rootfs с помощью fw_setenv. Если проблемы сохраняются, возможно, вам следует пересмотреть конфигурацию U-Boot или обратиться к документации по вашему конкретному оборудованию для получения дополнительного решения.

Оцените материал
Добавить комментарий

Капча загружается...