2013-12-11 4 views
9

Что значит "копируется в ОЗУ"?

U-boot будет копировать блок памяти переменных окружения в ОЗУ?

Благодаря

ответ

5

адрес и размер ENV переменных блок будет определен в файле заголовков доски. См include/configs/am3517_evm.h, например:

#define CONFIG_SYS_ENV_SECT_SIZE  (128 << 10)  /* 128 KiB */ 
#define CONFIG_ENV_OFFSET    SMNAND_ENV_OFFSET 
#define CONFIG_ENV_ADDR     SMNAND_ENV_OFFSET 

U-Boot загружает CONFIG_SYS_ENV_SECT_SIZE из SMNAND_ENV_OFFSET. Вы можете изменить значения, а затем сохранить их с помощью saveenv.

8

Да, U-boot будет копировать блок памяти переменных окружения в ОЗУ.

Постоянное хранилище, в котором происходит блок, относится к платформе. Некоторые параметры общего хранилища (и исходный файл обработка, что вариант хранения):

NOR flash common/env_flash.c 
SPI flash common/env_sf.c 
MMC   common/env_mmc.c 

определение CONFIG_ в включают/конфигу/yourboard.h будет определять детали. Например, для SPI флэш отображается в верхней части памяти, может быть:

#define CONFIG_ENV_IS_IN_SPI_FLASH 
#define CONFIG_ENV_SIZE 0x00001000 
#define CONFIG_ENV_ADDR 0xFFFFF000 

CONFIG_ENV_ADDR это адрес U-Boot переменной окружения раздела в Flash.

Обратите внимание, что u-boot автоматически создает CRC32 в этом разделе при записи среды в постоянное хранилище. Этот CRC проверяется, когда среда считывается при запуске. Если проверка CRC не проходит, хранимая среда не используется; вместо этого используется новое стандартное окружение, жестко закодированное в программном коде, что является особым случаем.

Во время инициализации U-Boot переменные среды импортируются в хэш-таблицу. В операции все операции чтения/записи и все команды «printenv» (переменная среды отображения) и «setenv» (set environment variable) используют эти записи в таблице. Любые изменения не сохранены до тех пор, пока не будет выполнена команда «saveenv», которая записывает в постоянное хранилище.

Для получения дополнительной информации см. u-boot/common/cmd_nvedit.c линии 14-24 и u-boot/README линии 3474-3881 (номера строк приведены для v2013.10).

+0

@ Joe Kul, спасибо. Если u-boot копирует блок памяти переменных окружения в ОЗУ. Тогда где мы определили адрес этого раздела в ОЗУ? Я удивляюсь, почему u-boot не читает и не импортирует свою секцию env непосредственно из flash в ** хеш-таблицу **, но нужно скопировать в RAM, а затем импортировать позже? –

+0

U-Boot копирует почти все, начиная от флеш-памяти и заканчивая оперативной памятью. Это называется «перемещение».Чтобы получить адрес в ОЗУ для всего, что исходило от флэш-памяти, вы можете добавить «Перемещение смещения» (напечатанное на консоли) к месту вспышки, находящемуся в u-boot.map. Также см. Arch/arm/lib/board.c. Но перемещение - отдельная тема. –

+0

@ Joe Kul: Я не знаю, что u-boot нуждается в «переезде». Для моей системы boostrap загружает u-boot в RAM, поэтому я думаю, что u-boot нужно только читать блоки переменных окружения, но не нужно перемещать. На самом деле, мой u-boot - это двоичное изображение, поэтому он не может выполнять какое-либо перемещение. Спасибо –

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