2016-09-07 1 views
1

В зависимости от нескольких конфигураций я пытался в /etc/fw_env.config, таких как один или две записи, я получил следующие ошибки при попытке прочитать U-загрузочные переменные окружения:fw_printenv fw_setenv на вар-сома-АМ33 не удается

[email protected]:~# fw_printenv serverip 
Warning: Bad CRC, using default environment 

или

[email protected]:~# fw_printenv serverip 
Cannot read bad block mark: Invalid argument 

Согласно этой обучающей программе (https://developer.ridgerun.com/wiki/index.php/Setting_up_fw_printenv_to_modify_u-boot_environment_variables), я построил мой /etc/fw_env.config выглядеть следующим образом:

# MTD device name Device offset Env. size Flash sector size Number of sectors 
/dev/mtd6   0x1C0000  0x20000  0x20000    1 
/dev/mtd7   0x1E0000  0x20000  0x20000    1 

FYI Я использую чип TI OMAP ARM (вар-сома-AM33) с Yocto Fido по умолчанию вне коробки от Варисцита с этими версиями программного обеспечения:

  • U-версией загрузчика: u-boot-var-som-am33 2014-+gitrAUTOINC+adf9a14020

  • U-Boot-ФВ-Utils версии: u-boot-fw-utils v2014.07+gitAUTOINC+524123a707-r0-arago0-var

ответ

1

Основная проблема заключается в том, что "устройство смещения" неправильно описано в учебнике RidgeRun. Это не абсолютное смещение в NAND flash, а скорее смещение от раздела, которое должно быть «0x0» в моем случае.

Вот мой рабочий /etc/fw_env.config

[email protected]:~# cat /etc/fw_env.config 
# MTD device name Device offset Env. size Flash sector size Number of sectors 
/dev/mtd6   0x0    0x20000  0x20000    1 
/dev/mtd7   0x0    0x20000  0x20000    1 

Кроме того, ошибка CRC я получаю отбрасывается, когда нет резервного копирования U-Boot (резервный) среда, описанная в файле /etc/fw_env.config. Утилита fw_printenv работает, копируя «выбранную» среду, изменяя переменную, которую вы изменили, и записывая ее в «новую» среду. Затем он меняет «выбранный» и «новый».

Таким образом, если у вас есть только одна среда в /etc/fw_env.config, она использует значения по умолчанию для «выбранной» среды.

Вот код tools/env/fw_env.c

1230  crc0_ok = (crc0 == *environment.crc); 
1231  if (!HaveRedundEnv) { 
1232   if (!crc0_ok) { 
1233    fprintf (stderr, 
1234     "Warning: Bad CRC, using default environment\n"); 
1235    memcpy(environment.data, default_environment, sizeof default_environment); 
+0

Просто комментарий, '' fw_printenv' и fw_setenv' делает только использовать избыточную копию среды, если U-Boot построить который построил их, были настроены сделать так. Для NAND-flash вы действительно ** должны использовать эту функцию **. Кроме того, если это касается качества продукции, я бы рекомендовал добавить несколько запасных блоков в каждый раздел среды и настроить U-Boot соответственно. – Anders

Смежные вопросы